본문 바로가기

Wargame Write-Up141

[Pwnable.kr] dragon 풀이 dragon TL;DR IntegerOverflow (Logical bug?) + UAF void __cdecl FightDragon(int select) { char v1; // al int v2; // [esp+10h] [ebp-18h] int *player; // [esp+14h] [ebp-14h] int *dragon; // [esp+18h] [ebp-10h] void *v5; // [esp+1Ch] [ebp-Ch] player = malloc(0x10u); dragon = malloc(0x10u); v1 = Count++; if ( (v1 & 1) != 0 ) { dragon[1] = 1; *(dragon + 8) = 80; *(dragon + 9) = 4; dragon[3] = 10; *dra.. 2021. 10. 11.
[HackCTF] (Pwnable) pzshell 풀이 pzshell 위 쉘코드 + 내가입력한 opcode 8byte 를 붙여 xor 부터 실행시켜준다. 필터링하는 키워드는 \x0f\x05 이다. ezshell과 다른 점은, rdx 를 초기화하지 않고, si 에 0xdef1 을 넣어준다는 것 이다. 쉘코드+2 으로 점프하므로, rdx 에는 xor rbp,rbp 의 주소부터 저장되어있다. 그래서, xchg ? 으로 si 와 rdx 를 바꾼 뒤, read syscall 으로 쉘코드를 새로 입력받는다. 이 때. syscall 을 필터링하지 않으므로 자유롭게 사용할 수 있다. 또한 seccomp 설정에서, fork, vfork, clone, creat, ptrace, prctl, execve, execveat 가 필터링되어 있으므로, ORW 를 사용해 문제를 풀어야.. 2021. 10. 6.
[HackCTF] (Pwnable) ezshell 풀이 ezshell 힙공부를 미뤄둬서, hackctf 남은문제가 다 힙인줄알고 안풀었는데, 재밌는 쉘코딩문제도 있어서 풀어봐따. 저 쉘코드 50바이트 뒤에 내가 입력한 쉘코드를 strcat 으로 붙여서, xor 부터 실행해준다. 필터링하는 opcode 는 다음과 같다 \xb0 → mov r8, imm8 \x3b → execve call number \x0f05 → syscall syscall 필터링하는거는 syscall opcode 가 주어지니, jmp $- ~~ 으로 syscall 을 실행시킬 수 있다. al 에 mov 를 통해 값을 넣을 수 없으니, push/pop → inc 으로 우회할 수 있다. 하지만 rsp 를 0 으로 만드니 push/pop 을 사용할 수 없게된다. fs 세그먼트를 이용하면, rsp.. 2021. 10. 5.
[pwnable.tw] calc 풀이 보호되어 있는 글 입니다. 2021. 8. 8.