pwntools 64bit fmtstr_payload
·
Tips & theory
서론 최근까지도 format string bug 문제가 나오면 직접 페이로드를 작성했었다. 왜나하면 기본적인 pwntools fmtstr_payload가 64 bit 용으로는 제대로 작성되지 않는 경우가 많았기 때문이다. 더불오 인터넷에 올라와있는 많은 코드들도 오류가 발생하는 경우가 대부분이었다. 고정된 주소라면 상관 없지만, leak 된 주소를 기반으로 하는 페이로드 작성이 시간이 지날수록 귀찮아짐에 따라 fmtstr_payload를 적극적으로 사용하기 위해 검색을 조금 했고, 드디어 찾아냈다. 방법 해결 방법이 너무 쉬웠다 -_- 단순히 contet.bits만 확실히 선언해주면 된다. 예를 들면 아래와 같다. from pwn import * context.bits = 64 system = 0x7f1..
pwntools - elf, symbol을 가져올때
·
Tips & theory
symbol을 가져오기 위해서는 프로그램 내에서 적어도 한번은 사용되는 함수여야 한다. 이외의 값은 libc offset을 통해 주소를 찾아내서 사용해야한다.
libc에서 offset 찾기.
·
Tips & theory
pwnable 문제를 풀다보면 libc 파일을 제공해주는 경우가 다수 있다. 하지만 offset을 구할때 자꾸 헷갈리는 부분이 있어 다시 정리한다. pwntools로 찾기 해당 파일의 libc 버전 또는 경로를 확인해서 ┌──(kali㉿kali)-[~/Downloads/1279bf21-e0f3-46a4-b577-3c3955c458fb] └─$ ldd oneshot linux-vdso.so.1 (0x00007ffc07293000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f361f1f0000) /lib64/ld-linux-x86-64.so.2 (0x00007f361f5e1000) 간단한 파이썬 코딩으로 libc 파일의 offset 확인. from pwn..
[Root-Me] ELF x86 - BSS buffer overflow : python 코딩해서 풀어보기.
·
To do list/Complete
2022.7.14 Clear! 주 목적은 인자를 어떻게 넣어주며 코드를 실행하느냐였다. 많은 블로그에 executable, argv, 무조건 써야한다. executable에서 파일 경로는 무조건 절대경로! argv는 list 선언할때 argv=["" for i in range()] 와 같이 선언해놓고 뒤에 써야한다. 라고 그래서... 또 생각하니 빡치네... 결론만 이야기하면, process 내에 list 형식으로 들어가면 된다. 자세한건 https://wyv3rn.tistory.com/27 Python 3 + pwntools 자주 하는 실수 변수의 타입을 확실하게 구분하며 출력함에 따라 자꾸 헷갈린다 ㅠㅠ 자주 하는 실수를 정리했다. ssh 서버에 접속해서 특정 파일을 실행할 때 s = ssh(user..
Python 3 + pwntools 자주 하는 실수
·
Tips & theory
변수의 타입을 확실하게 구분하며 출력함에 따라 자꾸 헷갈린다 ㅠㅠ 자주 하는 실수를 정리했다. ssh 서버에 접속해서 특정 파일을 실행할 때 s = ssh(user='app-systeme-ch83',host='challenge03.root-me.org',port=2223,password='app-systeme-ch83') p=s.process('./ch83') 이와 같이 선언하였을 때 서버에서 값을 받아오는지, 프로그램에서 받아오는지 확실히 해야 한다. p.recv(12) #프로그램에서 문자를 받아올때 s.recv(12) #서버에서 문자를 받아올때 변수를 선언할 때는 확실하게 선언할 것. 보통은 byte로 값을 처리하기 때문에 payload = b'' payload += b '\x90'*100 와 같이 ..