프로젝트 8

Network webserver

Packet Analysis 네트워크 패킷을 wireshark를 이용해서 Naver을 열었을 때 상황이다. Ethernet in packet Ethernet의 header를 보여준다. IP in packet IP의 header를 보여준다. TCP in packet TCP header를 보여준다. HTTP in packet (Request) HTTP request Message structure HTTP 요청 메시지의 구조를 보여준다 Request line : Method + URI + Version (POST + / + HTTP/1.1) HTTP의 요청 메소드가 아주 많이 있는데 그중에 우리는 자주 사용하는 것이 GET과 POST가 있다 GET : GET메서드는 특정 리소스의 표시를 요청합니다.GET을 ..

프로젝트 2020.06.27

1-day Exploit 실습

환경 : Windows 10 64bit Exploit 대상 소프트웨어 : Faststone - max viewer 32bit운영체제 Dword(4byte) 1-day 파일과 소프트웨어를 구해서 실습을 진행하도록 한다. 확인을 해보기 위해 bat파일을 만들어 위 사진처럼 내용을 작성한 뒤 저장한다. bat파일을 실행을 시키면 windbg가 실행되면서 해당 소프트웨어와 이미지파일이 로드된다. F5를 눌러 진행을 하다 보면 41414141로 뜨면서 멈출 때가 있다. RET부분으로 다음 주소로 갈 수 없기 때문에 일어나는 Segmentation Fault이다. 아까 맨 처음(Exploit 실습)에 보았던 Stack BufferOverflow 와 같은 현상이 일어났다. HxD를 켜서 Ctrl + F로 확인을 해보..

프로젝트 2020.02.21

SEH overwrite

이번에는 SEH(Structured Exception Handling)가 걸려 있는 코드를 가지고 exploit을 해보도록 하겠다. 앞서서 SEH이란 WINDOWS OS 에서 제공하는 예외처리방식이다. Stack Cookie옵션이 걸려 있는 상황이다. Stack Cookie란 RET, SFP 이전에 랜덤 한 4바이트의 쿠키 값을 삽입하는 것이며,함수가 종료되기 전 해당 쿠키 값이 기존의 값과 동일한지 검사하는 코드가 있다. 이러한 방어기법을 뚫으려면 SEH에 대해서 알아야한다. SEH(Structured Exception Handler)란 윈도우의 예외 처리 기술로써 해당 기술은 프로그램 상에서 발생하는 다 양한 예외에 대한 처리를 지원하기 위한 것이다. 컴파일러는 SEH 체인을 만들고 관리하며, 예외가..

프로젝트 2020.02.17

Trampoline Technique

일반적인 EIP overwrite기법은 정확한 shellcode의 주소를 알아야 하는데 ASLR이 적용되면 스택의 주소가 랜덤하게 바뀌어 정확한 주소를 알기 어려워져 공격이 힘들다. 위의 사진은 ASLR이 걸려있는 프로그램을 두번에 걸쳐 실행을 했을 때의 버퍼 주소이다. 보시다시피 하나는 01321359 , 다른 하나는 009C1359로 다르다. 이러한 경우에는 Trampoline기법을 사용한다. Trampoline기법이란 쉘코드의 주소를 직접 쓰는 것이 아니라 JMP ESP 가젯을 이용하여 쉘코드가 저장된 주소로 이동하게 하는 기법이다. 디버거를 열어 ALT + M을 하여 메모리창으로 간뒤 CTRL + B를 하여 바이너리서치 메뉴를 열어 Hex창에 FF E4를 넣는다. FF E4는 JMP ESP의 기계..

프로젝트 2020.02.16

Basic Stack BufferOverflow

윈도우 소프트웨어 zero-day 헌팅 프로젝트 하기 전에 라는 책으로 숙달을 해봤습니다. 실습파일을 다운을 받아 reader.cpp라는 파일을 열어 보았습니다. #include #include #include int main(int argc, char* argv[]) { char readbuf[2000] = {0,}; char printbuf[500] = {0,}; printf(" # text reader #\n"); if(argc!=2) { printf(" Usage : reader.exe filename\n", argv[0]); exit(1); } FILE *f = fopen(argv[1], "r"); fgets(readbuf,2000,f); strcpy(printbuf,readbuf); print..

프로젝트 2020.02.16