이번 문제는 SQL Injection문제네요!! 제가 제일 어려워하는 SQL Injection...호덜덜!
우선 index.phps를 들여다봅시다!
여러 문자들을 필터링하고 no hack이라고 출력하고있네요. 그렇다면 저 문자들은 패스!
쿼리의 결과가 guest면 hi guest를 출력하고, admin이라면 해결이 되는것 같네요
그럼 관건은 쿼리의 결과를 admin으로 만들어 줘야하는것!
1을 넣어보았습니다. 결과로 hi guest가 나오네요
select id from challenge18_table where id='guest' and no=1 쿼리가 날라갔겠네요
계정이 guest와 admin두 개만 있다면 테이블이 아래와 같을 거라고 예상할 수 있습니다.
guest |
1 |
admin |
2 |
admin | 0 |
guest | 1 |
이걸 가지고 쿼리문을 만들어봅니다.
select id from challenge18_table where id='guest' and no=123 or no=? 는 어떨까요?
앞의 연산을 False로 만들고 뒤의 연산을 True로 만들어 버리는 겁니다!
admin의 no가 무엇인지 모르니 둘 다 해봅시다!
select id from challenge18_table where id='guest' and no=123 or no=0
select id from challenge18_table where id='guest' and no=123 or no=2
공백은 위의 소스코드에서와 같이 필터링 하기 때문에 %0a를 사용해줍니다
요롷게! no은 2였네요!
해결 완료^~^