신뢰성 검사 시스템을 악용
저자:
Ashfaq 안사

이용 후기:
평가:
5
4월 1, 2015
마지막으로 수정:2월 6, 2017

개요:

취약성 신뢰성 검사 시스템 소프트웨어의 신뢰성을 결정하기 위해 개발되어 악용 EIP = 0x41414141의 히트 수를 계산하여

소개

 
내 친구 중 하나는 "놀고 있었는데MS13-009” a 무료 한 후 사용 의 취약점으로 인터넷 익스플로러 어떤 리드 원격 코드 실행.

그는 서면으로 그를 도와달라고 신뢰할 수있는 악용 이 취약점에 대한.

나는이 취약점으로보기 시작하면, 나는이 취약점으로 인해이 매우 사실에 신뢰할 수없는 것을 깨달았 무료 해제 된 객체의 사용 사이의 작은 창. 더 중요한 것은, 자유는 일어 났을 때 모든 실행 SCRIPT 블록이 완료 얻을.

이 때문에, 우리의 JScript의에 의존했다 의 setTimeout() 기능이 해제 된 객체를 재 할당.

으로, 내 작업은 신뢰할이 취약점 악용 작성했다, 그것은 출시 고통스러운 인터넷 익스플로러 아래의 WinDbg는 및 기록 EIP 값마다 등록.

이러한 상황은 나를 좌절했고 나는이 작업을 수행하는 작은 스크립트를 작성하지 이유를 생각하기 시작.

신뢰성 검사 시스템을 악용

 
그래서, 신뢰성이 악용 횟수를 계산에 의해 결정된다 제어 할 수있다 EIP 원하는 주소 / 값 등록.
이 매우 간단한 스크립트 공격으로 얼마나 많은 결정 신뢰할 수있는. 내가 사용하고 있습니다 CDB.EXE 충돌을 감지 레지스터 상태를 기록합니다.

소스 코드

 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# -*- 코딩: UTF-8 -*-
"""

 /$$$$$$$$ /$$$$$$$  /$$$$$$$$ /$$$$$$
| $$_____ /| $$__ $$|__ $$ __ // $ $ __ $$
| $$      | $$  \ $$   | $$  | $$  \__ /
| $$$$$   | $$$$$$$/   | $$  |  $$$$$$
| $$__ / | $$__ $$ | $$   \____ $$
| $$      | $$  \ $$   | $$   /$$  \ $$
| $$$$$$$$| $$  | $$   | $$  |  $$$$$$/
|________ /|__ /|__ / |__ / \______ /


저작권 (C) 2010-2015 HackSys 팀

이 파일은 신뢰성 테스트 공격의 일부입니다
체계.

공격 신뢰성 테스트 시스템 테스트하는 데 사용됩니다
타격의 신뢰성 EIP = 0x41414141. 이 시스템
악용 얼마나 찾는 목표로하는 것은 신뢰성.

복사 권한에 대해 파일 '라이센스'를 참조하십시오.

저자 : Ashfaq 안사
접촉: ashfaq_ansari1989[에]hotmail.com
웹 사이트: HTTP://hacksys.vfreaks.com

"""


__author__ = '아슈 파크 안사'
__version__ = '1.0'

수입 os
수입 SYS
수입 또 shutil
수입 서브 프로세스
수입 스레딩


클래스 ExploitReliabilityTestingSystem(대상):
    """
    이 클래스는 신뢰성을 공격의 핵심입니다
    테스트 시스템.
    """


    DEF __init__(자기, CDB, 로그, 프로그램, 인자='):
        """
        이 ERTS의 생성자입니다

        :CDB를 중지: cdb.exe 경로
        :PARAM 로그: 로그 경로
        :PARAM 프로그램: 프로그램을 시작합니다
        :PARAM의 인수: 프로그램 인수
        """

        # CDB 경우 확인, 로그인 프로그램이 존재
        아니 os.통로.존재(CDB):
            증가 AttributeError('CDB 경로를 확인하십시오')
        ELIF 아니 os.통로.존재(로그):
            시험:
                os.MKDIR(os.통로.dirname이(로그))
            OSERROR:
                증가 AttributeError('로그 경로를 확인하십시오')
        ELIF 아니 os.통로.존재(프로그램):
            증가 AttributeError('프로그램 경로를 확인하십시오')

        자기.CDB = CDB
        자기.로그 = 로그
        자기.프로그램 = 프로그램
        자기.인자 = 인자
        자기.방법 = 없음

    DEF 실행(자기, FILE_PATH, 시간 제한=60):
        """
        이 타임 아웃 프로세스를 실행하는 데 사용됩니다
        스레딩을 사용하여

        :PARAM의 FILE_PATH: 열 경로를 파일
        :PARAM 시간 제한: 초 타임 아웃
        """

        # 인수 및 시간 초과 매개 변수의 유효성을 검사
        FILE_PATH 입니다 없음:
            증가 AttributeError('프로그램 파일 경로를 확인하십시오')
        ELIF 시간 제한 입니다 없음 유형(시간 제한) == :
            증가 AttributeError('시간 초과를 유효하게 해주세요')

        DEF __launch_process():
            # 프로세스 인수를 준비
            process_args = 자기.CDB + '' + '-g -G -o -c 및 용어는 .logopen' + 자기.로그 + \
                           ';R;.logclose;큐" & quot; ' + 자기.프로그램 + '" ' + 자기.인자 + \
                           '' + FILE_PATH

            자기.방법 = 서브 프로세스.교황(process_args,
                                            표준 입력=서브 프로세스.PIPE,
                                            표준 출력=서브 프로세스.PIPE,
                                            열려진=서브 프로세스.PIPE)
            # 프로세스가 종료 될 때까지 기다립니다
            자기.방법.통신()

        # 프로세스를 실행하는 스레드를 준비
        process_thread = 스레딩.(목표=__launch_process)

        # 스레드를 시작합니다
        process_thread.스타트()

        # 지금 스레드 합류
        process_thread.가입(시간 제한=시간 제한)

        # 스레드가 아직 살아 있는지 확인
        process_thread.is_alive():
            # 프로세스가 충돌하지 않은 것 같다
            # 의 프로세스를 죽일 수 있습니다
            자기.방법.종료()

            # 의 자식 스레드를 종료하자
            process_thread.가입()

    DEF is_crash_reliable(자기, EIP):
        """
        충돌이 신뢰할 수 있다면이 확인하는 데 사용됩니다
        충돌 로그에서 EIP를 확인하여

        :EIP의 PARAM: EIP는 비교 값을 등록
        :반환: 참 / 거짓
        """

        # 문자열로 EIP를 확인
        유형(EIP) != :
            증가 AttributeError('EIP를 유효하게 해주세요')

        로그 = 열려있는(자기.로그).읽기()

        'EIP ={0}'.체재(EIP) 로그:
            반환 참된
        그렇지 않으면:
            반환 그릇된


__name__ == "__main__":
    # 상수
    HEADER = '' '

      /$$$$$$$$ /$$$$$$$  /$$$$$$$$ /$$$$$$
     | $$_____ /| $$__ $$|__ $$ __ // $ $ __ $$
     | $$      | $$  \ $$   | $$  | $$  \__ /
     | $$$$$   | $$$$$$$/   | $$  |  $$$$$$
     | $$__ / | $$__ $$ | $$   \____ $$
     | $$      | $$  \ $$   | $$   /$$  \ $$
     | $$$$$$$$| $$  | $$   | $$  |  $$$$$$/
     |________ /|__ /|__ / |__ / \______ /

           신뢰성 시스템을 악용
                 버전: {0}

    '' '
.체재(__version__)

    # 미세 조정이 값
    MAX_RUN = 10
    시간 초과 = 60
    EIP = '41414141'
    FILE_PATH = 'HTTP://로컬 호스트:8000/exploit.html '
    CDB_PATH = 'C:\\프로그램 파일\\Windows 용 디버깅 도구 (86)\\cdb.exe '
    PROGRAM_PATH = 'C:\\프로그램 파일\\인터넷 익스플로러\\iexplore.exe를 '
    PROGRAM_ARGS = '
    log_path에 = 'C:\\로그\' + os.path.basename(PROGRAM_PATH) + '.로그'

    reliable_crash_count = 0
    신뢰성 = 0

    # 인쇄 대상 정보
    인쇄 HEADER
    인쇄 '
대상 EIP: {0}'.format(EIP)
    인쇄 '
대상 응용 프로그램: {0}\N'.format(os.path.basename(PROGRAM_PATH))

    # 신뢰성을 공격의 인스턴스를 생성
    # TestingSystem 클래스
    ERTS = ExploitReliabilityTestingSystem(CDB = CDB_PATH,
                                           = log_path에 로그,
                                           프로그램 = PROGRAM_PATH,
                                           인수 = PROGRAM_ARGS)

    # 응용 프로그램을 실행하고 충돌의 수를 계산
    범위의 난에 대한(0, MAX_RUN):
        # 대상 응용 프로그램을 실행
        erts.run(FILE_PATH = FILE_PATH, 제한 시간 = 시간 초과)

        # 충돌이 신뢰할 수있는 경우 지금 확인
        erts.is_crash_reliable 경우(EIP EIP =):
            reliable_crash_count = 1

        # 이제 신뢰성을 악용 결정
        신뢰성 = (reliable_crash_count * 100) / MAX_RUN

        # 화면의 상태를 인쇄
        하라 sys.stdout.write("\R[{0}] 라이브 신뢰성 평가: {1}%& quot; .format(나는 + 1, 신뢰성))
        sys.stdout.flush()

    # 로그 디렉토리를 삭제
    shutil.rmtree(경로 = os.path.dirname(log_path에))

    인쇄 '
\N'
    인쇄 '
신뢰성 평가를 악용: {0}%'.format(신뢰성)

 

책임의 한계: 여기에 제공된 소스 코드를 사용하지 마십시오. 최신 버전은 항상 아래의 Github에서 저장소에서 찾을 수 있습니다.

 

행동

 

신뢰성 검사 시스템이 완료 공격
신뢰성 테스트 시스템 실행을 악용

 

GitHub의에 신뢰성 검사 시스템을 악용

 


나는 이것이 그들의 공격의 신뢰성을 테스트하고자하는 개발자를 활용하는 것이 유용 할 수 있습니다 희망. 당신이 어떤 버그를 발견하면 문제를 제기하거나하세요 당신은 어떤 개선 제안이있는 경우.

12,430 전체보기, 25 조회 수 오늘

다음 두 개의 탭은 아래 내용을 변경.

Ashfaq 안사

보안 연구원
아슈 파크 안사리는의 창시자이다 HackSys 팀 코드 이름 "표범". 그는 정보 보안의 다양한 측면에 경험을 가진 보안 연구원입니다. 그는 저술 "HackSys 익스트림 취약 드라이버" 과 "죽음의 쉘 코드". 그는 또한 작성 및 낮은 수준의 소프트웨어 개발에 대한 다양한 백서를 발표했다. 그의 핵심 관심에있다 "낮은 수준의 착취", "리버스 엔지니어링", "프로그램 분석" 과 "하이브리드 퍼징". 그는 인공 지능과 기계 학습의 팬보이입니다. 그는의 장 리드입니다 널 푸네.

회신을 남겨주

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드는 표시됩니다 *