-
[Lord of SQLInjection] #8 troll[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 19:26
8번째 몬스터 트롤!
한번 살펴보자
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match("/admin/", $_GET[id])) exit("HeHe");
두 코드를 보아 따옴표와 'admin'를 필터링 해놓았음을 알 수 있고,
if($result['id'] == 'admin') solve("troll");
코드를 보아 id값이 admin인 레코드를 조회해야한다.
따옴표가 필터링 되었으니 쿼리를 끊어서 추가로 삽입할 수도 없고,
admin이 필터링 되었는데 어떻게 admin을 조회하라는거냐?!...
이 문제는 php코드와 mysql의 연동사이에서의 취약점에 대해 알아야한다!
해당코드는 <php 를 보면 알 수 있듯이 php 코드로 작성되어있고,
$db = dbconnect()코드로 외부 데이터베이스와 연동한다.
(아마 mysql을 이용할 것이다.. 아마...)
이후 $query = "select id from prob_troll where id = '{$_GET{id}}'"절을 통해 이 쿼리를 sql에서 실행한다.
하지만 mysql 에서는 대소문자를 구분하지 않는다
select id from prob_troll where id = 'admin'
select id from prob_troll where id = 'ADMIN'
SELECT ID FROM PROB_TROLL WHERE ID = 'ADMIN'
seLeCt Id FrOm pRob_tRoll WHere iD = 'aDmIN'
sql 에선 이 넷 모두 같은 코드인 셈이다!! ㄴㅇㄱ!
즉! php 에서 입력한 ADMIN은 대문자라서 admin 필터링을 피할 수 있고, mysql에서 ADMIN은 admin과 똑같이 동작한다.
트롤 컷!🔪🔪
'[+] Security [+] > Lord of SQLInjection' 카테고리의 다른 글
[Lord of SQLInjection] #10 skeleton (0) 2020.05.03 [Lord of SQLInjection] #9 vampire (0) 2020.05.03 [Lord of SQLInjection] #7 orge (0) 2020.05.03 [Lord of SQLInjection] #6 darkelf (0) 2020.05.03 [Lord of SQLInjection] #5 wolfman (0) 2020.05.03