[Writeup]/[Lord Of SQLInjection] succubus
2025. 3. 5. 20:49ㆍHacking/WebHacking Wargame Writeup
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/\\'/',$_GET[id])) exit("HeHe");
if(preg_match('/\\'/',$_GET[pw])) exit("HeHe");
→ get으로 서버에 요청된 id, pw 값에 prob, _, ., (), ‘가 들어가면 필터링이 된다.
$query = "select id from prob_succubus where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
→ 명령문은 id를 찾는데, prob_succubus라는 테이블에 있어야하고, id, pw값은 요청된 id, pw값이어야 한다.
→ id를 찾으면 문제가 해결된다.
if($result['id']) solve("succubus");
⇒ id를 찾아야 해결되는 것이고, id를 알기 위해서는 id, pw 둘 다 알고 있어야한다. → 하지만 모르는 값들이기 때문에, sql injection을 이용하여 필터링을 잘 우회해서 문제를 풀어야한다.
→ id 값에 \를 넣어서 id 뒤에 있는 ‘의 의미를 문자열로 인식한다.
→ 다음 ‘인 pw 앞까지가 id의 범위가 된다.
→ pw 값에 ‘를 넣지 않도록 설계한다.
⇒ pw 값에 or를 넣고, 뒤에 true로 만들고 주석처리를 하면 문제가 해결된다.
[도메인값]?id=\\&pw= or 1=1 -- -
→ 클리어 창이 뜨는 것을 확인할 수 있다.
'Hacking > WebHacking Wargame Writeup' 카테고리의 다른 글
[Writeup]/[Lord of SQLInjection] nightmare (0) | 2025.03.05 |
---|---|
[Writeup]/[Lord Of SQLInjection] zombie_assassin (0) | 2025.03.05 |
[Writeup]/[Lord Of SQLInjection] assassin (0) | 2025.03.05 |
[WriteUp]/[Lord Of SQLInjection] giant (0) | 2025.03.05 |
[Writeup]/[Lord Of SQLInjection] bugbear (0) | 2025.03.05 |