Lord of SQL Injection

Lord of SQL Injection 3번 문제 - goblin

ilsancityboy 2024. 5. 2. 20:01

 

config.php 파일 참조
login_chk() 함수 사용
db연결
입력받은 no 값에 prob, _ , . , () 사용시 No hack 출력
입력받은 no 값에 ' " \ 사용시 No Quotes 출력
입력된 'no' 값을 사용하여 데이터베이스에서 'id' 값을 가져오는 쿼리를 생성.
id 값이 admin 일시 문제 해결


먼저 대략적으로 데이터는 이렇게 지정되어있을거라고 생각했다.
id no
guest 숫자
admin 숫자 
즉 guest의 지정된 숫자랑 admin이 지정된 숫자가 있을것.
지정되어있는 코드는
select id from prob_goblin where id='guest' and no=
까지 고정이 되어있다. 그럼 no에는 guest의 지정된 값이 아닌 아무런값을넣어서 id는 guest이고 no 는 아무런숫자값  결과는 무조건 거짓이되게 일단 만든다.
그럼 id='guest' and no="아무런값" 을 넣어서 쿼리에 고정되어있는 id='guest' 구문까지 거짓을만들어 날려버리는것이다. ( and가 가운데 들어가있기 때문에
no의 값이 틀리면 앞에 guest 내용까지 같이 거짓이 되어버리는것)
그리고 or 을 넣어 이후에 id='admin' 이 되게 만들면 되는것.
하지만 url에 'admin' 을 넣으면 작은따옴표를 필터링하게 되어 공격에 성공하지 못한다.
그렇다고 그냥 admin만 입력시 문자열인것을 읽어들이지 못한다..
이런 경우 문자열을 16진수(hex)로 나타내게 되면 16진수로 변환된 admin의 값을 문자열로 읽어간다.

(문자열을 16진수로 바꿔주는 사이트 https://www.percederberg.net/tools/text_converter.html)
php 에서는 Hex의 형태를 인식시키기위해 앞에 0x 를 붙여줘야한다.

no=3123123 or id=0x61646d696e
입력시 문제 해결.