Oh! JUN
[Lord Of SQL Injection] 18번(('1')==0?) ;00% 본문
[Lord Of SQL Injection] 18번(('1')==0?) ;00%
Kwon Oh! JUN 2022. 2. 6. 03:28query : select id from prob_nightmare where pw=('') and id!='admin'
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~");
if(strlen($_GET[pw])>6) exit("No Hack ~_~");
$query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("nightmare");
highlight_file(__FILE__);
?>
쿼리를 살펴보니까 그 동안 푼거랑은 형태가 다르다.
pw=('') 특이하게 가로가 쳐져있는걸 확인할 수 있다.
★ 조건
#,- 주석문자들이 예외처리 된걸 확인 할 수 있다.
pw는 6자리 이하이다.
★ 해결방안
pw=('')를 참으로 만들어줘야 된다.
id != admin를 주석처리해야 한다.
pw는 6자리를 넘어서는 안된다.
pw=('') and id!='admin' 부분을 pw=('')=0;%00') and id!='admin' 이렇게 만들어주었다.
('')=0 이 부분이 중요한데 ('')(문자열)=0(숫자) 문자열과 숫자를 비교하는 구문이다.
문자열과 숫자를 비교할때 문자열의 첫 단어부터 숫자를 추출하고 숫자랑 비교를 해야한다.
하지만 대부분의 문자열의 첫 단어는 숫자가 아니기 때문에 숫자가 아닌 문자들을 모두 0으로 치환을 시키고 숫자랑 비교를 한다.
('apple')(문자열) | 0(숫자) |
↓ | |
00000 | 0 |
그래서 ('apple')은 0으로 치환되고 숫자 0이랑 비교를 하기 때문에
('apple') = 0 (참)
('apple') = 1 (거짓)
주석처리하는 방법에는
1. #
2. --
3. ;%00
1, 2번은 예외처리 되어있으니까 ;%00을 사용해서 주석처리를 한다.
pw=('')=0;%00') and id!='admin'
;%00 뒤에는 주석처리 되니까 무시되고, 남는거는 pw=('')=0이다.
결과적으로 ('')=0는 참이니까
select id from prob_nightmare where pw=('')=0;') and id!='admin'
NIGHTMARE Clear!
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~");
if(strlen($_GET[pw])>6) exit("No Hack ~_~");
$query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) solve("nightmare");
highlight_file(__FILE__);
?>
'문제풀이 > Lord of SQL Injection' 카테고리의 다른 글
[Lord Of SQL Injection] 19번(추가해결방법) (0) | 2022.02.09 |
---|---|
[Lord Of SQL Injection] 19번(어렵다★★★) (0) | 2022.02.08 |
[Lord Of SQL Injection] 17번(더블쿼터, Nullbyte) (0) | 2022.02.05 |
[Lord Of SQL Injection] 16번 문제(싱글쿼터 우회) (0) | 2022.02.05 |
[Lord Of SQL Injection] 15번 (0) | 2022.02.05 |