ftz

level11

oogu ㅣ 2022. 9. 11. 18:33

[그림 1-1]

setuid 함수는 있지만 /bin/sh 실행시키는 코드는 없다. 따라서 /bin/sh -> shellcode를 넣어야 겠다. 

[그림 1-2]
[그림 1-3]

[그림 1-2] 참조하면 [그림 1-3] 그릴 수 있다. 코드에서 strcpy 함수를 사용하므로 bof 할 떄 제한이 없다.

따라서 payload 는 256 + 8 + 4 + shellcode 위치 + shellcode 해보자

우선 shellcode 위치를 찾자

[그림 1-4]

level11 문제는 프로그램 실행시 인자값(argv[1])이 필요하므로 인자값은 [그림 1-4] 처럼 하면된다. 

[그림 1-5]

0x43434343 위치가 shellcode 삽입되는 곳이다. 따라서 shellcode 위치는 0xbfffdab0 이다.

shellcode는 구글링해서 가져오자

완성된 payload는 "A"*268 + 0xbfffdab0 + "\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80" 이다.

[그림 1-6]

실패했다..

[그림 1-6] payload를 gdb 에서 확인해보자

[그림 1-7]

payload 값은 제대로 들어가는데 shellcode 위치가 바껴있다. 따라서 ASLR 걸려있는거 같다...

shellcode 위치 직접 넣을 수 없으므로 RTL 방법으로 해보자

[그림 2-1]
[그림 2-2]

/bin/sh 문자열은 위 소스코드를 컴파일 후 실행시키면 출력된다.

변수 shell 위치에는 system 함수 주소값이 와야한다.

[그림 2-3]

따라서 payload 는  "A"*268 + 0x4203f2c0 + dummy[4] + 0x42127ea4 이다.

[그림 2-4]

성공!

 

'ftz' 카테고리의 다른 글

level15  (0) 2022.09.12
level14  (0) 2022.09.12
level13  (0) 2022.09.12
level12  (0) 2022.09.11
level9  (0) 2022.09.11