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을 찾아서 사용한다.