Ref.
[Pwnable] code pattern
bbolmin
2014. 4. 26. 12:12
환경 : NX, Ascii Armor, ASLR(stack)
[ &ret sled로 RTL 인자 구성]
| buf | &ret x n번 | &execl | dummy(next ret) | argv1 | argv2 | NULL | ....
[*] 원하는 값을 가진 고정된 argv를 만날 때 까지 &ret를 타고 이동 후 RTL 1회 사용.
환경 : ASLR(stack) -> shellcode
[ jmp %esp로 ASLR 우회]
| buf | jmp %esp(ret) | nop + shellcode |
^
ret명령어 실행시 %esp의 위치
[*] call %esp도 가능
환경 : NX, ASLR(stack, libc), Ascii Armor
[ fake ebp를 이용해서 custom stack 가기 ]
- exploit buffer - (stage1)
| buf | &custom stack(ebp) | recv_plt (ret) | &leave-ret (next ret) | 입력받을 fd값 | &custom stack | 입력받을 크기 |
- custom stack - (stage2)
| next ebp | execve_plt | exit_plt | &"/bin/sh" | &&"/bin/sh" | &NULL | &"/bin/sh" | NULL | "/bin/sh"|
[*] stage2까지 구성하는 이유는 인자로 필요한 문자열 참조해야 할 경우("/bin/sh"같은 ), 고정된 주소인 custom stack을 찾아서 사용한다.