본문 바로가기
Web/Lord of SQL Injection

Lord of SQL Injection 25단계 (green dragon)

by jh117jh 2023. 4. 14.
728x90

이번에 처치할 몬스터는 green dragon!

선인장..?

 

코드를 보면

이번엔 되게 특이한 문제다.

 

첫 번째 쿼리에서 id와 pw를 받고 id가 있으면 두 번째 쿼리가 작동되는 형식이다.

 

일단 싱글쿼터('), 더블쿼터(")가 필터링 되어 있고 첫 번째 쿼리를 보면 예전에 싱글쿼터 필터링을 우회했던 문제가 생각날 것이다.

 

https://jh-hack.tistory.com/33?category=1091406 

 

Lord of SQL Injection 16단계 (succubus)

이번에 처치할 몬스터는 succubus! 이번 코드를 보면 id와 pw인자를 받고 싱글쿼터(')는 둘 다 필터링되어 있다. 이걸 보고 딱 떠올린게 지난 문제에서 싱글쿼터(')가 필터링되어 있던 문제가 있어 우

jh-hack.tistory.com

 

그래서 \를 이용해 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값을 넣어줘야 됐다.

 

하.... 드디어 됐다

 

지금까지 푼 문제 중에 가장 신경 쓸 것도 많고 어려웠던 문제 같다.

 

다음 몬스터 잡으러 가자~! 

728x90