본문 바로가기
Security/WebHacking

[Load of SQLinjection][LOS] 문제풀이 goblin

by J0DEV 2021. 8. 12.
반응형

LOS 3번째 문제 goblin

코드를 보니

get으로 no 값을 받는데

해당 쿼리를 조회했을 때 결과에서 id가 admin인 row가 있어야한다.

 

근데 여기서 preg_match를 보면 '와 " 등 필터링이 걸려있다.

우선 당황하지 않고 자세히 생각해본다.

 

우선 no를 int형으로 입력하면 뒤에 '를 붙이지 않고 or을 쓸수 있다.

 

그 후 당연히 로직은 or id='admin' 이라고 생각하지만

' 가 필터링이 걸려있다.

 

참고로 url encoding 해도 안된다.

그렇다면 string값을 우회하면된다.

 

DB마다 다르지만 현재의 코드는 mysql를 사용한다.

 

MySQL에서는 Hexadecimal Literals 이란게 존재한다.

https://www.geeksforgeeks.org/mysql-hexadecimal-literals/

한마디로 16진수인 hex값으로 데이터를 이해할수 있다.

그렇다면 우리는 admin을 16진수로 변경하면된다.

한마디로 int형을 써서 ' 이거나 " 이거를 안써도 되게끔 하는 것이다.

python으로 바로 admin의 hex 값을 알아낸다.

0x61646d696e 이다.

그렇다면 다음과 같이 poc를 작성할 수 있다.

 

?no=123 or id = 0x61646d696e

 

 

 

반응형