소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?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__);
?>
|
cs |
풀이
pw만 파라미터로 받아주고 id는 guest로 고정되어있다.
쿼리를 보내서 id가 admin인 결과가 반환되면 문제가 풀린다.
여기서 pw에 공백과 _나 .같은 문자들은 필터링이 되어있는 것을 확인해줄 수 있다.
공백을 사용할 수 없어서 and나 or같은 논리 연산자들은 사용할 수 없다.
주석도 --를 사용할 수 없다.
공백을 사용할 수 없기 때문에 and대신 && or대신 ||를 사용하고, 주석은 #를 사용할 것이다.
?pw=%27||id=%27admin%27%23를 파라미터로 넘겨주면 풀 수 있다.
#을 %23으로 따로 인코딩을 해줘야한다. #은 url에서 fragment로 인식된다.
최종적으로 쿼리문은 select id from prob_wolfman where id='guest' and pw=''||id='admin'#가 되게 된다.
and가 먼저 연산되고 id가 admin을 긁어오면 된다.
'WARGAME > Lord of sql injection' 카테고리의 다른 글
LORD OF SQL INJECTION ORGE 풀이 (0) | 2022.05.13 |
---|---|
LORD OF SQL INJECTION DARKELF 풀이 (0) | 2022.05.13 |
LORD OF SQL INJECTION GOBLIN 풀이 (0) | 2022.05.13 |
LORD OF SQL INJECTION COBALT 풀이 (0) | 2022.05.13 |
LORD OF SQL INJECTION GREMLIN 풀이 (0) | 2022.05.13 |