<script>alert(1);</script> 를 입력할 수 있다면 성공입니다.




숫자를 입력할 때는 그대로 뿌려주는데 문자를 2개 이상 입력하면 no hack이라면서 필터링 됩니다.

무슨 문자던 2개 이상 입력할 수 없다면 시도 자체가 불가능합니다.



하지만 생각해 볼 수 있는 내용은 단순히 문자열에 대해서 ereg, eregi 함수는 특정 시스템에서 우회가 가능합니다.

%00 즉 NULL을 이용해서 문자열의 끝을 알려주는 것입니다.


문자열을 입력할 때 맨 마지막에 NULL 값이 자동으로 입력되어 문자열의 끝을 알려주는 역할을 합니다.

그렇다면 맨 처음에 %00을 입력해 문자열의 끝이라고 알려주게 된다면 ereg, eregi와 같은 함수들을 우회할 수 있습니다.


하지만 그냥 %00<script>alert(1);</script>를 입력하게 되면 잘 적용되지 않습니다.

burp suite를 통해서 중간에 값을 잡아보면 %의 값이 넘어갈 때 %25로 넘어가는 것을 알 수 있습니다.

이 값을 다시 %00으로 조정하면 성공하게 됩니다.


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

[webhacking.kr] prob 25  (0) 2018.12.13
[webhacking.kr] prob 24  (0) 2018.12.13
[webhacking.kr] prob 18  (0) 2018.12.13
[webhacking.kr] prob 58  (0) 2018.12.07
[webhacking.kr] prob 51  (0) 2018.12.07



'admin'으로 나오도록 해야 하는데 id가 'guest'로 고정되어 있습니다.



1을 입력해보면 "hi guest"라는 말이 나오고, 1을 제외한 모든 것들은 아무것도 나오지 않습니다.

유추를 해보면 1이 guest면 0이나 2가 admin이라고 생각할 수 있습니다.



그래서 생각한 방법이 order by입니다.

order by는 정렬해주는 옵션으로 결국 해당 테이블의 순서를 admin이 먼저 나오게 만들면 성공하게 될 것입니다.


그렇게 하기에 우선 무조건 참을 만들기 위해 0 or 1=1 을 했습니다.

공백을 필터링 했기 때문에 %0a(개행)을 공백 부분의 넣어주고 입력하면, "hi guest"라는 문구가 나오게 됩니다.


그럼 이제 order by를 사용해 봅시다.

admin의 no값이 2라고 추정하고 0 or 1=1 order by no desc를 입력하면 성공을 하게 됩니다.

(0%0aor%0a1=1%0aorder%0aby%0ano%0adesc)


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

[webhacking.kr] prob 24  (0) 2018.12.13
[webhacking.kr] prob 23  (0) 2018.12.13
[webhacking.kr] prob 58  (0) 2018.12.07
[webhacking.kr] prob 51  (0) 2018.12.07
[webhacking.kr] prob 54  (0) 2018.12.07

.swf 파일인 flash 파일만 <embed>태그로 불러오게 됩니다.

해당 파일에서 어떤 값을 입력해도 Wrong이라는 메시지만 띄워줍니다.


kk.js와 kk2.js도 확인해봤지만 해당 스크립트는 단순히 flash를 불러오기 위한 과정일 뿐이었습니다.



그래서 혹시 몰라 해당 파일을 다운로드 받아 메모장으로 열어보니 

아래 부분에 URL이 나와있었고 해당 URL에 접속하니 성공하게 되었습니다.



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

[webhacking.kr] prob 23  (0) 2018.12.13
[webhacking.kr] prob 18  (0) 2018.12.13
[webhacking.kr] prob 51  (0) 2018.12.07
[webhacking.kr] prob 54  (0) 2018.12.07
[webhacking.kr] prob 47  (0) 2018.12.07



보통 md5('value')로 hash값을 만들면 32자리 hex값으로 나오게 됩니다.

하지만 md5('value', true)로 hash값을 만들면 16자리 바이너리 형태로 나오게 됩니다.

바이너리 형태로 나오게 되면서 취약점이 발생합니다.


password='aaa'='bbb' 라는 식은 password='aaa' 부분이 false, bool 연산의 문자열은 false이기에 'bbb'도 false가 나와 

true로 query가 작동하게 됩니다.


그렇다면 md5를 한 바이너리 값 중에서 '=' 라는 문자열이 나오게 되면 false + false = true 로 된다는 것입니다.



python3 코드를 이용해 해당 값들을 구할 수 있습니다.

나오는 값중 [ '=' ] 이 값 전후로 다른 값들이 있어야 하고, 어떤 값들은 성공하지 않을 수 있습니다.

1
2
3
4
5
6
7
8
9
10
import hashlib
 
for password in range(1,99999999):
     password = str(password).encode('utf-8')
     md5_hash = hashlib.md5(password).digest()
     if "'='" in str(md5_hash):
          print(str(md5_hash))
          print(password)
          print('──────────────────────────')
 
cs







[참고]


md5 raw hash를 이용한 sql injection: bbolmin.tistory.com/77


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

[webhacking.kr] prob 18  (0) 2018.12.13
[webhacking.kr] prob 58  (0) 2018.12.07
[webhacking.kr] prob 54  (0) 2018.12.07
[webhacking.kr] prob 47  (0) 2018.12.07
[webhacking.kr] prob 42  (0) 2018.12.06

javascript로 Password를 한개씩 출력해줍니다.

해당 값들을 모두 모아서 인증하면 성공하게 되는데 확실하게 얻기 위해서 javascript를 사용해 봤습니다.



소스를 확인해보면 answer() 함수를 통해서 i의 값이 하나씩 증가하면서 GET요청을 하게 됩니다.

이때 setTimeout() 함수로 일정 시간에 한번씩 요청하게 되는데 이점을 이용하면 됩니다.



우선 password가 저장될 수 있는 변수를 선언하고, aview.innerHTML 대신에 해당 변수를 입력합니다.

innerHTML을 통해서 화면에 띄워줬던 것입니다.

그리고 setTimeout에 시간을 1로 바꿔서 빠르게 요청하도록 수정하면 됩니다.


잠시 기다리고 password 변수의 담긴 내용을 확인해보면 값을 얻을 수 있고, ?를 제외한 값을 입력하면 됩니다.


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

[webhacking.kr] prob 58  (0) 2018.12.07
[webhacking.kr] prob 51  (0) 2018.12.07
[webhacking.kr] prob 47  (0) 2018.12.07
[webhacking.kr] prob 42  (0) 2018.12.06
[webhacking.kr] prob 38  (0) 2018.12.06



Mail Header Injection은 mail을 보낼 때 $header부분에 참조할 수 있는 옵션이 있습니다.

메일을 보낼 때 참조해서 보내면 해당 메일은 수신자에게 가는 동시에 참조인에게도 함께 보내지게 됩니다.

해당 문제는 $header에 참조 옵션을 통해서 문제를 해결 할 수 있습니다.



PHP Mail header 옵션에는 반드시 Form이 있어야 하고, 추가적으로 CC라는 옵션이 존재합니다.

CC란 참조 옵션으로 Form으로 설정된 수신자 이외의 보낼 사람을 지정할 수 있습니다.

이때 Form과 CC사이에는 개행 문자. 즉, \r\n이 필요합니다.


그렇게 만들어지는 값은 test@test.com\r\n[자신의 메일주소] 입니다.

이때 \r\n은 인코딩 된 값인 %0d%0a를 사용해야 올바르게 전송됩니다.


하지만 해당 값을 입력하면 문제가 해결되지 않습니다.

Burp suite로 확인해보니 '%'가 인코딩되어 %25로 변경되어 있습니다.



그래서 해당 값을 직접 수정해서 전송하게 되면 올바른 password를 보여주게 됩니다.





[참고]


PHP Mail: http://php.net/manual/kr/function.mail.php

[PHP] HTTP Header 인젝션: http://blog.habonyphp.com/entry/php-HTTP-%ED%97%A4%EB%8D%94-%EC%9D%B8%EC%A0%9D%EC%85%98

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

[webhacking.kr] prob 51  (0) 2018.12.07
[webhacking.kr] prob 54  (0) 2018.12.07
[webhacking.kr] prob 42  (0) 2018.12.06
[webhacking.kr] prob 38  (0) 2018.12.06
[webhacking.kr] prob 34  (0) 2018.12.06



test.txt를 다운로드하려고 하면 되지만,

test.zip파일을 다운로드하려고 하면 접근 거부라는 메시지가 나오게 됩니다.



소스를 확인해보면 test.zip은 javascript:alert()로 메시지만 띄우고 있습니다.

test.txt는 다운로드 URL로 이동을 하게 되는데 자세히 보면 base64로 인코딩 되어 있는 것을 확인할 수 있습니다.

test.zip을 base64로 인코딩하여 다운로드 URL로 이동하면 다운로드를 받을 수 있습니다.



해당 zip파일을 열어보면 암호가 있는데 주석에 보이듯이 숫자로만 되어 있다고 합니다.

숫자로만 되어있을 때 알집의 7버전의 암호찾기라는 기능을 이용해서 해결할 수 있습니다.





암호를 얻어 파일을 열어보면 password를 알려주는 URL이 나타나게 됩니다.


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

[webhacking.kr] prob 54  (0) 2018.12.07
[webhacking.kr] prob 47  (0) 2018.12.07
[webhacking.kr] prob 38  (0) 2018.12.06
[webhacking.kr] prob 34  (0) 2018.12.06
[webhacking.kr] prob 33  (0) 2018.12.06



특정 값을 입력하고 Admin버튼을 누르면 자신의 IP와 입력한 값이 나오게 됩니다.



소스를 보면 hint로 'admin'이라고 알려줍니다.

admin을 입력해보면 다음과 같은 문구가 나오게 됩니다.



LOG Injection이란 로그를 조작해서 속이는 것입니다.

그렇다면 실제로는 admin으로 접속하지 않았지만 접속한 척을 하기 위해서 LOG에 입력되는 내용의 형식처럼 입력하면 됩니다.

IP:[문자열] 이런 식으로 저장되고 있으니 해당 형식으로 보내면 됩니다.



해당 값을 입력하고 Admin 버튼을 누르면 해결이 됩니다.


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

[webhacking.kr] prob 47  (0) 2018.12.07
[webhacking.kr] prob 42  (0) 2018.12.06
[webhacking.kr] prob 34  (0) 2018.12.06
[webhacking.kr] prob 33  (0) 2018.12.06
[webhacking.kr] prob 32  (0) 2018.12.05

시작과 함께 Wrong 메시지가 나오고 빈 화면이 보입니다.



소스를 확인해보면 <script>가 총 3개가 있는데 앞 2개는 상당한 양의 코드를 가지고 있습니다.



마지막 3번째를 확인해보면 URL의 0lDz0mBi2가 있는지 확인하고 있으면 Passw0RRdd.pww로 이동하게 됩니다.



실제도 이동해보니 password를 주는군요...

이렇게 해결하는게 맞는지?


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

[webhacking.kr] prob 42  (0) 2018.12.06
[webhacking.kr] prob 38  (0) 2018.12.06
[webhacking.kr] prob 33  (0) 2018.12.06
[webhacking.kr] prob 32  (0) 2018.12.05
[webhacking.kr] prob 27  (0) 2018.12.05

33번은 문제가 10개나 됩니다..



1번




소스를 확인하시면 GET으로 "hehe" 값이 전송되면 <a>태그가 활성화 됩니다.

URL 뒷 부분에 ?get=hehe 를 전송하면 해결!



2번



이번에는 POST로 "hehe"와 "hehe2"의 값을 보내면 됩니다.



간단하게 개발자 모드에서 form태그를 통해서 해당 값을 보낼 수 있습니다.




3번


$_SERVER[REMOTE_ADDR]에는 현재 자신의 IP주소가 기록되어 있습니다. (외부로 나가는 IP)

GET의 "myip"라는 이름으로 전송하면 성공하게 됩니다.

(IP주소는 webhacking.kr 사이트에서도 확인 가능)



4번



현재 시간을 md5()로 암호화하여 전송을 하면 됩니다.

hint로 현재 시간을 알려주어서 해당 값을 제시간에 맞게 전송하면 해결됩니다. (타이밍..중요)



하지만 타이밍 맞추기 쉽지 않기 때문에 python을 이용해서 문제를 해결했습니다.

시간을 +1한 이유는 서버에 시간과 제 PC의 시간에 차이가 있기 때문입니다.


해당 URL로 바로 이동을 하지는 못하나 res.text로 소스를 가져오기 때문에 URL을 알아낼 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
import time
import hashlib
 
url="http://webhacking.kr/challenge/bonus/bonus-6/l4.php?password="
cookies= {'PHPSESSID':'YourSesseionValue'}
 
time_ = str(round(time.time()+1)).encode('utf-8')
time_md5 = hashlib.md5(time_).hexdigest()
payload = url+time_md5
 
res = requests.get(payload, url, cookies=cookies)
print(res.text)
cs




5번


GET/POST/COOKIE를 모두 필요로 합니다.

cookie값은 개발자 도구에서 "imcookie"값을 생성해주면 됩니다.


GET과 POST동시에 보내려면 form태그를 post방식으로 설정하고 action 옵션에 GET요청을 하듯이 작성해 주면 됩니다.



6번




쿠키 값에 자신의 IP를 md5한 값을 넣고 POST로 Agent값을 md5하여 전송하면 됩니다.



친절하게 HINT로 AGENT 값을 알려줬습니다^^




7번


IP의 주소에 '.'을 없애고 GET으로 IP=IP를 요구합니다.

EX) 10.10.10.10

?10.10.10.10=10101010



8번


단순히 GET으로 ?addr=127.0.0.1 만해주면 성공하게 됩니다.



9번


chr()함수는 ascii code값을 문자로 바꿔주는 함수입니다.

97~122는 a~z의 값의 ascii code 값이므로 ace...이런 식으로 홀수 자리의 알파벳만 ans에 보내주면 됩니다.



10번


자신의 ip를 가지고 for문을 돌면서 i값을 ord($i)한 값으로 바꿔줍니다.

ord()는 문자의 ASCII CODE값을 나타냅니다.


여기서 하나의 의문이 생길 수 있습니다.

만약 $ip='10.10.10.10'이면 strlen($ip)의 값은 11입니다.

그렇다면 for문을 총 12번 수행할 것이라고 생각할 수 있는데 for문 안을 잘 보면 $ip값이 수정되는 것을 볼 수 있습니다.

$ip의 값이 수정됨에 따라서 strlen($ip)의 값도 변경되기 때문에 for문은 11번만 수행하지 않고 그때그때 길이를 재서 확인하게 됩니다.

이점을 주의해서 문제를 푸셔야 합니다.


물론 php online compiler를 통해서 간단하게 추출해 낼 수 있습니다.

$ip값과 $answer값을 얻었으면 URL을 통해 해당 문서에 접근할 수 있습니다.



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

[webhacking.kr] prob 38  (0) 2018.12.06
[webhacking.kr] prob 34  (0) 2018.12.06
[webhacking.kr] prob 32  (0) 2018.12.05
[webhacking.kr] prob 27  (0) 2018.12.05
[webhacking.kr] prob 26  (0) 2018.12.05

+ Recent posts