Kernel_exploit 공부

<공부 중 알아낸 것들 메모하는 곳>

 

 - 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 가능

 

  Comments,     Trackbacks