Almon Dev

[Lord of SQL Injection] zombie_assassin 문제 풀이 본문

웹 해킹/Lord of SQLi

[Lord of SQL Injection] zombie_assassin 문제 풀이

Almon 2025. 5. 1. 11:46

zombie_assassin 문제 풀이

 

zombie_assassin 문제

 

문제 분석

 

 문제 목표

id와 pw 파라미터를 이용해 삽입된 SQL 쿼리의 결과가 존재할 경우, solve("zombie_assassin") 함수가 실행됩니다. 이 함수는 문제를 성공적으로 해결했을 때 호출되는 것으로 보이므로, 이 문제의 목표는 id와 pw 파라미터를 활용해 SQL 인젝션을 성공시키는 것입니다.

$query = "select id from prob_zombie_assassin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; 
echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
if($result['id']) solve("zombie_assassin");

 

 입력 제한

id와 pw 파라미터 모두 addslashes 함수를 이용해 \, ', "등의 특수문자를 이스케이프 처리를 하고 있으며, 이후 strrev 함수로 문자열이 반대로 뒤집어집니다.

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

 

 취약점 분석

addslashes 함수로 ', ", \가 이스케이프 처리되어 문자열 탈출이 힘들어 보이지만, 이후 strrev 함수로 문자열이 반전되기 때문에 문자열 탈출이 가능해지고, 이를 통해 SQL Injection이 가능합니다.

id 파라미터에 "(큰따옴표)를 삽입한 경우 addslases 함수를 통해 \"로 이스케이프 처리되고, strrev 함수를 통해 "\로 반전됩니다. 이 값을 쿼리에 삽입하면 "select id from prob_zombie_assassin where id='"\' and pw='{$_GET[pw]}'" 형태가 되어 '가 \'로 이스케이프 처리되기 때문에 id의 문자열이 정상적으로 종료되지 않게 됩니다. 그 결과 pw 파라미터에 입력한 값이 문자열을 벗어나 SQL 로직에 영향을 줄 수 있어 SQL Injection이 가능합니다.

 

문제 풀이

 

1. id 파라미터에 "(큰따옴표)를 삽입하여 문자열이 탈출된 것을 확인합니다.

=> 쿼리가 select id from prob_zombie_assassin where id='"\' and pw='{$_GET[pw]}' 형태

 

2. pw 파라미터에 or 1=1#이 되도록 문자열을 반전해서 삽입하여 문제풀이를 완료합니다.

=> pw 파라미터 : %231=1 ro