방명록
- Lord of Injection: germiln2024년 10월 01일 16시 39분 55초에 업로드 된 글입니다.작성자: sonootri
1. 문제 설명
query : select id from prob_gremlin where id='' and pw=''
<?php include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database! if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); $query = "select id from prob_gremlin 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("gremlin"); highlight_file(__FILE__); ?>
2. 문제 풀이
?로 쿼리의 시작을 알리고 id값으로 germmmmm을 넣어봤다. 그랬더니 아래의 query 부분이 내가 입력한 문자를 그대로 출력하는 것을 볼 수 있었다. 웹 페이지가 어떻게 동작하는지 알게되었다. 쿼리를 조작할 수 있다는 것을 알아냈으니, 인젝션 공격이 가능하다.
query : select id from prob_gremlin where id='' and pw='' 그리고 코드를 보니, 알맞은 id과 pw를 입력해야 flag를 얻을 수 있는 것 같았다. id는 admin인 것 같고, pw는 모르니 id 이후를 주석처리해서 우회해보자.
select id from prob_gremlin where id='' and pw=''를 속이기 위해서 admin'#를 입력해봤다. 그런데 '는 %27로 바뀌었지만 #은 바뀌지 않았다. 그래서 수동으로 # -> %23으로 바꾸어주었다.
+) #은 URL로 인코딩했을때의 값이 %23이다. #은 --처럼 뒤에 공백이 없어도 정상적으로 주석처리된다. 한 줄만 주석 처리하는 특징이 있다.
https://los.rubiya.kr/chall/gremlin_280c5552de8b681110e9287421b834fd.php?id=admin%27#
와 클리어다. flag 값이 나오는건 아니었다.
<참고 자료>
'Dreamhack > 워게임' 카테고리의 다른 글
webhacking.kr: old-27 (0) 2024.10.01 Dreamhack: simple_sqli_chatgpt (1) 2024.10.01 Web Hacking_command-injection-1🚩 (3) 2024.09.28 Web Hacking_simple_spqi🚩 (0) 2024.09.27 root_me: CSRF-0 (0) 2024.09.25 다음글이 없습니다.이전글이 없습니다.댓글