본문 바로가기

저세상 해킹/포너블

ROP gadget으로 쉘 따기 feat. calc

ROP gadget으로 쉘을 따기 위해 어떤 짓을 하는지 궁금해서 좀 봤다.

 

일단, 우리가 해야하는건, bss영역에다가 "/bin/sh"같이 생겨먹은 문자열을 박아넣고, 인터럽트를 통해서 원하는 함수를 실행시킬 수 있다.

 

어떤 개지랄을 해서라도 다음과 같은 환경을 만들어 놔야 한다.

 

내가 execve함수를 실행한다는 조건에서 이런 환경이어야 한다.

 

eax : 0xb, ebx : &"/bin/sh" 나머지 레지스터는 잘 모르겠고, int80으로 인터럽트를 걸 수 있는 상황이어야 한다.

 

우선 /bin/sh같은 경우는 bss+0x100같은 곳에 쓰는게 대부분이다.

 

엄... 그냥 적절한 가젯을 잘 박아서 하면 된다.

 

원하는 레지스터에 pop해주는거 구한 다음에 그 레지스터를 dword하면 됨~

 

아 생각해보니까 이게 아니다. mov dword ptr[], ~~~ 같은 가젯을 쓰게 되면 ~~~값 자체를 해당 주소에 갖다 박아버리기 때문에 차례대로 "/bin", "/sh\x00" 이렇게 갖다 박는 편이 옳다고 한다. 미안~

 

적당히 스택에다가 bss주소랑 스택주소를 갖다 쳐박고 해보자.

 

가령 예를 좀 들어보자.

 

pop ebx;

pop edx;

mov dword ptr[ebx], edx;

ret;

 

0x~~~~~~(bss주소)

0x~~~~~~("/bin/"주소)

0x~~~~~~(다음 가젯)

 

요딴식으로 스택을 갖다 박아주시면 우리가 꼴리는대로 레지스터를 조작한 다음에 다음 가젯으로 건너뛸 수 있다.

'저세상 해킹 > 포너블' 카테고리의 다른 글

Chunk - FLAG  (0) 2019.09.16
malloc chunk 구조체  (0) 2019.09.16