티스토리 뷰
728x90
반응형
$_GET[id]
PHP 소스코드 상으로는 id를 GET 파라미터로 받는다고 합니다.
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
그리고 id 파라미터에 '(작은따옴표)가 오면 필터링됩니다.
if(preg_match("/admin/", $_GET[id])) exit("HeHe");
또 id 파라미터에 admin 이라는 문자열이 오면 필터링됩니다.
$query = "select id from prob_troll where id='{$_GET[id]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("troll");
query 변수에 GET 파라미터로 전달받은 id를 넣고, mysql에 query를 실행했을 때 결과로부터 id가 admin일 때 문제가 해결된다고 합니다.
이 문제의 핵심은 바로 두 번째 필터링하는 코드에서 admin 문자열의 대소문자 구분을 하고 있다는 것입니다. 쉽게 말해 admin 을 만약에 ADMIN이라고 입력했을 때 필터링에 걸리지 않는다는 말이죠.
만약 대소문자 구분을 안하게 정규식을 만드려면 아래와 같이 작성할 수 있겠습니다. i 가 빠짐으로서 커다란 취약점이 생긴 셈입니다.
if(preg_match("/admin/i", $_GET[id])) exit("HeHe");
결론적으로 URL에서 id 파라미터를 아래와 같이 한다면, 문제는 해결됩니다.
https://los.rubiya.kr/chall/troll_1.php?id=Admin
https://los.rubiya.kr/chall/troll_1.php?id=ADMIN
728x90
반응형
'보안 > Wargame' 카테고리의 다른 글
[Lord of SQLi] skeleton Writeup/문제풀이 (0) | 2021.08.16 |
---|---|
[Lord of SQLi] vampire Writeup/문제 풀이 (0) | 2021.08.12 |
[Lord of SQLi] orge Writeup/문제 풀이 (0) | 2021.08.11 |
[Lord of SQLi] darkelf Writeup/문제 풀이 (0) | 2021.08.10 |
[Hackthebox] - Toxic Writeup(문제풀이) (0) | 2021.08.09 |
댓글