이번에 처치할 몬스터는 green dragon!
코드를 보면
이번엔 되게 특이한 문제다.
첫 번째 쿼리에서 id와 pw를 받고 id가 있으면 두 번째 쿼리가 작동되는 형식이다.
일단 싱글쿼터('), 더블쿼터(")가 필터링 되어 있고 첫 번째 쿼리를 보면 예전에 싱글쿼터 필터링을 우회했던 문제가 생각날 것이다.
https://jh-hack.tistory.com/33?category=1091406
그래서 \를 이용해 id 싱글쿼터를 문자로 만들고 pw에 or 1=1#으로 계정을 가져 올려했지만 이상하게 아무 반응이 없었다.
쿼리문이 잘못되었나 체크도 하고 다른 쿼리문도 넣어보고 다른 필터링이 있는지 확인했지만 아무런 이상이 없었다.
계속 고민하던 중 애초에 두 번째 쿼리 작동 조건이 id가 존재하는지의 여부인 것을 보고 괜히 이런 조건을 넣은 게 아니라는 생각에 처음부터 prob_green_dragon이라는 테이블에 아무런 id와 pw가 저장되어 있지 않았다는 결론이 나왔다.(그래서 참인 쿼리문을 넣어도 아무런 반응이 없던 것이다.)
그러면 prob_green_dragon테이블에 없는 id와 pw를 출력해야 되는 건데 이때 우리가 자주 사용했던 union을 사용하면 된다.
union은 서로 다른 테이블의 칼럼을 합쳐주기 때문에 pw부분에 union select 1,2%23을 넣으면
이 처럼 두 번째 쿼리가 나타나고 id와 pw에 1,2가 들어가 있는 모습을 볼 수 있다.
두 번째 쿼리는 우회법이 위에 succubus문제와 같기 때문에 쉽게 풀 수 있다.
id부분에 \ , pw부분에 union select id=0x61646d696e를 넣으면 될 줄 알았다.
왜인지 두번째 쿼리로 넘어가지 않았다.
한참을 헤매다가 결국 검색해 봤는데 id와 pw의 데이터타입이 숫자였던 거였다.
union을 사용할 때 칼럼수와 데이터타입이 같아야 정상적으로 작동한다.
당연히 id와 pw라서 문자타입이 들어갈 거라는 생각에 미처 생각하지 못한 부분이었다....
그래서 union 부분을 전부 16진수로 바꿔서 넣어줬다.
머리 잡고 한참 생각해 보니까 두 번째 쿼리문도 union을 이용하여 id값을 넣어줘야 됐다.
하.... 드디어 됐다
지금까지 푼 문제 중에 가장 신경 쓸 것도 많고 어려웠던 문제 같다.
다음 몬스터 잡으러 가자~!
'Web > Lord of SQL Injection' 카테고리의 다른 글
Lord of SQL Injection 27단계 (blue dragon) (0) | 2023.04.24 |
---|---|
Lord of SQL Injection 26단계 (red dragon) (0) | 2023.04.22 |
Lord of SQL Injection 24단계 (evil wizard) (0) | 2023.04.12 |
Lord of SQL Injection 23단계 (hell_fire) (0) | 2023.04.11 |
Lord of SQL Injection 22단계 (dark_eyes) (0) | 2023.04.10 |