get 방식으로 id와 pw를 입력받고 있다. 정규표현식 필터링으론
"prob", "_", ".", "(", ")"
을 id와 pw 동일하게 필터링 중이다.
select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'
👆 위와 같은 쿼리문이 참이 될경우 문제는 해결되기 때문에 위 조건식을 참으로 만들면 된다.
a' or 1=1 #
👆 위 문자열을 id에게 넘겨주어 조건식을 항상 참으로 만든 후 뒷 부분을 주석처리 하였지만 풀리지 않았다.
주석을 #말고 --%09를 이용하여 해봤다. (--이후에는 공백이 나와야 주석처리가 된다.)
클리어!
#이 안풀린 이유는 URL Encoding을 안해주었기 때문
위 사진은 URL Encoding을 하지 않은채 #을 그대로 넣었을 때이다. #이 패킷에서 사라진걸 볼 수 있다.
위 사진은 #을 %23으로 인코딩하여 넣었을 때이며, 패킷에 제대로 들어간 걸 볼수 있다.
이유로는 #은 URL에서 고유의 역할이 있기 때문에 # 자체로 써줄 경우 그 역할을 수행하게 되는 것이다. #은 URL에서 주석과 같은 역할을하며 실제 내용과는 관련이 없게 된다.
#은 URL에서 앵커로 요청을 보내는 리소스의 특정 부분을 가리키는 역할을한다. 따라서 #의 뒷 부분은 요청과 함께 서버로 전송되지 않는다.
'Web Hacking > Lord of SQLInjection' 카테고리의 다른 글
[Lord of SQLInjection] 6번 darkelf write up (0) | 2024.03.14 |
---|---|
[Lord of SQLInjection] 5번 wolfman write up (0) | 2024.03.08 |
[Lord of SQLInjection] 4번 orc write up (6) | 2024.03.08 |
[Lord of SQLInjection] 3번 goblin write up (0) | 2024.03.06 |
[Lord of SQLInjection] 2번 cobolt write up (0) | 2024.03.06 |