[LOS / LORD OF SQL INJECTION] gremlin
LOS의 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__);
?>
저번 단계와 차이점은 ' | " | ` 을 필터링 한다. admin 과 같은 문자열을 전달하는 것을 필터링하는 것으로 보인다.
미리 작성되어 있는 쿼리문을 살펴보면, id는 guest로 정해져있다. 하지만 우리는 id 값이 admin이여야 문제를 풀 수 있다. 그렇기에 이 id='guest' 부분을 무력화시켜야 한다. 뒤 no에 틀린 값을 줌으로써 id='guest' 부분을 무력화시킬 수 있다. 일단 no에 1을 넣어보자.
정상적으로 Hello guest가 뜨는 것으로 보아 guest라는 id에 맞는 no 값은 1인거 같다. 그럼 다른 값을 줘보자!
이로써 guest라는 id의 no값은 1인 것을 알 수 있다.
그럼 앞에서 말했던 것처럼 일부러 틀린 no 값을 주고 뒤에 or id='admin'을 붙여주면 앞의 식이 무효화되고 뒤의 id='admin'이 본 식이 되면서 쿼리문은 select id from prob_goblin where id='admin'이 될것이다.
이대로 가보쟈!
작은 따옴표로 인해 No Quotes ~_~가 출력된다. 흠 그럼 admin을 hex코드로 변환해서 넣어보자 확!
https://www.online-toolz.com/langs/ko/tool-ko-text-hex-convertor.html
admin은 헥스코드로 61646d696e이고 이를 주소에 넣을때는 이것이 헥스코드임을 알려주는 0x를 앞에 붙여서 넣어주자. 즉
?no=9191 or id=0x61646d696e가 될 것이다. 도젼
률류~
댓글
이 글 공유하기
다른 글
-
[root-me.org - Web-Client] Javascript - Authentication
[root-me.org - Web-Client] Javascript - Authentication
2020.09.14 -
[Webhacking.kr] Challenge old-33
[Webhacking.kr] Challenge old-33
2020.08.16 -
[Webhacking.kr] Challenge old-11
[Webhacking.kr] Challenge old-11
2020.08.15 -
[Webhacking.kr] Challenge old-10
[Webhacking.kr] Challenge old-10
2020.08.14