Hackappatoi CTF 2022 - [PWN] Endless Queue
·
CTF/Solved
1. intro 2. code 및 분석 2.1. code int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { setup(); banner(); bar_queue(); } void __fastcall __noreturn bar_queue() { unsigned int v0; // eax unsigned int hours; // [rsp+Ch] [rbp-54h] char buffer[64]; // [rsp+10h] [rbp-50h] BYREF unsigned __int64 v3; // [rsp+58h] [rbp-8h] v3 = __readfsqword(0x28u); memset(buffer, 0, sizeof(buffer..
memory leak 관점에서의 format string bug의 유용성.
·
Tips & theory
서론 개인적으로 지금까지 format string bug는 단순히 offset 확인을 위한 %p(또는 %x), 입력 길이를 위한 %c, 길이만큼 쓰기를 위한 %n 정도만 사용하고 있었는데, linked_list 라는 문제를 풀면서 조금 더 발전할 수 있는 계기가 되었다. 원리 어차피 원리는 format string bug이다. 다만, memory leak 관점에서 활용성을 극대화할 수 있어서 조금 정리해둔다. 일단 간단히 코딩. main(){ char buf[100]; while (1){ gets(buf); printf(buf); printf("\n"); } } 컴파일 시 에러가 많이 나는데 무시해도 상관없음 ㅋ 일단, 아래와 같이 %p로 출력해봤다. ┌──(kali㉿kali)-[~/Downloads] ..
Format String Bug
·
Wargame/Dreamhack
보호되어 있는 글입니다.
basic_exploitation_003
·
Wargame/Dreamhack
#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"); } int main(int argc, char *argv[]) { char *heap_buf = (char *)malloc(0x80); char stack_buf[0x90] = {}; initialize(); read(0, heap_buf, 0x80..
basic_exploitation_002
·
Wargame/Dreamhack
#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"); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); read(0, buf, 0x80); printf(buf); exit(0); } 32 bit format string bug 문제이..
[App-System] ELF x86 - Format string bug basic 2
·
Wargame/Root me
1. intro 2. code 및 분석 2.1. code #include #include #include #include int main( int argc, char ** argv ) { int var; int check = 0x04030201; char fmt[128]; if (argc 239 - 0x56 + 1 = 239 - 86 + 1 = 154 be => be - ef => 1be - ef = 446 - 239 = 207 ad => ad - be => 1ad - be = 429 - 190 = 239 de => de - ad = 222 - 173 = 49 가 된다. 다시 한번 페이로드를 변경해서 시도하면 ./ch14 `perl -e 'print "\xa8\xfa\xff\xbf","BBBB","\xa..
[App-System] ELF x86 - Format string bug basic 1
·
Wargame/Root me
1. intro 2. code & 분석 #include #include int main(int argc, char *argv[]){ FILE *secret = fopen("/challenge/app-systeme/ch5/.passwd", "rt"); char buffer[32]; fgets(buffer, sizeof(buffer), secret); printf(argv[1]); fclose(secret); return 0; } 코드를 요약하면 .passwd 파일을 열고 buffer 변수에 32byte를 할당하고 fgets로 buffer 변수 size만큼 secret 파일에서 가져와서 buffer 변수에 저장한 뒤 printf로 argv[1]을 출력하고 종료한다. 하지만 printf(변수명)을 사용하기 때..