[LOS] Level3: goblin
두비니
·2019. 12. 31. 21:08
Lord Of SQLInjection: lv.3 goblin
goblin입니다.
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("goblin");
highlight_file(__FILE__);
?>
cobolt처럼 id가 admin이여야하고, no에는 싱글쿼리(작은따옴표)를 쓰지 못하는게 추가되었네요.
또 다른점이라면 no를 입력받지만 id를 admin으로 바꿔야합니다.
따라서 db에 전해지는 query의 조건문은 where id='guest' and no=(입력한값)이 되는데 일단 id가 guest가 되는걸 막아야하므로 no의 값을 guest의 no가 되지 않도록 해야합니다.
근데 뭐 딱 보면 1일때 쿼리가 출력되는것으로 봐서 no에 1만 대입을 안하면 되겠죠??
이상태에서 뒤에 id='admin' 만 넣어주면 되는데 preg_match에서 싱글쿼리도 필터링하기때문에 admin을 hex값으로 바꿔넣어줍시다. python의 encode함수나 구글링해서 바꾸기!
얍얍얍얍얍얍
'War Games > Lord of SQLInjection' 카테고리의 다른 글
[LOS] Level6: orge (0) | 2020.01.04 |
---|---|
[LOS] Level5: wolfman (0) | 2020.01.03 |
[LOS] Level4: orc (0) | 2020.01.01 |
[LOS] Level2: cobolt (0) | 2019.12.31 |
[LOS] Level1: gremlin (0) | 2019.12.30 |