ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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과 똑같이 동작한다.

     

     

     

    트롤 컷!🔪🔪

    댓글

Designed by Tistory.