일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- xcz
- 포너블
- kangsecu
- 버그바운티
- 버그헌팅
- nefus
- 정보보안
- CTF
- 선린인터넷고등학교
- 정보보호
- 블록체인
- webhacking
- hacking
- 프로그래밍
- 코드게이트
- 해킹
- wargame.kr
- 워게임
- 보안
- C언어
- 문제풀이
- DVP
- 웹해킹
- webhacking.kr
- 포렌식
- WarGame
- 네퓨즈
- 시스템
- Pwnable
- 자료구조
- Today
- Total
목록Pwnable (7)
kangsecu's B1og
이번에는 libc가 같이 제공이 안될경우 libc를 찾아서 문제를 해결하는 방법에 대하여 알아보자. libc-database 다운 : $git clone https://github.com/niklasb/libc-database.git libc data 다운 : library download / pwd : libc-database > $./get 사용법 : 1. 함수로 libc 파일 찾기 : ./libc-database/find/ [함수이름] [함수주소] 2. 함수 offset 찾기 : ./libc-databse/dump [id] [함수 이름] 3. ./libc-database/find/ [함수이름] [offset 3 bytes] function_addr = libc-base_addr + offset인데 ..
One_gadget이란 하나의 가젯만을 이용해서 쉘을 딸 수 있는 가젯이다.got overwrite를 할 경우 많이 사용되며 /bin/sh을 립시 파일 내에서 실행하는 가젯이다. one_gadget install : > apt install ruby > gem install one_gadget 사용법 : one_gadget "libc file" ex) one_gadget /lib/x86_64-linux-gnu/libc.so.6
이번에는 조금 팁? 같은 거다. 뭐 plt나 got를 주소를 알 수 있지만, 우리가 보는 여러 가지 함수들의 이름도 메모리 내에 적재되어 있기 때문에 이를 이용해서 공격을 진행하는 것이다. 그중 .dynstr 섹션의 함수들의 네이밍을 보면 여러 가지 문자열로 이용할만한 것들이 있다. 예를 들어서 가장 많이 사용하는 것은 /bin/sh 같은 걸 사용할 수 없을 때 fflush함수 등에서 sh를 가져다 사용하는 것이다. 이걸 system인자로 넘겨서 sh을 사용할 수 있게 된다.
드디어 rop를 정리한다. 공부해가면서 계속해서 내용을 추가할 예정이다. 이전 내용 복습 - 간단하게 RTL Chaining을 훑고 가보자. RTL Chaining은 RTL을 pop ret을 이용해서 여러 함수의 호출을 연계하는 것이다. 예를들어 read함수를 이용하여 bss영역에 /bin/sh을 입력하고 이를 system함수의 인자로 넘겨주기 위해서는 dummy + sfp + read@plt + pop pop pop ret Gadget + 0x0 + &bss + 0x8 + system@plt + pop ret Gadget + &bss 이렇게 페이로드를 구성하고 read는 0일때 표준입력이니까 이를 이용해서 bss에 /bin/sh을 넘겨주면 된다. - bss영역을 조회할때는 아이다로 보거나 readelf..
1. bof_pie binary : main은 볼게 없다. 들어가자마자 welcome이 실행됨 welcome : j0n9hyun : 대충 페이로드가 생각이났다. 근데 PIE가 걸려있어서 base주소로 할 수가없다. 그러므로 welcome_addr에서 welcome_offset을 빼서 base_addr을 구하고 거기에 j0n9hynun_offset을 더해서 j0n9hyun을 실행시킬 것이다. exploit : 2. yes or no binary : 3. RTL_world binary : NX가 있으니가,, RTL 을 하자 > 그냥 문제 이름도 RTL이다. main : 이 부분에서 bof가 발생하고 우린 여기서 rtl을 해주면 된다. exploit : 바이너리를 확인해서 dummy(144) + sys_add..
1. x64 Buffer Overflow binary : main.c : callmemaybe.c : exploit : 2. x64 Simple_size_BOF binary : main.c : exploit : 총 shell_code(31) + dummy(27929) + ret(buf_addr) 3. Simple_Overflow_ver_2 binary : main : 이번 문제는 매우 간단하다.(사실 지금까진 다 간단하다.) 그냥 scanf에서 취약점이 발생한다. 그리고 ret까지는 0x88 = 140이다. payload : shellcode(25) + dummy(115) + ret_addr 4. Offset binary : main : select_func : print_flag : main에서 get..
1. Basic_BOF #1 binary : main : 뭐 굳이 쉘코드를 넣을 필요도 없다. 그냥 v5변수 값이 -559038737이면 되는데 이게 0xDEADBEEF이다. payload : 2. Basic_BOF #2 binary : main : 이번에도 딱히 뭐 없다. 그냥 v5변수에 sup함수를 넣는다. 그럼 여기서 128바이트를 더미로 채우고 0804849b를 ret로 넘겨주면 된다. payload : dummy(128) + p32(0x0804849b) $(python -c 'print "A"*128 + "\x9b\x84\x04\x08"'; cat) | nc ctf.j0n9hyun.xyz 3001 3. Basic_FSB binary : main : vuln : 이 함수의 snprintf와 밑에 ..