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’가 들어가는 것을 확인한다.
memcpy 함수를 실행해 보면 실행되는 위치가 0022FD98이라는 것을 알 수 있다.
복사될 영역이기 때문에 이 위치가 buf의 시작 주소라고 추정할 수 있다.
Hex hump 창에서 0022FD98 위치로 이동하고 memcpy 함수를 실행하면 0022FD98 위치에 test.txt 파일의 내용이 복사되는 것으로 보아 buf의 시작 주소임을 알 수 있었다.
그리고 RETN로 이동한다. 이 위치로 이동하면 주소가 0022FEEC인 것을 확인할 수 있다. 이 주소는 return 주소이다.
스택창을 보면 10개의 A가 영역을 침범했음을 알 수 있다.
따라서 설정된 buf의 사이즈는 340이고 overflow 되는 주소는 0022FD98이다.
3. 파이썬 코드 완성 및 근거
완성해야 할 파이썬 코드이다.
‘A’는 buf의 사이즈에서 쉘코드의 길이를 뺀 개수가 채워져야 한다. 위에서 buf의 사이즈를 구했기 때문에 첫 번째 @@@에는 340 들어갈 것이다.
두 번째 @@@는 buf가 시작되는 주소가 들어갈 것이다. 오버플로우를 발생시켜 return 주소를 수정시키고 이 return 주소가 쉘코드를 가리키면 쉘코드가 실행되어 공격에 성공할 것이다. 이 쉘코드는 buf에 위치한다, 따라서 들어갈 값은 0x22FD98이다.
파이썬 코드를 위와 같이 수정하고 실행했다.
파이썬 코드를 실행했을 때의 test-q1.txt 파일의 내용이다.
4. 쉘코드 실행 결과
이뮤니티 디버거에서 argument를 test-q1.txt로 설정한다.
fopen 함수로 test-q1.txt 파일이 열린다.
memcpy 함수가 실행되어 txt 파일의 내용이 0022FD98 위치에 복사되었다.
쉘코드를 실행해 보면 계산기가 출력된다.
'Study > 윈도우즈 보안과 운영 실습' 카테고리의 다른 글
integeroverflow (0) | 2024.03.19 |
---|---|
Stackoverflow 실습2 (0) | 2024.03.19 |
Stackoverflow 실습 (0) | 2024.03.19 |
Stackoverflow (0) | 2024.03.19 |
쉘코드 작성 - calc (0) | 2024.03.19 |