본문 바로가기

CTF/Pwnable.tw

(4)
Pwnable.tw pwnable_silver_bullet Write up 일단 이문제 디버깅 자체는 쉽다. 아마 전에 푼것보다 쉬운거같다. int __cdecl main(int argc, const char **argv, const char **envp) { int Input; // eax int v5; // [esp+0h] [ebp-3Ch] const char *v6; // [esp+4h] [ebp-38h] char s; // [esp+8h] [ebp-34h] int v8; // [esp+38h] [ebp-4h] init_proc(); v8 = 0; memset(&s, 0, 0x30u); v5 = 0x7FFFFFFF; v6 = "Gin"; while ( 1 ) { while ( 1 ) { while ( 1 ) { while ( 1 ) { menu(v5, v6); Input ..
Pwnable.tw pwnable_dubblesort Write up 나름 재밌는 문제였는데 조금 이상한 문제이기도 했다. 진짜 처음에 BOF터지는건 찾았는데 스택이 자꾸 이상하게 밖혀서 고생좀 했다. 일단 Leak 은 __printf_chk() 이 함수 이용한거임. 실행시키면 이렇게 앞에 이상한 문자열이 나오는데 저게 __printf_chk() 이거때문에 그러는거같았음. 스택 봐보면 A를 이어서 넣었는데 41앞에 붙어있는게 보일턴데 저거까지 같이 출력되는거임. 즉 libc가 있는대까지 A를 붙여서 Memory Leak을 시켜버리는거임. 근데 개 골떄리는게 내꺼엔 아됬음 ㅋㅋㅋㅋ nc로 바꾸면 Leak 이 정상적으로 되는데 로컬로만 하면 안됨 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 이거때문에 멘탈 한번 나가버림 충격 그 자체... 뭐 일단 Leak 은 됬으니까... leak 은 다른데서 ..
Pwnable.tw pwnable_3x17 Write up 보호되어 있는 글입니다.
Pwnable.tw pwnable_start Write up 간단한 문제라고 설명하지만 나한텐 절대 간단하지 않았다. 일단 바이너리 하나가 주어진다. 이 바이너리 가지고 한번 분석해보자. 일단 Ida로 열어보면 main 함수를 받고있지 않다. 근데 실행은된다. 즉 _start에서 출력이랑 인풋을 처리한다는얘기이다. 디스어셈블리로 코드를 한번 봐보자. ㅇ push esp push offset _exit xor eax, eax xor ebx, ebx xor ecx, ecx xor edx, edx push 3A465443h push 20656874h push 20747261h push 74732073h push 2774654Ch mov ecx, esp ; addr mov dl, 14h ; len mov bl, 1 ; fd mov al, 4 int 80h ; LINUX ..