<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~");
$query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'";
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("wolfman");
highlight_file(__FILE__);
?>
5번의 wolfman 코드이다.
쿼리는 guest로 날리지만, 문제를 해결하려면 admin으로 로그인하여야 한다.
그리고 preg_match 정규식함수에 띄어쓰기를 못하도록 필터링 하였다.
white space filtering으로 구글링하면,
%20을 %0a %0b %0c %0d %09 등으로 우회하여 sql injection을 하는 것을 알 수 있다.
아스키 표에서 %0A를 보면 linefeed로 되어있다. 이는 \n과 같은 개행의 기호인데
html에서는 줄 넘김도 띄어쓰기 한칸으로 인식하기 때문에 띄어쓰기와 같은 용도로 사용이 가능하여 우회가 가능하다.
띄어쓰기(%20)대신 %0a를 넣어 sql injection을 하면 쉽게 성공할 수 있다!
'wargame > los.rubiya.kr' 카테고리의 다른 글
7번 orge (0) | 2020.08.31 |
---|---|
6번 darkelf (0) | 2019.11.16 |
4번 orc (0) | 2019.11.15 |
3번 goblin (0) | 2019.11.05 |
2번 cobolt (0) | 2019.11.04 |