π© λ¬Έμ νμ
λ¬Έμ νμ΄μ§μ μ μνλ©΄ νμκ°μ
κ³Ό λ‘κ·ΈμΈν μ μλ νΌμ νμΈν μ μλ€. μ½λλ₯Ό νμΈν΄λ³΄λ©΄ JOIN μ IDλ id
, PHONEμ phone
μ nameμ κ°μ§κ³ , LOGINμ IDλ lid
, PHONEμ lphone
μ nameμ κ°μ§λ κ²μ νμΈν μ μλ€. view-sourceλ₯Ό ν΅ν΄ νλ‘κ·Έλ¨ μμ€μ½λλ₯Ό νμΈν΄λ³΄μ.
- JOIN μ²λ¦¬ μ½λ
1
2
3
4
5
6
7
8
if($_POST['id'] && isset($_POST['phone'])){
$_POST['id'] = addslashes($_POST['id']);
$_POST['phone'] = addslashes($_POST['phone']);
if(strlen($_POST['phone'])>=20) exit("Access Denied");
if(preg_match("/admin/i",$_POST['id'])) exit("Access Denied");
if(preg_match("/admin|0x|#|hex|char|ascii|ord|select/i",$_POST['phone'])) exit("Access Denied");
mysqli_query($db,"insert into chall59 values('{$_POST['id']}',{$_POST['phone']},'guest')");
}
addslashes
ν¨μλ‘ μ λ ₯ κ°μ μ²λ¦¬νκΈ°μ μ±κΈμΏΌν°'
λ₯Ό μ¬μ©ν μ μλ€.phone
κ°μ κΈΈμ΄λ 20 μ΄μμΌ μ μλ€.id
κ°μ/admin/i
μ κ·μμ λ§μ‘±ν μ μλ€.phone
κ°μ/admin|0x|#|hex|char|ascii|ord|select/i
μ κ·μμ λ§μ‘±ν μ μλ€.- λͺ¨λ 쑰건μ λ§μ‘±νμ μμ
insert into chall59 values('{$_POST['id']}',{$_POST['phone']},'guest')
ꡬ문μ μ€ννλ€.
- LOGIN μ²λ¦¬ μ½λ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if($_POST['lid'] && isset($_POST['lphone'])){
$_POST['lid'] = addslashes($_POST['lid']);
$_POST['lphone'] = addslashes($_POST['lphone']);
$result = mysqli_fetch_array(mysqli_query($db,"select id,lv from chall59 where id='{$_POST['lid']}' and phone='{$_POST['lphone']}'"));
if($result['id']){
echo "id : {$result['id']}<br>lv : {$result['lv']}<br><br>";
if($result['lv'] == "admin"){
mysqli_query($db,"delete from chall59");
solve(59);
}
echo "<br><a href=./?view_source=1>view-source</a>";
exit();
}
}
addslashes
ν¨μλ‘ μ λ ₯ κ°μ μ²λ¦¬νκΈ°μ μ±κΈμΏΌν°'
λ₯Ό μ¬μ©ν μ μλ€.- λ°μ΄ν°λ² μ΄μ€μμ μ¬μ©μκ° μ
λ ₯ν
lid
μlphone
μ ν΄λΉνλ λ°μ΄ν°μlv
μ΄admin
μΌ κ²½μ° λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
SQL Injectionμ ν΅ν΄ lv
μ΄ admin
μΈ κ³μ μΌλ‘ νμκ°μ
νκ³ λ‘κ·ΈμΈνλ©΄ λ¬Έμ λ₯Ό ν μ μλ€.
π© λ¬Έμ νμ΄
μ°μ lv
μ΄ admin
κ°μ κ°μ§λ κ³μ μ μμ±ν΄λ³΄μ. join μμ login μμ λͺ¨λ μ±κΈμΏΌν°λ₯Ό μ¬μ©ν μ μκΈ°μ μ΄λ₯Ό μ¬μ©νμ§ μκ³ κ³μ μ μμ±νλ λ°©λ²μ μ°ΎμμΌνλ€.
μ°λ¦¬κ° μ
λ ₯ν κ°μ insert
ꡬ문μ ꡬμ±νμ¬ MySQL 쿼리λ₯Ό μ€ννκΈ° λλ¬Έμ MySQLμμ μ§μνλ λ¬Έμμ΄ κ΄λ ¨ ν¨μλ₯Ό μ΄μ©νμ¬ admin κ³μ μ μμ±ν΄λ³΄μ.
id=admi&phone=1,concat(id,chr(110))--+
(μ£Όμ μ²λ¦¬ λ€μ 곡백 λ¬Έμ νμ)
λνμ μΈ λ¬Έμμ΄ κ΄λ ¨ ν¨μλ concat
, substr
, replace
, reverse
, upper
, lower
λ±μ΄ μλλ°, μ²μμλ μ΄ μ€ concat ν¨μλ₯Ό μ΄μ©νμ¬ POST μμ² μ μ μ‘νλ λ°λ κ°μ ꡬμ±νμλ€. κ·Έλ¬λ, phone
κ°μ κΈΈμ΄κ° 20μ΄μμΌ μ μλ€λ 쑰건μ μΆ©μ‘±νμ§ λͺ»νμλ€.
id=nimda&phone=1,reverse(id))--+
κ·Έλμ reverse
ν¨μλ₯Ό μ΄μ©νμ¬ κ΅¬μ±νμκ³ , μ΄λ λͺ¨λ 쑰건μ μΆ©μ‘±νμλ€.
νμ΄μ§μ μ§μ μ λ ₯νμ¬ joinνλ©΄ μ΄λ° λͺ¨μ΅μ΄ λ κ²μ΄λ€.
lid=nimda&lphone=1
μμ²μ 보λ΄κ³ μμ λ°λ κ°μΌλ‘ LOGINμ μλνμλλ λ¬Έμ λ₯Ό ν μ μμλ€.
νμ΄μ§μ μ§μ μ λ ₯νμ¬ loginνλ©΄ μμ κ·Έλ¦Όκ³Ό κ°λ€.