본문 바로가기
  • Show the world what you can do

포너블11

[Dreamhack] basic_rop_x64 풀이 교훈: 더미있는지 찾을때, 어셈블리 코드에서 sub esp, ~ 이것만 보고 더미의 존재와 위치를 확신하지 마라read(0,buf,~) 할때 버퍼주소 나와있을거아니야 거기서 버퍼가 sfp로부터 얼마나 떨어져있는지 확실하게 체크해라 문제의 c코드:#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30);}int main(int argc, char *a.. 2022. 7. 12.
[Dreamhack] ROP 풀이 교훈: '/bin/sh' 를 rdi로 설정해야할때, 다른 함수의 got+8에 쓸수도 있음, read함수를 호출할때 가젯 두개로 파일디스크럽터와 버퍼의 주소도 설정할 수 있음 문제의 c 코드:#include #include int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Leak canary puts("[1] Leak Canary"); printf("Buf: "); read(0, buf, 0x100); printf("Buf: %s\n", buf); // Do ROP puts("[2] Input ROP payload"); printf("Buf: "); read(0, buf.. 2022. 7. 12.
[Dreamhack] Return to Library 풀이 교훈: payload에 보낼 때는 바이트 수 꼭 신경써서 보내야된다(엥간하면 패킹하렴), recvline()[:-1] 대신 recvn을 더 적극 이용해라...recvline()[:-1]는 너 생각보다 바이트가 훨씬 더 많이 나올 위험이 있기때문, 익스플로잉 시 got EOF로만 계속 끝나면 nop gadget 이용할 생각도 하기 먼저  rtl.c의 코드는// Name: rtl.c// Compile: gcc -o rtl rtl.c -fno-PIE -no-pie#include #include const char* binsh = "/bin/sh";int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0);.. 2022. 7. 9.
[Dreamhack] ssp_001 풀이 교훈) main의 sfp는 0인것같다(아마..), 더미는 어디에나 있을수 있다. gdb로 잘 까보자 일단 이 문제의 씨언어 코드는#include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30);}void get_shell() { system("/bin/sh");}void print_box(unsigned char *box, int idx) { p.. 2022. 7. 8.