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 |