문제를 보면 위의 사진과 같이 sql injection 문제인 것을 알 수 있다.
일단 아무 숫자나 입력했더니 쿼리 에러가 뜬다.
코드를 확인해보았다.
아래쪽의 결과를 확인해보니
id가 guest일 때는 guest를 출력하고, id가 admin일 때 27번 문제가 해결된다고 한다. 그리고 admin의 넘버가 2인 것도 알려주었다.
이제 sql 문을 확인해보았다.
Id=guest and no={입력값} or die(“guery error”)
라고 되어있다.
일단 수정해야 할 부분을 확인해보겠다.
1. id가 guest로 정해져 있으므로 해당 부분이 false가 되게 해야 함
2. no값으로 2을 주어야 함
3. 뒤의 die 부분은 주석처리를 해야 함
그리고 위의 preg_match부분을 확인해보니 입력 값에 #, select, (, 공백, limit, =, 0x가 있으면 no hack을 출력한다고 한다.
이제 sql 구문을 작성해보면
=을 사용하지 못하므로 like를 대신 사용하고, 공백은 tab인 %09로 대체해야 한다.
그리고 주석처리인 # 대신 --을 사용해야 한다
즉, no=0) or no like 2 --을 이용하고, 공백까지 %09로 바꾸면
No=0)%09or%09no%09like%092%09--%09가 되어야 한다.
(찾아보니 sql문에서 닫는 괄호가 아직 살아있으므로 널 바이트 인젝션으로 널값을 넣어주어야 한다고 한다. 그래서 2 뒤에 %09를 넣었고, 주석처리도 --뒤에 공백이 없으면 주석처리가 되지 않기 때문에 넣어주어야 한다고 한다.)
이제 해당 부분을 url에 직접 넣어주면
문제가 해결된다.
'Webhacking > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Old-58 풀이 (0) | 2021.09.10 |
---|---|
[Webhacking.kr] Old-32 풀이 (0) | 2021.09.09 |
[Webhacking.kr] Old-25 풀이 (0) | 2021.09.09 |
[Webhacking.kr] Old-54 풀이 (0) | 2021.09.09 |
[Webhacking.kr] Old-39 풀이 (0) | 2021.09.09 |