본문 바로가기

pwnable44

[Pwnable.tw] hacknote 풀이 hacknote TL;DR manipulate function pointer heap challnege analysis 메뉴는 할당 삭제 함수포인터 호출 이렇게 있다. 전역변수 ptr 에 청크를 5개까지만 입력받을 수 있다. ptr[i] = malloc(0x8) → function address → malloc(input size) → contents 할당할 때는 malloc(0x8), malloc(input size) 순으로 할당받고, 해제할 때는 역순으로 해제한다. 함수포인터를 호출할 때는 (*ptr[i])(ptr[i]); 이런식으로 호출한다. 그 함수는 인자+4 값을 참조해 contents 를 출력해준다. vulns ptr 를 초기화하지 않아 uaf 도 발생. exploit malloc(0x8) →.. 2021. 10. 19.
[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.