no image
overflow
Q1.exe 파일과 파이썬(py) 코드를 활용하여 반드시 immunitydbg 상의 실행창에서 overflow가 발생하도록 한다. 1.main 함수 및 주요 함수 위치 찾기 (BP설정) exe파일을 열고 가장 먼저 보이는 call에 들어간다. 주석을 보고 call 함수 위치에 BP를 걸어 들어간다. 주석을 보아 004015C0 위치가 main 함수인 것을 알 수 있다. fopen 함수, gets 함수와 memcpy 함수에 BP를 걸었다. 2.설정된 buf 사이즈와 overflow 번지수 찾기 A가 350개인 test.txt 파일을 디버거에서 argument 설정했다. fopen 함수에서 test.txt 파일이 열리는 것을 확인한다. fgets 함수를 실행하여 파일에 들어있던 ‘A’가 들어가는 것을 확인한..
2024.03.19
no image
integeroverflow
오버플로우 영역에 쉘코드 주입 후 리턴 주소 변경 [BUF에 들어가는 주소 값을 추출하는 방법] memcpy 지점에 가서 실제 복사가 될 값은 EAX일 가능성이 높기 때문에 해당 주소를 hex dump영역과 스택 영역에서 검색한다. memcpy를 실행하고 hex dump영역과 스택 영역에서도 값이 출력되는 것을 확인할 수 있다. 이 주소가 쉘코드가 들어가서 시작되는 주소이다. 022FDAC F8키로 리턴까지 수행을 하면 0022FEEC 지점에 022FDAC이 들어가면 메인함수가 리턴하는 순간 쉘코드가 시작하는 지점으로 이동한다. 따라서 쉘코드가 실행된다. [A의 개수를 산출하는 방법] A를 350개로 오버플로우 시켰는데 이 값은 너무 많기 때문에 0022FEEC 위의 주소인 0022FEE8까지만 A로 오..
2024.03.19
no image
Stackoverflow 실습2
main() 함수 20바이트를 초과하는 데이터 입력한다. Buffer의 크기가 20이기 때문에 초과된 값은 456789이다. Buffer 입력 값이 스택에 저장된 것을 확인한다. 0022FEB8 주소를 Hex dump 영역에서 검색하여 buffer 입력 값을 확인한다. ESP+2C=0022FEA0+2C=0022FECC 0022FECC이 EAX에 저장되었다. 0022FECC 주소에는 초과된 값이 저장되어 있다. ESP+18=0022FEA0+18=0022FEB8 0022FEB8이 EAX에 저장되었다. 이 값은 입력한 값의 주소이다. EAX값이 ESP+4에 저장되었고 스택영역에서 저장된 것을 확인했다. 입력된 데이터가 버퍼를 넘었고 다른 메모리 영역을 침범하여 buffer1에 초과된 값이 출력된다.
2024.03.19
no image
Stackoverflow 실습
[틀린 패스워드 입력] -gets() 입력 후 스택 gets() 실행 후 학번을 입력했다. 스택을 확인하면 입력한 학번인 ‘2022111336’이 들어간다. -strcmp() 수행 후 스택 및 레지스터 Strcmp()를 실행하고 스택을 보면 saved_password 저장 값 위에 입력한 값이 들어간 것을 확인할 수 있다. 레지스터를 보면 첫 단어에서 판정이 되고 문자열과 비교했을 때 결과가 같지 않아 00401602로 JUMP한다. -check_password() 함수 종료 직전 flag 설정의 스택 및 레지스터 문자열이 달라서 1이 저장되는 부분을 jump했기 때문에 레지스터의 EAX에 0이 저장되었고, 스택에서 EBP-C 주소에서 확인했을 때도 0이 저장되었다. -main() 함수에서 첫번째 if문..
2024.03.19
no image
Stackoverflow
Fopen()의 인자가 test.txt 값으로 변경한다. Fget() 수행 후 test.txt 문자열을 스택으로 확인한다. 스택영역에서 문자열이 저장된 영역의 주소를 Hex dump영역에서 검색하여 이동한다. 문자열이 저장된 영역의 주소는readbuf : EBP + ECX - 9C4 = 12F57C이다. 문자열이 복사될 영역의 주소는 printbuf : EBP + ECX - 1F5 = 12FD4C이다. 계속해서 실행하면 cmd창에 문자열이 출력된다. 다음 실습으로는 reader_exploit.py 파일을 실행시켜 test.txt 파일에 A문자 550개를 저장했다. Fget()을 수행하면 스택영역에서 test.txt. 파일에 저장된 A문자열을 확인할 수 있다. EIP가 AAAA로 변조되고 버퍼오버플로우가 ..
2024.03.19
no image
쉘코드 작성 - calc
[shellcode_calc] - C++ 코딩 코드 입력과 실행 결과 확인 [shellcode_calc] – 디버깅 어셈블리 추출 WinExec에 중단점을 놓고 실행한다 호출 함수 주소 값 찾기 이뮤니티디버거에서 VIEW메뉴의 Executable modules를 선택한다. Kernel32.dll을 더블클릭하고 Ctrl+N을 누르면 names in kernel32창이 뜬다. 여기서 WinExec와 ExitProcess 함수의 주소를 찾는다. WinExec : 76EEEDB2 ExitProcess : 76EBBBE2 [shellcode_calc] – 어셈블리 작성 Buf 문자열 만들기 WinExec 함수 호출 ExitProcess 함수 호출 차례대로 메모장에 입력한다. [shellcode_calc2] – 코..
2024.03.19
no image
쉘코드 작성 - Notepad
Notepad 출력 [shellcode_notepad] C++로 코드 작성 실행 결과 확인 디버깅 WinExec에 중단점을 놓고 실행한다. 디스어셈블리로 이동하고 어셈블리를 추출한다. 호출 함수 주소 값 찾기 이뮤니티디버거에서 VIEW메뉴의 Executable modules를 선택한다. Kernel32.dll을 더블클릭하고 Ctrl+N을 누르면 names in kernel32창이 뜬다. 여기서 WinExec와 ExitProcess 함수의 주소를 찾는다. WinExec : 76EEEDB2 ExitProcess : 76EBBBE2 어셈블리 작성 [shellcode_notepad2] 코드 작성 실행 결과 16진수 변환 중단점을 놓고 실행한다. 디스어셈블리로 이동하여 필요한 부분의 코드 바이트를 가져온다. [s..
2024.03.19
no image
윈도우 실행 파일 구조 분석
가상머신에 window7을 다운받아 실습을 진행했다. CFF Explorer Suite 분석기 사용 [DOS Header] e_magic : 5A 4D Signature 정보는 5A 4D로 PE파일을 나타내는 MZ이다. e_lfanew : 000000D8 IMAGE_NT_Header의 시작주소를 나타낸다. [DOC Stud Code] DOS 환경에서 실행되는 코드를 가진 영역이며 DOS Stub가 없어도 파일 실행에 문제가 없다. 실행하지 않아도 정적 분석을 통해 윈도우에서 실행되는 파일임을 알 수 있다. [NT Header] 1. Signature Dword로 4바이트 공간의 PE구조 파일 명시한다. 2. File Header Machine(CPU) : 0x014C – Intel CPU 호환 Numbe..
2024.03.19
no image
디셈블러와 디버거 실습
#include #include int plus(int a, int b) { int result=0; result = a+b; return result; } int main() { int x = 10; int y = 6; printf("Start!!\n"); int result = plus(x, y); if(result>10) { printf("Good!! Result : %d \n", result); } else { printf("Bad.. Result : %d \n", result); } return 0; } CodeBlocks 코딩 & 컴파일 가장 먼저 보이는 CALL에 F7 단축키를 사용하여 들어간다. 위로 스크롤하여 msvcrt._cexit 주석을 찾고 근처 CALL에 F2 단축키로 BP를 건다..
2024.03.19
Prev 1 2 Next
반응형