Beginner_heap
·
Wargame/HackCTF
보호되어 있는 글입니다.
Unexploitable#2
·
Wargame/HackCTF
Unexplotable#1 문제와 같이 ASLR 보호기법이 안걸려 있다. int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [rsp+0h] [rbp-10h] setvbuf(stdout, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); fwrite("Easy RTL ha? You even have system@plt!\n", 1uLL, 0x27uLL, stdout); fflush(stdin); fgets(&s, 64, stdin); return 0; } #1의 문제와 달리 fflush 함수가 빠졌다. 다른 방법으로 system 함수를 실행시켜보자. 똑같이 ROP 공격을 진행하되, 이번에는 ..
Unexploitable#1
·
Wargame/HackCTF
gdb-peda$ checksec CANARY : disabled FORTIFY : disabled NX : ENABLED PIE : disabled RELRO : Partial ASLR 보호기법도 안걸려 있는 문제다. 이 문제의 핵심은 '쉘을 따기 위한 system('/bin/sh') 에서 /bin/sh 이 아닌 다른 방법을 이용할 수 있는가' 이다. system('sh')을 실행해도 shell을 딸 수 있으므로 sh문자열이 있는 부분을 찾으면 아래와 같다. gdb-peda$ find 'sh' Searching for 'sh' in: None ranges Found 101 results, display max 101 items: Unexploitable_1 : 0x4003bf --> 0x6e696474..
World_best_encryption_tool
·
Wargame/HackCTF
gdb-peda$ checksec CANARY : ENABLED FORTIFY : disabled NX : ENABLED PIE : disabled RELRO : Partial Canary 보호기법이 걸려 있다. { unsigned int i; // [rsp+8h] [rbp-88h] char s1; // [rsp+Ch] [rbp-84h] char src[64]; // [rsp+10h] [rbp-80h] char dest; // [rsp+50h] [rbp-40h] unsigned __int64 v8; // [rsp+88h] [rbp-8h] v8 = __readfsqword(0x28u); setvbuf(_bss_start, 0LL, 2, 0LL); do { puts("Your text)"); __isoc99..
You_are_silver
·
Wargame/HackCTF
마지막 printf 함수의 쓰임이 잘못되었다. 이 부분을 이용하여 FSB 공격을 진행할 수 있다. 또한 play_game 함수에서 system("cat ./flag"); 함수를 발견할 수 있다. FSB 공격을 이용해 printf@got --> system 으로 overwrite 시킨다. ( 마땅한 함수가 printf라서 선택했다. ) 일단 FSB 공격을 하려면 offset을 찾아야 한다. $ ./you_are_silver Please enter your name AAAAAAAA %x %x %x %x %x %x %x x AAAAAAAA 1e4bda10 3354a8d0 1 1b77280 3376d4c0 41414141 20782520 x You are silver. Segmentation fault (cor..
RTC
·
Wargame/HackCTF
https://jiravvit.tistory.com/entry/RTC-Return-to-CSU 자료를 참고하여 익스플로잇을 진행했다. rtc 바이너리의 가젯을 찾아보니 pppr에 해당하는 가젯이 없다. 따라서 RTC 기법을 통해 해당 가젯을 이용할 수 있게끔 문제 풀이를 진행했다. 코드는 간단한다. read 함수에서 BOF -> ROP를 통해 system 함수를 실행시키면 된다. 다만 마땅한 gadget이 없어서 문제인데, libc_csu_init 부분에서 얻었다. 페이로드를 작성할 땐 csu_init -> csu_call 순으로 작성한다. 링크를 참조하면 무슨 값을 각각 넣어야하는 지 잘 나와 있다. 다만, 짚고갈 포인트는 다음과 같다. r13을 rdx로, r14를 rsi로, r15d를 edi로 옮긴다..
ROP
·
Wargame/HackCTF
read함수에서 BOF가 터진다. 바이너리 파일 안에 system, write, read 함수가 존재하므로 이 함수들을 이용해 ROP를 진행해보자. 코드를 짜기 전 알아둬야할 점을 짚어보자. // read Function ssize_t read (int fd, void *buf, size_t nbytes) // write Function ssize_t write (int fd, const void *buf, size_t n) 두 함수 모두 fd(디스크립터)를 이용한다. 파일 디스크립터(fd)설명 0표준 입력 1표준 출력 2표준 에러 출력 3open함수로 순차적으로 할당 fd값이 0이면 입력, 1이면 출력이다. 함수의 흐름을 ROP로 제어하는데 시나리오는 다음과 같다. 1. ASLR이 걸려있기 때문에 실제..
Gift
·
Wargame/HackCTF
gdb-peda$ checksec CANARY : disabled FORTIFY : disabled NX : ENABLED PIE : disabled RELRO : disabled main 함수의 gets 부분이 핵심이다. 이를 통해 BOF를 진행한다. $ ./gift Hey guyssssssssss here you are: 0x8049940 0xf7dbc3d0 $ ./gift Hey guyssssssssss here you are: 0x8049940 0xf7e183d0 바이너리를 실행시킬 때마다 system 값의 주소가 변한다. ASLR이 걸려있는 것을 확인. ( binsh 부분의 주소는 bss영역의 시작 주소이다. bss 영역이므로 주소 변화가 없음 ) system 주소를 Leak해서 익스플로잇을 진..
Look at me
·
Wargame/HackCTF
gdb-peda$ checksec CANARY : disabled FORTIFY : disabled NX : ENABLED PIE : disabled RELRO : Partial NX bit가 걸려있고 쉘 딸 수 있는 함수가 없다. 기존에 풀던 방식인 execve 함수나 system함수를 이용하는 게 아닌 mprotect 함수를 이용한다. mprotect 참고 자료 : https://hg2lee.tistory.com/entry/%EC%8B%9C%EC%8A%A4%ED%85%9C-mprotect-ROP mprotect 함수가 강력한 이유는 NX bit 보호기법이 걸려있음에도 불구하고 bss 영역에 쉘코드를 저장해놓은 후, mprotect로 해당 주소를 접근해 실행 권한을 줄 수 있기 때문이다. mprotec..