보통 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

+ Recent posts