Write up (Wargame)/Pwnable

Write up (Wargame)/Pwnable

[pwnable.kr] flag 풀이

analysis 아무 보호기법도 없고, 실행하면 다음과 같이 나온다. 64bit 파일이므로 ida로 분석해본다. syscall 을 보려고 strace -i 한다. mmap을 사용한다. 동적 분석을 하다보니, mmap으로 새로 만든 공간에 기존 코드 영역을 복사하는 부분이 있다. https://b.mytears.org/2008/08/666/ 메모리 복사 코드 최적화… kldp 를 눈팅하다가 오늘 재밌는 문서를 읽게 되었습니다. 2001년도에 AMD 에서 나온 문서였는데, 그 내용이 상당히 흥미로워서 몇 가지 내용을 옮겨볼까 합니다. 메모리에서 연속된 값들을 다른 곳 b.mytears.org 돌아가서 이후 실행하는 코드를 ida로 확인하고 continue. 근데 이제 보니까 이건 리버싱 문제였다. 리버싱 문..

Write up (Wargame)/Pwnable

[pwnable.tw] orw 풀이

analysis 동적으로 실행하면 입력한 shellcode를 실행시켜주는 듯. 우리는 /home/orw/flag라는 파일을 읽어야하고 open, read, write만 사용 가능하다. 32bit이고 PIE, NX 없고 혹시나 싶어 secomp 확인 저기 나와있는 syscall에 한해 allow되고 그렇지 않은 것들은 ERRNO된다. main 함수는 이번에도 간결.. printf를 하고 read 한다. printf 부분은 shellcode 입력하라는 출력으로 보인다. 그냥 그대로 쉘코드 넣어주면 될 것 같다. shellcraft 쓰면 편할거 같은데. 쉘코드 총 0xc8바이트만큼 입력받는 것에 유의한다. exploit from pwn import * p = remote('chall.pwnable.tw', 1..

Write up (Wargame)/Pwnable

[pwnable.tw] Start 풀이

analysis 이 문제는 아무것도 걸려있지 않다. 그리고 32bit 파일이다. 실행하면 위 문장이 출려되고 입력을 받는다. 아무래도 어셈블리로 봐야할 것 같다. 어셈블리도 이게 전부인데, 매우 간단하다. 크롬 syscall에서 가져온건데 거의 다 똑같은거 같아서. int 0x80이 32bit에서는 syscall과 같은 역할을 수행한다. eax가 0x4면 write를 하는데 이건 아무래도 위에서 입력받기 전에 출력하는 부분 이후, read를 하는데 ebx를 0으로 만들어서 stdin 으로 입력받고 dl은 0x3c를 넣는다. ecx는 esp 그대로인듯. 따라서 esp에다가 0x3c만큼 입력받는다. ret를 할 때 esp에다가 0x14만큼 더하고 ret를 하니까 그 만큼 뒤에 있는 _exit 가 들어있는 부..

Write up (Wargame)/Pwnable

[H4CGM] bof

보호되어 있는 글입니다.

Write up (Wargame)/Pwnable

[H4CGM] Qualification

int __cdecl main(int argc, const char **argv, const char **envp) { char s[48]; // [rsp+0h] [rbp-30h] BYREF init(); memset(s, 0, 0x28uLL); puts("Do you know pwnable?"); read(0, s, 0x40uLL); return 0; } main은 이게 전부고 NX만 존재 그냥 RET를 win 함수로 바꾸려 BOF하면 된다. 0x38까지, SFP를 덮고 0x8을 win함수 주소로 채운다. from pwn import * p = remote('pwn.h4ckingga.me', 10001) #p = process('./welcome') p.recvuntil('?\n') win = 0x00..

Write up (Wargame)/Pwnable

[pwnable.xyz] two targets 풀이

analysis checksec으로 확인하면 PIE랑 RELRO가 걸려있지 않고 canary와 NX가 걸려있다. int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int cmd; // eax char name[32]; // [rsp+10h] [rbp-40h] BYREF _QWORD v5[4]; // [rsp+30h] [rbp-20h] BYREF v5[3] = __readfsqword(0x28u); // cnry setup(); memset(name, 0, 0x38uLL); while ( 1 ) { while ( 1 ) { print_menu(); cmd = read_int32(); if ( cmd != 2 ) bre..

Write up (Wargame)/Pwnable

[pwnable.xyz] xor 풀이

analysis canary 없음. int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // [rsp+Ch] [rbp-24h] __int64 v4; // [rsp+10h] [rbp-20h] BYREF __int64 v5; // [rsp+18h] [rbp-18h] BYREF __int64 v6; // [rsp+20h] [rbp-10h] BYREF unsigned __int64 v7; // [rsp+28h] [rbp-8h] v7 = __readfsqword(0x28u); puts("The Poopolator"); setup(); while ( 1 ) { v6 = 0LL; printf(format, argv)..

Write up (Wargame)/Pwnable

[Dreamhack Wargame] cube 풀이

보호되어 있는 글입니다.

그믐​
'Write up (Wargame)/Pwnable' 카테고리의 글 목록 (2 Page)