<<<Challenge 7>>>
7번문제를 들어가면
이런 창이 뜬다.
뭘 어쩌라는걸까… 일단 최대한 힌트를 얻어보면 auth 버튼을 눌러서 뭔가를 해야할것 같고
주소창을 보면 val변수에 1이라는 값이 들어가있다는 것을 알 수 있다.
일단 이 상태로 auth 버튼을 눌러보면
이렇게 Access_Denied!가 뜬다.
음...또 다른 힌트가 없을까?
F12를 눌러서 소스코드를 보자
phps!! php의 소스코드를 볼 수가 있다!
뿐만 아니라 admin mode는 val 변수에 2가 들어가야 한다는 힌트도 주어졌다.
phps를 통해 소스코드를 보자.
굉장히 길기 때문에 잘라서 설명하겠다.
answer변수는 현재 모르는 상태인데 답을 구할때도 필요없다.. 저 변수는 어디에 쓰는 것일까?
우리가 필요로 하는 것은 val 변수이다.
우리가 URL에 적어준 val 변수의 값을 받아서 go 변수에 넣어준다.
그리고 만약 go 변수에 아무것도 들어있지 않다면 val의 값을 1로 해서 url을 새로고침한다.
go 변수가 비어있지 않다면 ck 변수에 넣어준다.
그리고 해당 ck 변수의 값이 * 나 /일 경우에는 없애준다는 것을 알 수 있다.
고로 /*를 통한 주석처리를 막았다는 것을 알 수 있다.
/* 주석을 다 막은 뒤 기본 베이스 HTML 코드를 적어준다.
그리고 나서 ck의 변수의 값을 확인하는데 여러 것들을 막아주고 해당 값이 있으면
Access Denied! 문자열을 띄우며 종료시킨다.
빈칸이 있으면 cannot use spcae 문자열을 띄우며 종료시키고
만약 필터를 모두 피했다면
rand 함수를 통해 랜덤 값을 뽑은 뒤
랜덤 값에 따라 빈칸의 수들이 달라진다.
여기서 어차피 랜덤으로 돌아가기 때문에 새로고침 하다보면 결국 어떤 것 하나는 오게 되므로 답을 적을 때도 하나만 생각해서 풀면 된다.
우리가 적은 값을쿼리문으로 만든 result 변수를 통한 DB의 결과를 data 변수에 넣고 data 변수의 값이 query error이거나 1또는 2가 아닐경우 종료시킨다.
만약 1 또는 2일 경우
1이면 2를 출력하라고 나타내주고
2일 경우에는 Congratulation 문자열을 띄우는 auth 버튼을 생성한다.
따라서 우리는 val에 2를 넣어주면 되는 것이다.
phps의 처음에 보면 DB에는 2가 없다며 union을 사용하라고 되어있다.
필터링을 보아도 union이 없다는 것을 알 수 있다.
따라서 union을 통해 풀어보겠다.
val=-1을 통해 false를 만들어주고 union으로 두번째 쿼리문을 연결시켜준 뒤
select 2를 만들어주면 끝이다!
즉
-1) union select (2
이것이 우리가 적어야하는 최종 문장이다.
여기서 -1 뒤에 )를 해주고 2 앞에 (를 해준 이유는
rand 함수의 결과가 1일 경우를 생각한 것인데 go변수의 앞 뒤가 ()로 막혀있기 때문이다.
하지만 위에 적어준 대로 적어주면 당연히 풀리지 않는다.
필터링에 여러가지가 걸리기 때문이다.
빈칸
빈칸은 %0a나 %0d 등등을 사용하면 피할 수 있다.
숫자 2
사칙 연산을 통해 피할 수 있다.
사칙연산 중에서도 +와 *는 막혀있으므로 -를 통해 해결하였다.
따라서 최종 쿼리문은
-1)%0aunion%0aselect%0a(3-1
이렇게 적어주면 해결된다!!
'Solve Problem' 카테고리의 다른 글
[webhacking.kr] 23번 문제 (0) | 2015.07.06 |
---|---|
[webhacking.kr] 20번 문제 (0) | 2015.07.06 |
[webhacking.kr] 49번 문제 (0) | 2015.06.29 |
[webhacking.kr] 27번 문제 (0) | 2015.06.29 |
[webhacking.kr] 21번 문제 (0) | 2015.06.29 |