Profile

머리정리하는곳

c2w2m2

Pwntools 기본적인 사용법 - 4

쓸거 다써서 안쓰렸는데, 요즘 쓰는게 늘어나서 좀더 써본당 FmtStrrefer : http://python3-pwntools.readthedocs.io/en/latest/fmtstr.html 주 사용법은 fmt =FmtStr( argv ) 꼴로 사용한다. argv 에는 execute_fmt, offset, padlen, numbwritten 이 들어간다. 다 쓰이니까 알아두자.execute_fmt : payload를 보낼때 쓰는 함수를 지정한다. offset : AAAA %p %p 같은거 했을때 몇번째 %p 에서 나오는지 padlen : 패딩 필요할때 패딩 길이numbwritten : 몇글자 먼저 써있는지def send_pay(pay):p.sendline(pay) fmt = FmtStr(execute_..

Analysis ·

Automatic Exploit Generation

#include void shell(){ system("/bin/sh"); } int main(int argc, char *argv[]){ char buf[40]; read(0,buf,400); return 0; } 일단은 처음이니까 다음같은 간단한 코드를 AEG 로 풀어보자. 이러한 코드를 돌리면 | BUF | SFP | RET | 모양의 스택에서 BUF ~ RET 까지가 심볼릭한지를 체크하고, 심볼릭하다면, RET == shell_addr 이 되는 경우를 return 하는데, 이경우가 결국 payload 가 되어서 exploit 이 되는 것이다.

Analysis ·

Arm 아키텍쳐

임베디드에서 주로 사용됨. RISC 구조를 가짐. => RISC 란, 명령어 길이가 축약되어 나타나, 명령어 길이가 일정함. => 보다 빠른 명령어 해석이 가능 Pipe Line : Arm 에서 명령어를 처리하는 과정. F e t c h D e c o d e E x e c u t e I n s t r u c t i o n f e t c h e d f r o m m e m o r y D e c o d i n g o f r e g i s t e r s u s e d i n i n s t r u c t i o n R e g i s t e r ( s ) r e a d f r o m r e g i s t e r b a n k S h i f t a n d A L U o p e r a t i o n W r i t e..

Analysis ·

HTTP 프로토콜 구조

디미고 IT 멘토링 중에서 심플 보안 탐지 모듈을 하고 있는데 이번 과제였다. HTTP 프로토콜에 대해 보다 상세하게 알아가는 기회였다.

Analysis ·

syscall 을 이용한 rop

syscall 을 사용하여 rop 해볼 기회가 생겨서 한번 써봅니당. 문제는 이번 HITCON 2017 start 문제입니다. 이 문제같은경우에는 ruby 로 익스를 짜야했고, 덤으로 read 로 bss 에 /bin/sh 를 쓰는것은 간단했지만 execve 같은게 없어서 쉘을 띄우는데에는 고생했던 문제입니다. 저같은경우에는 syscall 을 이용하여 read 로 먼저 /bin/sh 를 쓰고 execve 를 콜해 풀었습니다. z = Sock.new '127.0.0.1', 31338 ; context.log_level = :debug ; z.send ''.rjust(25,'a'); z.recvuntil ''.rjust(24,'a');cana = u64(z.recv 8)-0x61; puts "0x%x" % c..

Analysis ·

Pwntools 기본적인 사용법 - 3

전에 이야기 했던데로 libc 와 rop 관련해서 적어봅니다 1. Libc 먼저 elf 를 통해서 elf 혹은 libc 파일을 엽니다. 요런식으로 아키텍쳐나 보호기법도 보여줘서 저는 checksec 보다 이걸 애용합니당. 만약 매핑된 시작 주소를 확인하고 싶으면 address 변수를 사용하시면됩니다. 함수의 주소 혹은 함수들의 리스트 등이 알고 싶을때는 로 알 수 있습니다. elf 의 symbol 을 보고싶으면 symbols 딕셔너리 변수를, plt 를 보고싶으면 plt, got 면 got 를 사용하시면 됩니다. 특정 section 의 주소를 알고 싶으면 이런식으로 사용하지만, bss 같은경우는 bss( ) 로 바로 알아올 수 있습니다. 이때 entry point 를 확인하고싶으면 로 확인할 수 있습니다..

Analysis ·

Full Relro 우회법

Full relro 가 걸리면 . ctors .dtors .jcr .dynamic .got 영역에 READONLY 가 걸리게 됩니다. 이를 우회하기 위해선 간단하게 저 영역에만 안쓰면 뎁니다 ㅎㅎ..... Got overwrite 같은 경우는 Got 에 함수의 주소를 쓰는건데 살짝 불편하기는 해도 Bss 영역에 쓰거나 아님 RTL 식으로 구성해도 되는 식으로 우회하는 방법은 생각하는게 우회하는 법입니다. 예시는 추후 들고 오겠습니다... 시험기간이라 예시까지 마련은 못하겠네요 ㅠㅠ 예제로 마련한 Pwnable.tw - Sliver_Bullet 입니다. from pwn import *import sys bss = 0x804b028 def payload():puts_plt = 0x80484a8puts_got..

Analysis ·

Pwntools 기본적인 사용법 - 2

이번에는 익스할 때 주로 사용하는것을 써볼겁니다 먼저 패킹 관련 함수들 입니다. 1. packing 1-1. p32 32bit little endian 으로 packing 해주는 함수입니다. p32(int) / return str ex ) p32(0x12345678) => \x78\x56\x34\x12 여기서 p32(0x12345678, endian='big') 을 해주면 big endian 으로 packing 해줍니다 1-2. p64 p32이랑 같지만 64bit 패킹해줍니다 p64(int) / return str ex ) p64(0x12345678) => \x00\x00\x00\x00\x78\x56\x34\x12 이것도 마찬가지로 p64(0x12345678, endian='big') 해주시면 big e..

Analysis ·

PPR 없이 ROP

말그대로 PPR 없이 ROP 하는 방법입니다. 체이닝을 이어가는 방법은 fake ebp 와 유사한 방법이지만 이를 계속해서 하는것이 좀 다릅니다. 먼저 일반 RTL 만 가능하더라도 ret 를 2번바꿀수 있다는 점을 이용합니다. 먼저 sfp 를 조작함으로써 ebp 를 어디든 쓸수있는 공간으로 옮깁니다. 그후 함수를 하나 호출해 주고 이 함수의 ret 부분에 leave ret 가젯을 넣어줌으로써 esp 는 아까 옮긴 ebp가 있는곳으로 갈겁니다. 그러면 아까 ebp 를 옮긴 곳에는 다시 sfp, ret 과 같은 역할을 하는주소가 형성되게 되고, 같은 방식으로 해주면 channing 이 되게 됩니다!

Analysis ·