python脚本基础 requests库使用 
1 2 3 4 5 6 7 8 9 10 import requests url="http://www.baidu.com" req=requests.get(url) req.encoding='utf-8'#修改编码 print(req.text)#输出字符串 print(req.content)#输出字节类型 把字节转化成字符串 print(req.content.decode('utf-8')) 
requests模块介绍 
请求-响应都是对象
请求:get、post方法进行http请求
User-Agent为浏览器标识,网站根据User-Agent的值判断是否是浏览器的请求,前面在学习python爬虫的时候,就需要伪装浏览器进行内容的爬取。
1 2 headers={"User-Agent":"xxx"} request.get(url,headers=headers) 
响应:属性获取响应的内容。 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 响应状态码 req.status_code 响应-请求头 req.request.headers 响应头 req.headers 响应-请求cookie req.request._cookies 响应cookie req.cookies 
python与burp联动代理 
python设置代理:
1 2 3 4 5 6 7 8 import requests url="http://www.baidu.com" proxies={ 	"http":"http://127.0.0.1:8080", 	"https":"https://127.0.0.1:8080" } req=requests.get(url,proxies=proxies) 
带参数的HTTP GET请求 
1、url直接设置提交参数
1 2 3 4 5 6 7 8 import requests url="http://www.baidu.com?wd=helloworld" proxies={ 	"http":"http://127.0.0.1:8080", 	"https":"https://127.0.0.1:8080" } req=requests.get(url,proxies=proxies) 
2、通过params字典提交参数
1 2 3 4 5 6 7 8 import requests params={"wd":"helloworld"} url="http://www.baidu.com" proxies={ 	"http":"http://127.0.0.1:8080", 	"https":"https://127.0.0.1:8080" } req=requests.get(url,proxies=proxies,params=params) 
带参数的 HTTP POST请求 
1 2 3 4 5 6 7 8 import requests data = {"username":"admin","password":"123456","Login":"Login"} url=".../login.php" proxies={ 	"http":"http://127.0.0.1:8080", 	"https":"https://127.0.0.1:8080" } req=requests.post(url,proxies=proxies,data=data) 
对比python post提交和页面post请求的内容区别
Cookie作用与使用 
利用http请求头中的cookie头携带
1 2 3 4 5 6 7 8 9 import requests data = {"username":"admin","password":"123456","Login":"Login"} url=".../login.php" proxies={ 	"http":"http://127.0.0.1:8080", 	"https":"https://127.0.0.1:8080" } headers={"Cookie":"xxx"} req=requests.post(url,proxies=proxies,data=data,headers=headers) 
为了更方便在python中使用cookie,requests模块中提供了保持会话的方法session() 
1 2 3 4 5 6 7 8 9 10 11 import requests url=".../login.php" proxies={ 	"http":"http://127.0.0.1:8080", 	"https":"https://127.0.0.1:8080" } s=request.session() req1=s.get(url,proxies=proxies)#保存cookie print(req1.headers) data={"username":"admin","password":"123456","Login":"Login"} req2=s.post(url,proxies=proxies,data=data) 
默认requests超时比较长,此时可缩短超时限制 
1 2 3 4 5 6 7 8 9 10 11 import requests url=".../login.php" proxies={ 	"http":"http://127.0.0.1:8080", 	"https":"https://127.0.0.1:8080" } s=request.session() req1=s.get(url,proxies=proxies)#保存cookie print(req1.headers) data={"username":"admin","password":"123456","Login":"Login"} req2=s.post(url,proxies=proxies,data=data,timeout=3) 
Python SQL注入自动化检测 1 发送可能构造错误的SQL语句,若发生错误,存在SQL注入漏洞。 
关键词 SQL syntax 
1 2 3 4 5 6 7 8 9 import requests url="" params={"id":"'"} req=requests.get(url,params=params) if req.text.find("SQL syntax") !=-1: 	print("find sql inject") else: 	print('no') 
Python XSS自动化检查 1 2 检测思路: 发送XSS Payload,筛选是否具有payload,那么存在XSS。 
Python XSS检测代码:
1 2 3 4 5 6 7 8 9 10 11 import requests url="" payload="<script>alert('xss')</script>" params={"a":payload} req=requests.get(url,params=params) if req.text.find(payload)!=-1: 	print("xss found") else: 	print("no xss") 
https://github.com/payloadbox/xss-payload-list 
下载XSS Payload List,新建文件,替换payload:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import  requestsimport  sysurl=""  with  open ('xss_payload.txt' ,'r' ,encoding='utf-8' )	payload_list=f.readlines() 	for  payload in  payload_list: 		payload.strip() 		params={"a" :payload} 		req=requests.get(url,params=params) 		if  req.text.find(payload)!=-1 : 			print ("xss found" ) 			sys.exit() 		else : 			print ("no xss" ) 
Python源码泄漏自动化挖掘 常见源码泄漏
1 .git、.svn、.DS_Store以及backup.zip等目录或文件 
1 2 3 4 5 6 7 8 9 10 11 12 import requests payloads=['.git','.svn','.DS_Store','backup.zip'] url="" for payload in payloads: 	req=requests.get(url+ "/"+payload) 	if req.status_code==200 :  		print("yes:"+req.request.url ) 		break 	else: 		continue 
添加txt字典遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import requests payloads=['.git','.svn','.DS_Store','backup.zip'] with open("urls.txt","r") as f : 	url_list=f.readlines() 	for url in url_list:         for payload in payloads:             req=requests.get(url+ "/"+payload)             if req.status_code=='200':                 print("yes")                 break             else:                 continue