전공쪽/pwnable.tw

흠.. 한동안 다른 것을 하기도 했었고 해서, 이번에는 조금 어려운 문제를 풀어보려고 한다. bounty program alpha라는 이름으로 hitcon ctf final 2019에 출제되었던 문제이다. 사실 solver 수를 보고 포기할까 했는데 strtok 취약점을 이용한 문제같아서 도전했다. 이 문제는 wrapper와 bounty_program으로 이루어져있다. 먼저 wrapper을 보면 seccomp이 걸려있다. 음.. 신기하게도 execveat 도 사용가능하고, sigreturn도 사용이 가능하다. execveat이 가능하면 그냥 쉘을 딸 수 있다. int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [rs..
starbound 문제의 writeup 이다. 보호기법은 다음 사진과 같다. 이 문제는 매우 크고 방대하기 때문에 자세한 분석은 하지 않았다. 세세한 기능은 파악하지 않고 취약점만 찾았다. 취약점 int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // eax char nptr; // [esp+10h] [ebp-104h] init(); while ( 1 ) { alarm(0x3Cu); dword_805817C(); if ( !readn(&nptr, 0x100u) ) break; v3 = strtol(&nptr, 0, 10); if ( !v3 ) break; ((void (*)(void))dword_8058154[v3])()..
예전에 상당히 재미있게 봤었었는데.. ㅎㅎ 문제는 간단하다. 딱히 분석은 없다. 너무 단순해서 NX가 없고, got부분을 네가 작성하는 쉘코드의 주소로 덮어쓸 수 있다. 따라서 내가 작성한 쉘코드를 실행하는 문제이다. 중간에 글 쓰다가 날라갔다. 이 문제는 나에게 있어서 나쁜 기억만 심어주었다. 당연히 char*str={"/bin/sh",0}; execve(str[0],str,0); 으로 쉘코드 작성하면 될줄 알았는데 32bit에서는 execve("/bin/sh",0,0) 이다. 너무 짜증나니까 내 코드를 가져가세요 from pwn import* p=process('./death_note') context(os="linux",arch="i386") p=remote('chall.pwnable.tw',102..
하.. 진짜 단순한 바이너리라도 분석을 제대로 안하면 어떤 꼴이 나는지 볼 수 있었던 문제인데.. 일단 바이너리를 보자. void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) { __int64 v3; // rax unsigned int v4; // [rsp+Ch] [rbp-4h] initialize(); printf("Name:", a2); read_Str((__int64)&name, 0x20u); v4 = 0; while ( 1 ) { while ( 1 ) { menu(); v3 = read_int(); if ( v3 != 2 ) break; if ( v4 2 ) { if ( v3 == 3 ) { print_name(); } else { ..
환경은 libc 2.29이기 때문에 ubuntu 20.04 에서 실습하였다. heap 문제가 partial relro 이다. 이건 귀하군요... 그리고 푼사람도 점수에 비해 매우 적다. 이 문제를 풀기에 앞서 2.29 이상에서 tcache의 변경점을 간단하게 정리할 필요가 있다. 변경점이라고 해봤자 double free가 안된다는 것이다. size검사 안하는건 똑같다. 2.27에선 아주 좋은 놈이였지만 2.29 이상에서는 해당사이즈의 tcache 전체를 돌면서 검사를 하기 때문에 fastbin 과 같은 double free도 안된다. 그러나 우회 방법이 있다. 1. free 된 청크의 bk를 변조하기 2. 사이즈를 변조하기이다. 3. fastbin 쓰기 4. tcache와 fastbin에 동시에 free..
이 단계에서 라업을 쓸거라고는 별로 생각을 못했는데... 좀 많이 막힌 문제여서 라업작성을 한다. 사실 이런류의 취약점을 처음풀어본다. 그리고 점수에 안맞게 매우매우 어려웠다. 그리고 평소에 라업을 너무 대강쓰는 것 같아서 앞으로 쓰는 틀을 좀 정형화 시켜보려고 노력중이다. 보호기법은 위와 같다. got overwrite이 가능하다! 바이너리를 살펴보자면 크게 add, delete, cart, checkout 으로 나눌 수 있다. Add unsigned int add() { char **cart; // [esp+1Ch] [ebp-2Ch] char nptr; // [esp+26h] [ebp-22h] unsigned int v3; // [esp+3Ch] [ebp-Ch] v3 = __readgsdword(0x..
이 문제는 stdin과 stdout의 flag가 로컬과 다르기 때문에 이를 미리 세팅해놓고 푸는게 좋다. 서버의 환경은 stdin 0xfb2887 stdout 0xfbad208b 이다. largin bin attack을 이용해서 풀었다. 취약점은 다들 쉽게 찾을 수 있다. house of orange로 많이들 푸는듯.
OSOR2
'전공쪽/pwnable.tw' 카테고리의 글 목록