return-to-csu
-
[DiceCTF 2021] babyropCTF/WRITEUP 2021. 2. 6. 12:59
Disassembly 디스어셈블리 undefined8 main(void) { char *s; write(1, "Your name: ", 0xb); gets(&s); return 0; } gets로 인해 스택 버퍼 오버플로우가 발생한다. Return-to-csu RTC를 이용해 gets와 write의 라이브러리 주소를 구하자. 알아낸 주소를 바탕으로 라이브러리 버전을 알아낸 후, system과 binsh 문자열의 주소를 구해 system("/bin/sh")를 호출하면 문제를 해결할 수 있다. Code 더보기 from pwn import * binary = "./babyrop" lib = "./libc6_2.31-0ubuntu9.2_amd64.so" server = "dicec.tf" port = 31924..
-
Unexploitable #3CTF/HackCTF 2021. 2. 5. 16:10
Disassembly 디스어셈블리 undefined8 main(void) { char *s; setvbuf(_reloc.stdout, 0, 2, 0); setvbuf(_reloc.stdin, 0, 2, 0); fwrite("Impossible RTL ha? Nothing for you!\n", 1, 0x24, _reloc.stdout); fgets(&s, 0x100, _reloc.stdin); return 0; } system 가젯이 사라지고 fgets로 입력받는 버퍼 크기가 0x100바이트로 증가한 것 외에는 Unexploitable #2와 차이가 없다. Return-to-csu syscall과 system 가젯이 보이지 않으므로 공격을 위해서는 라이브러리 주소에 대한 정보가 필수적이고, 각종 데이터를..
-
RTCCTF/HackCTF 2021. 2. 5. 01:20
Disassembly 디스어셈블리 void main(void) { void *buf; setvbuf(_reloc.stdin, 0, 2, 0); write(1, "Hey, ROP! What\'s Up?\n", 0x15); read(0, &buf, 0x200); return; } main은 read에서 0x200바이트만큼 입력받아 스택 버퍼 오버플로우가 발생한다. Return-to-csu NX가 걸려있고, system 함수가 링크되어 있지 않으며, syscall 명령어도 존재하지 않는다. 결국 RTL을 통해 system("/bin/sh")를 호출해야 하므로 라이브러리 주소를 알아낼 방법이 필요하다. write와 read 함수의 세 번째 인자로 사용될 rdx를 제어할 가젯으로 __libc_csu_init 함수..