System/Pwnable.kr
-
[ Rookiss ] Ascii_easySystem/Pwnable.kr 2019. 4. 5. 18:45
'Printable-ascii-only' Exploit payload 출력가능한 ASCII문자범위(0x21~0x7F)내에서 Payload를 작성해야 한다. [ Ascii_easy@pwnable.kr ] ascii_easy : 문제 바이너리 ascii_easy.c : 바이너리 소스파일 libc-2.15.so : 바이너리에 로드되는 라이브러리 intended_solution.txt : 문제를 풀면 확인할 수 있는 출제자가 의도한 풀이방법 [ Ascii_easy.c ] #include #include #include #include #include #include #define BASE ((void*)0x5555e000) int is_ascii(int c){ if(c>=0x20 && c
-
[ Rookiss ] AllocaSystem/Pwnable.kr 2019. 3. 24. 17:58
" Buffer Overflow를 예방하는 법에 대해서 알려주겠다. "고 한다. [ Alloca.c ]12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#include #include #include void callme(){ system("/bin/sh");} void clear_newlines(){ int c; do{ c = getchar(); }while (c != '\n' && c != EOF);} int g_canary;int check_canary(int canary){ int result = cana..
-
[ Toddler's Bottle ] asmSystem/Pwnable.kr 2019. 3. 9. 00:54
문제를 보면 Shellcode를 만들어서 익스하는 유형인것 같다. [ asm.c ]1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include #include #include #include #include #include #include #include #define LENGTH 128 void sandbox(){ scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_KILL); if (ctx == NULL) { printf("seccomp error\n"); exit(0); } seccomp_rule_add(ctx, SCMP_A..
-
[ Rookiss ] otpSystem/Pwnable.kr 2019. 3. 6. 05:33
OTP시스템을 만들었는데, 자기가 실수한게 있는지 확인 좀 해달라는 문제다. ssh로 접속하는걸 보니, 로컬에서 뭔가를 해야하는 'Local Exploit'문제의 가능성을 열어두고 풀도록 하자그리고 레이스컨디션이나 브루트포스로 푸는 문제는 아니라고 한다. [ Binary Code ]이것저것 여러가지 하는데 urandom에서 읽어온 값을 맞추면 쉘이 떨어지는 코드다. 여기서 눈 여겨봐야할 것은 '반환값 검사'의 유무다.겉으로 보기에는 철저하게 검사를 하고 있는 것 같지만, fwrite( )의 반환값은 검사하지 않는다.fwrite( )의 반환값은 정상적으로 실행됐을 경우 '출력한Byte' / 실패한 경우 -1을 반환한다. 해당 프로그램에서는 User_input값과 비교할 랜덤값을 임시파일에 써놓는 역할을 하..
-
[ Rookiss ] Simple LoginSystem/Pwnable.kr 2019. 1. 17. 15:17
[ Binary info ]32Bit 바이너리이며, 보호기법은 Canary와 NX Bit가 적용되어 있다. 특이점으로는 Statically link방식을 사용하기 때문에 RTL과 같이 공유 라이브러리를 이용하는 공격 기법은 사용이 불가능하다.따라서, 바이너리안에 존재하는 함수들을 Chaining하는 식으로 페이로드를 구성해야 한다. [ Binary Execute ]바이너리를 실행하면 입력값을 받는데 길이값을 크게 주면 'Wrong Length'라는 경고 메시지를 출력한다.특정 길이값을 주면 입력값에 대한 hash값을 출력하는데, 이때 Segmentation Fault가 발생한다.이 부분을 포인트로 잡고 IDA 디버깅을 해보도록 하자[ Debugging#1 ]main( )를 먼저 보면 실행 때 봤던 "Au..
-
[ Rookiss ] loveletterSystem/Pwnable.kr 2018. 8. 26. 05:10
이번에 새로 추가된 Rookiss문제다.포인트는 제대로 잡았는데, 제대로 활용을 못해서 굉장히 오래 걸렸다..ㅠㅠ 우선 문제 취약점은 로직버그로 생긴 BoF이며, Command Injection을 이용해서 쉘을 따내는 문제다.Canary때문에 RET를 직접 덮을 수는 없으며, Size 공간 Overflow가 가능해서 이 부분을 공략하면 되는 문제다. Command Injection으로 쉘 명령어를 실행시킬 수 있는 환경을 조성했더라도 Input의 dummy값까지 명령어로 인식해버려서 이 부분까지 신경을 써줘야 한다. 따라서 STAGE 1 - BoF로 Command Injection으로 쉘 환경 조성하기 STAGE 2 - Input dummy값 처리하기 로 나눠서 Write up을 작성하도록 하겠다. [ ..