본문 바로가기

시스템 해킹/cykor26

dethstarr dethstarr dethstarr문제는 계속 입력을 받고, 지정된 값임을 확인하고 아니면 exit함수로 넘어가는 것을 반복한다. 처음에는 코드에서 하라는 대로 계속 따라갔더니 r < 2017. 3. 11.
how2heap/poison_null_byte.c #include #include #include #include #include int main(){printf("Welcome to poison null byte 2.0!\n");printf("Tested in Ubuntu 14.04 64bit.\n");printf("This technique can be used when you have an off-by-one into a malloc'ed region with a null byte.\n"); uint8_t* a;uint8_t* b;uint8_t* c;uint8_t* b1;uint8_t* b2;uint8_t* d; printf("We allocate 0x100 bytes for 'a'.\n");a = (uint8_t*) malloc(0x100);pr.. 2017. 1. 1.
chal2 이휘원선배님께서 내주신 숙제힌트를 보고서야 풀 수 있었다ㅜㅜTYPE CONFUSION+OFF BY ONE 여기서, 1을 선택할 경우 (add ascii art) 이 3가지는 옵션이 된다. 3가지중 아무거나 선택 후 입력을 받게 된다. 여기서 0xF7(247)자를 읽는다. 여기서 3을 선택한 경우,id 입력 후, 4가지가 나오는데,add comment를 할 경우, comment를 입력 받는데 0xFC(252)자를 받는다. 즉, 입력을 받을 때 ascii art와 comment 2가지가 있다.이런식으로 박히는데,2가지 case가 있다 0x0804bX08부분에 박힌다.ascii art0x0804bx08: 0x49->id->0x00*3->옵션주소(옵션1: 0x08048c60, 옵션2: 0x08048b9f)->0.. 2016. 12. 31.
chal1 휘원선배님께서 내주신 과제!! 일단, gbb속에서 확인을 해봅시다0xbfffe440이 get_my_line의 인자로 들어간다.memcpy의 인자 0x0804e2c8 0xbfffe440 64 0x804e2c8에 써지기 시작합니다.,, 0x804f148에도 써지기 시작함!!!! exit: 0x804c8c8(이건 언제나 동일) 위 그림처럼 출력되는 부분을 확인해보자0 804d008 4de(1246) 1256(1주소-0주소) 1 804d4f0 461(1121) 1128(2주소-1주소) 2 804d958 3b3(947) 952 3 804dd10 2e5(741) 752 4 804e000 2c2(706) 712 5 804e2c8 12c(300) 304 6 804e3f8 2a1(673) 680 7 804e6a0 3ec.. 2016. 12. 29.
HEAP Heap Memory는 큰 메모리 블록 여러개로 이루어져 있다.각 블록은 블록의 크기와 그 밖의 사항을 설명하는 작은 헤더를 가지고 있다.힙 버퍼에서 오버플로우가 나면, 힙의 다음 블록 헤덜르 포함하는 영역을 덮어쓰게 된다.다음 블록의 헤더를 덮어 쓴 후에는 메모리에 임의의 데이터를 쓸 수 있다. 프로그램은 Heap 영역에 존재하는 데이터를 참조할 때에는 포인터 변수를 사용한다.즉 이름으로 접근하지 않고 주소로서 접근한다! Heap 은 프로그래밍에서 동적할당을 위한 공간이다.메모리 할당은 정적할당과 동적할당으로 구분할 수 있다.컴파일시 미리 크기가 정해져 들어가는 할당->정적할당프로그램 실행시 크기가 정해져 들어가는 할당->동적할당 malloc()->free() malloc함수 성공시 Heap Memor.. 2016. 12. 24.
ssp 매우 재미있는 문제를 풀었다바로 이대진 선배님의 과제였던 ssp문제이다이것은 eip를 41414141로 조작하는 문제이다 메인이 없는 것 같아 보일때는 아이다에서 start에서 마지막에 0x804865c로 가는 것을 볼 수 있는데, 이곳이 메인임을 알 수 있다. 일단, 0x804865c에서 read를 하여 입력을 받는다, 이때, i=strchr(&v3,58)을 하게 되는데, 이는 v3의 주소에 적힌 값에서 :가 있는 곳의 주소를 i에 넣는다.for문에서 중간에 i만 있는데, 이는 i가 참일때까지, 즉 null이 아닐때까지 i는 i+2가 되어 반복을 한다. 0x80485bd를 보면 a2-a1+1을 하게 될때, a2는 :가 있는 곳의 주소고, a1은 v3의 주소 이므로, a2-a1+1은 처음부터 :까지의 길.. 2016. 12. 14.
ROP2 이를 이용해 system("sh")로 쉘 얻기!! 일단, memory leak을 해야 한다. __libc_start_main : 0xb7e1c500__libc_system : 0xb7e3e850 offset: 0xb7e3e850-0xb7e1c500=0x22350 0x80482c0은 __libc_start_main의 plt 0x804a00c는 __libc_start_main의 got0xb7e1c500은 실함수 0x80482c0와 0x804a00c는 바뀌지 않지만, 0xb7e1c500은 바뀐다.0x804a00c에 있는 어떤 값 x에 offset을 더하면 __libc_system주소가 됩니다!! system함수의 인자 sh를 만들어야 한다.bss 부분에 넣자 0x804a018은 IDA에서 보면 알 수 있듯이 .. 2016. 11. 17.
ROP1 writable인 곳에 넣어야 한다.IDA에서 확인 0x080491b0 0xbfffe500에 값 들어가기 시작 0x080480db : popal ; ret 0x080480d8 : rep stosb byte ptr es:[edi], al ; ret rep있으면 ecx가 0이 될때까지 반복al의 값을 edi에 있는 주소의 값으로 넣는다. AL은 EAX의 마지막 8bit(1byte) 처음 도전: r < 2016. 11. 11.