webhacking.kr 7번 문제 (old)

2019. 10. 16. 19:38Wargame/webhacking.kr

7번문제에 들어가면 다음과같은 화면을 볼 수 있다.

바로 auth 를 눌러서 인증을 해보자.

역시 바로 인증 권한을 주진 않는것 같다.

그럼 소스를 확인해보자.

소스를 확인해보면 GET방식으로 받은 값을 go 변수에 저장하고 필터링을 거친 후에 아래 5개의 조건문으로 거쳐가는것 같다.

마지막 elseif 부분을 보자면 data 의 값이 2이면 solve함수가 실행된다.

이 것을 보면 go 의 값에 2라는 값을 넣어주어서 lv를 2로만들어주면 풀릴 것 같다.

하지만 그전에 preg_match() 함수를 통해서 사칙연산과 2 , = 등을 필터링해주어서 2를 직접적으로 입력하거나 또는 

1+1 , 3-1 등과같은 결과값으로 2를 만들어 주지 못한다.

하지만 절대 2를 만들수 없는건 아니다.

char() 함수나 2진수 등을 이용해서 2를 만들어 주는 방법이 있다.

https://ostermiller.org/calc/ascii.html

 

ASCII Chart

 

ostermiller.org

위의 사이트에 들어가면 다양한 표 목록이 있는데 거기서 2인 부분을 찾아보면 

2진수 :0b110010

아스키코드값 :50

16진수 : 0x32

등이 있다.

하지만 2가 들어간 문자는 필터링에서 막혀버리니 

2진수나 아스키코드값을 이용해서 대입해보자.

위와같이 2진수를 이용해서 입력했지만 query error 라는 문구와 함께 에러가 발생한다.

괄호를 필터링하지 않았으니 

union 과 select 를 이용해서 다시 작성해보자.

?val=0)union(select(char(50))

이라는값을 입력해 주었다.

하지만 바로 풀리지 않고 nice try 라는 값이 나온다.

그 이유는 

저 코드는 첫번째 조건문을 대상으로 만든 injection 명령어 인데 검사하기전 rand 함수를통해 무작위로 

1~5까지의 숫자를 대입해서 그 부분의 조건을 실행한다.

그렇기때문에 틀린답이 아니라 대략 20%의 확률로 5번정도 새로고침하면 확률상 조건문이 실행될것 같다.

'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 53번 문제(old)  (3) 2019.10.18
webhacking.kr 25번 문제 (old)  (0) 2019.10.16
webhacking.kr 27번 문제(old)  (0) 2019.10.15
webhacking.kr 26번 문제(old)  (0) 2019.10.15
webhacking.kr 24번 문제(old)  (0) 2019.10.15