7번 문제는 어렵다고 생각하지 말자 할 수 있다.
auth를 누르는 순간 바로 access denied가 뜬다.
admin으로 들어가고 싶다면 val=2를 입력해야되는 것 같고
index.phps에 친절히 소스코드가 있단다...ㄱㄱ
union을 쓰라고 되어있다.
일단 한 줄 한줄 씩 해석해 보자.
1. get 방식으로 받은 val가 go 변수에 저장된다.
2. go 가 비어있다면 val=1로 초기화한다.
3. go를 ck변수에 저장한다.
4. ck에 *이나 / 가 있으면 필터링 한다.
5. 주석인 -- 나 숫자 2, substring과 공백 등등을 제외한다.
6. 1~5중 하나를 골라 rand 변수에 저장한다.
7. rand가 1~5에 따라서 괄호의 갯수가 다르다. (injection 할 때 괄호의 갯수를 다르게 하면 된다)
8. mysql 구문을 result에 저장하고 이를 data 배열에 저장한다.
9. data[0]이 2가 되면 문제가 풀린다.
매우 친절하게 작성되어 있었다.
그러니까 우리는 val 에다가 인젝션을 할 payload를 생각해보자.
1,2가 막혀있으니까 일단 0으로 막고
val = 0) union select (2
라고 작성하면 될 거 같다.
근데 공백이랑 2가 막혀있으니까 %0a 랑 3-1로 바꾸자
?val=0)%0aunion%0aselect%0a(3-1
하니까 안된다.
새로고침 많이 해서 rand값이 1이 되도록 하고 (괄호때문에...) 하면 된다.
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
| webhacking.kr 57번 (0) | 2017.02.20 |
|---|---|
| webhacking.kr 6번 (1) | 2016.08.02 |
| webhacking.kr 5번 (0) | 2016.08.02 |
| webhacking.kr 4번 (0) | 2016.07.31 |
| webhacking.kr 3번 (0) | 2016.07.31 |