-
Level17 (zombie_assassin -> succubus)$ 시스템 해킹 $/Los Of BufferOverflow 2020. 1. 1. 14:43
소스코드가 좀 많이 길어졌습니다.
DO -> GYE -> GUL -> YUT ->MO 순으로 함수를 호출해서 system(cmd) 를 이용하는 문제입니다.
argv[1]에는 libc를 사용할 수 없고, RET 에는 DO 함수의 주소가 들어가야 합니다.
일단 RET를 DO함수 주소로 맞춰주면 아래와 같이 페이로드를 작성하면 됩니다.
[Dummy 44 byte] + [DO 함수 주소 (프로그램 RET)] + [GYE 함수 주소 (DO 함수 RET)] + [GUL 함수 주소 (GYE 함수 RET)] + [YUT 함수 주소 (GUL 함수 RET)] + [MO 함수 주소 (YUT 함수 RET)] 의 형식으로 넣어야 할것 같습니다.
각 함수의 주소를 objdump를 이용해서 알아보겠습니다.
DO : 0x080487ec
GYE : 0x080487bc
GUL : 0x0804878c
YUT : 0x0804875c
MO : 0x08048724
위의 주소들을 전부 넣어보면 아래와 같이 출력을 해줍니다.
sh 라는 값에 이상한 값이 들어있습니다.
아마 MO 주소 뒤에 들어있는 임의의 값이 command로 들어가게 된것으로 보입니다.
command는 ebp+8에서 값을 가져옵니다.
ebp+8에서 받아오지만 라이브러리를 가져올수없기 때문에 ebp+12에 "/bin/sh"를 넣고 가져오면 될것 같습니다.
[Dummy 4 byte] + [EBP+12의 주소] + ["/bin/sh"] 로 넣으면 됩니다.
B에다가 "/bin/sh" 주소를 넣으면 됩니다.
B자리에 0xbffffa68을 넣으면 될것 같습니다.
login : succubus
password : here to stay
'$ 시스템 해킹 $ > Los Of BufferOverflow' 카테고리의 다른 글
Level19 (nightmare -> xavius) (0) 2020.01.01 Level18 (succubus -> nightmare) (0) 2020.01.01 Level16 (assassin -> zombie_assassin) (0) 2020.01.01 Level15 (giant -> assassin) (0) 2020.01.01 Level14 (bugbear -> giant) (0) 2020.01.01