본문 바로가기

Webhacking/Webhacking.kr

[Webhacking.kr] Old-27 풀이

https://webhacking.kr/old.php

 

Webhacking.kr

 

webhacking.kr

 


그림 1

문제를 보면 위의 사진과 같이 sql injection 문제인 것을 알 수 있다.

 

일단 아무 숫자나 입력했더니 쿼리 에러가 뜬다.

 

그림 2

코드를 확인해보았다.

 

그림 3

아래쪽의 결과를 확인해보니

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에 직접 넣어주면

 

그림 4

문제가 해결된다.

'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