<공부 중 알아낸 것들 메모하는 곳>
- init 을 수정하고 cpio 재압축 하는 방법
$ find . | cpio -ov --format=newc > ../a.cpio
- Kernel_Exploit 을 위한 Skeleton Codes
<compile.sh>
#!/bin/bash
musl-gcc -o ans ans.c -static
base64 ./ans > ans.b64
cat ans.b64
rm ans ans.b64
<ans.py>
from pwn import *
import subprocess
r = process(argv = ['/bin/bash','-c','./run.sh'])
def main() :
file = subprocess.check_output('./compile.sh').strip()
r.sendlineafter('$','cd /home/ctf')
r.sendlineafter('$','echo "{}" > ans.b64'.format(file))
r.sendlineafter('$','base64 -d ans.b64 > ans')
r.sendlineafter('$','chmod +x ans')
r.interactive()
if __name__ == '__main__' :
main()
- vmlinux 없을 때 추출하는 명령어
$ /usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux bzImage > vmlinux
- gdb 디버깅 할때
$ gdb -q vmlinux
$ add-symbol-file [kernel file 위치] [.text addr]
$ target remote 0:1234
-cpio 새로 만드는 skeleton code
#!/bin/bash
musl-gcc -o ans ans.c -static
cp ans initramfs/home/ctf
cd initramfs
find . | cpio -ov --format=newc > ../a.cpio
- RIP control 방법?
유저 모드의 got 처럼 Kernel에도 File_ operation 구조체가 존재함
이 구조체의 적당한 위치에 overwrite하고 함수 호출하면 RIP_control 가능
'CTF > ETC' 카테고리의 다른 글
scp로 파일 가져오기 (pwnable.kr ssh 서버에서 바이너리 가져오기) (0) | 2020.07.17 |
---|