[WARGAME] los.rubiya.kr - zombie_assassin
2022. 8. 14. 15:21ㆍ정보보안/CTFLOG
반응형
<?php
include "./config.php";
login_chk();
$db = dbconnect();
$_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 ~_~");
$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");
highlight_file(__FILE__);
?>
17번 좀비 어세신 문제이다.
get으로 요청받는 부분을 보면 id와 pw 모두 addslashes함수로 처리된 후 strrev로 인해 문자열이 뒤집힌다.
https://www.php.net/manual/en/function.addslashes.php << addslashes에 대한 정보는 이곳에서 확인할 수 있다.
- single quote (')
- double quote (")
- backslash (\)
- NUL (the NUL byte)
이 4가지 앞에 슬래쉬가 붙는다고 생각하면 쉽다..
페이로드를 어떻게 구성해야 할지 잠깐 생각해 본다면,
저번 16번 문제인 서큐버스에서 \는 pw의 첫번째 싱글쿼터까지 문자열로 처리되게 하기 때문에
addslashes 함수와 strrev를 잘 사용한다면 풀린다.
id="&pw=%23 1=1 ro
이렇게 보낸다면
where id='"\' and pw='or 1=1 %23'
이렇게 되서 풀린다.
근데 왜 저 4가지중 하필 더블쿼터(")를 사용했는지 의문이다.
이유는 바로 '를 사용할지 더블쿼터가 만나서
where id=''\' and pw='or 1=1 %23'
\'이 밖으로 나가게 되버리면서 실행되지 않는다.
따라서 더블쿼터를 사용해서 해결했다.
반응형
'정보보안 > CTFLOG' 카테고리의 다른 글
[CTF] Blackhat 2022 CTF - naruto (0) | 2022.10.02 |
---|---|
[WARGAME] los.rubiya.kr - Nightmare (0) | 2022.08.14 |
[WARGAME] los.rubiya.kr - succubus (0) | 2022.08.14 |
[WARGAME] Dreamhack - XSS Filtering Bypass Advanced (0) | 2022.07.13 |
[WARGAME] Dreamhack - blind sql injection (0) | 2022.07.11 |