[NOTE : pwnable] shellcode 제작하기 64bit일 경우, 상단에 context.arch='amd64' 추가 (안하면 32bit 쉘코드로 만들어짐) 상단에 추가하기 귀찮으면 아래처럼... asm(shellcode, arch='amd64') shellcode = '' shellcode += 'mov rdi, rsi\n' shellcode += 'xchg rax, rdx\n' shellcode = asm(shellcode) p.send(shellcode) Note/pwnable 2021.04.27
[NOTE : pwnable] 어떨 때 syscall ROP를 하나요? BOF가 터져서 RET를 어떤 함수(주소)로 덮을까 고민이 되었다. 함수 목록을 보면 flag를 출력해주는 함수도 없었고, system함수도 존재하지 않았따... 심지어 nx도 걸려있어서 쉘코드 실행도 못한다. 출력해주는 함수도 없어서 leak도 못하는 상황 그리고 static으로 컴파일되어있을때, 혹은 stripped 파일일 때, (전자는 모든 함수가 sub_*, 후자는 사용자정의함수가 sub_*) 이럴 때 syscall ROP를 한다. jiravvit.tistory.com/entry/HackCTF-Pwnable-look-at-me-%ED%92%80%EC%9D%B4-32bit-syscall jiravvit.tistory.com/entry/DEFCON-2019-speedrun-001-%ED%92%80%E.. Note/pwnable 2021.04.16
[NOTE : pwnable] asm로 문제풀 때 nasm -o solution solution.asm && nc -v [host] [port] < solution Note/pwnable 2021.03.23
[NOTE : pwnable] cat flag가 안될 때 (cat명령 막힘, 파일 읽기 명령) 익스에 성공하고 flag 파일을 읽을 때 cat 명령이 안되는 경우가 있다고 한다. 파일 읽기 명령은 생각보다 꽤 많다... Note/pwnable 2021.03.17
[NOTE : pwnable] PIE 보호기법 우회 PIE 보호기법이 걸려있으면 매우 작은 주소에 코드들이 위치한다. 왜냐면 주소공간의 어느 위치에 매핑되어도 작동하도록 상대주소로 되어있는 것... 아무튼 프로그램을 실행할 때마다 매핑되는 주소가 달라진다. ROP ㄴㄴ 실행중인 프로그램의 pie_base를 leak한다. 실제주소와 get_shell 같은 함수의 offset 차이를 이용한다. 한마디로 각 함수들이 동일한 offset으로 주소를 할당 받는 것을 이용한다. Note/pwnable 2021.03.15
[NOTE : pwnable] NX bit없을 때는 shellcode shellcode를 ret로 넣어주면 안됨 shellcode주소를 ret에 넣어줘야 쉘코드가 동작 * NX가 disabled되어있어야 함. Note/pwnable 2021.03.04
[NOTE : pwnable] 32bit FSB AAAA %p %p %p %p %p %p %p offset 구하고 payload = fmtstr_payload(offset, {got : overwriting_function}) Note/pwnable 2021.03.04
[NOTE : pwnable] libc가 주어져 있지 않은 경우 libc가 주어져 있지 않은 경우엔 아래의 database에서 libc 버전을 직접 찾아줘야 한다. libc.blukat.me/? libc database search Query show all libs / start over libc.blukat.me 사용예 pwngdb의 backtrace에 있는 __libc_start_main+231 (=__libc_start_main_ret, main의 ret) 의 하위 3byte 입력 아래처럼 read 함수의 got를 출력시켜 하위 3바이트를 입력해도 됨 Note/pwnable 2021.02.16