목록Security/Pwnable (146)
cdor1's lab
간단한 rop? 가젯을 하나 이용한다.프로그램을 실행하면 gets로 길이제한없이 입력을 받는데 이 프로그램은 아무런 보호기법이 적용되어있지 않다.sub_400320부분에서 내가 입력한 값에 "Smash me outside, how bout dAAAAAAAAAAA"가 들어가는지 판단한다.그래서 64bit calling convention대로 저 문자열은 esi에 넣고나의 input은lea rax, [rbp+var_40]mov rdi, rax를 거쳐 rdi레지스터에 저장된다. 문제도 매우 심플하고 간단해서 혹시 jmp rdi 가젯이 있을까 생각해 찾아보았는데히히 nop + shellcode + 문자열 + jmp rdi 해주면 된다 from pwn import * s = process('./smashme') ..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
heap overflow를 그냥 준다...대회 당일에 ubuntu 14.04는 파일 실행이 안되길래 16.04 찾아 깔려다가 귀찮아서 코드 분석만 했는데 c++이라 잘 보이지도 않고 의욕 떨어져서 끈기있게 잡지도 않았다.aws를 16.04로 갈아엎고 실행해서 풀었는데 손퍼징의 중요성을 알았다 ㅎ..여기서 인풋값을 제한하지 않는다.뒷쪽 user_name의 포인터가 존재하는데 이 부분을 덮어서 leak할 수 있다. 또한 user_name ptr에 입력받는 부분이 있으므로 포인터를 got로 덮어놓고 인풋을 넣어서 exploit할 수 있다. from pwn import * #s = process('./petshop') s = remote('localhost', 4000) def buy(select): print..
보호되어 있는 글입니다.
fastbin상에서 malloc_hook을 덮어 exploit하는 문제이다.allocate, free, dump, fill 이렇게 4가지 메뉴가 존재하는데fill 메뉴에서는 alloc된 chunk의 사이즈를 신경쓰지 않고 사용자의 input 만큼 할당해주게 된다.이로써 heap overflow가 발생한다. -leak-chunk들의 size부분, fd를 덮어 libc와 heap 주소를 leak해낼 수 있다. heap주소는 내 exploit에서는 사용하지 않았지만 leak하는 방법을 써보려 한다.첫번째 chunk의 size를 더 크게 수정하고 재할당 받아 dump 메뉴로 출력하는 범위를 늘려준다.뒤에 있는 청크들을 free해주면 fd가 생기게 되는데 1번째 chunk size가 뒤에 있는 chunk의 내용까..
#installapt-get install qemu #download kernel & imagewget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qcow2wget https://people.debian.org/\~aurel32/qemu/mipsel/debian_squeeze_mipsel_standard.qcow2wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-maltawget https://people.debian.org/\~aurel32/qemu/mipsel/vmlinux-2.6.32-5-4kc-malta #executeqemu..
$s0 ~ $s7, $ra 순서대로 공격자가 overwrite 할 수 있는데move $t9, $s1, jalr $t9 와 같은 가젯들을 이용해서 익스플로잇 한다.그런데 그 이전에 캐시 무결성 문제를 해결하기 위해 데이터 캐시를 플러싱해 정리해줘야 한다.sleep(1)과 같은 함수를 호출해서 캐시를 플러싱 해주고 이후addiu $a2, $sp, 0x1cmove $t9, $a2jalr $t9와 같은 가젯들을 찾아 sp + 0x1c부분에 쉘코드를 넣어주고 그곳으로 jalr해 쉘을 얻어내는 방식이다.
보호되어 있는 글입니다.