HTTP协议介绍
协议分类: HTTP 1.0,使用的是80端口,一次一个连接。明文传输,不安全。 HTTP 1.1,使用的是80端口,可多次一个连接。明文传输,不安全。 HTTPS,使用的是443端口,可多次一个连接。加密传输。
请求方法:
HTTP1.0HTTP1.1
GETGETPOSTPOSTHEADHEAD—PUT—DELETE—TRACE—CONNET—PATCH
URL格式: 协议://主机名.域名/文件夹/文件夹/文件?参数1=值1&参数2=值2
HTTP请求头 user-agent:浏览器的版本信息 Accept-encoding:浏览器接收的编码 Referer:当前页面是从哪里跳转过来的 Cookie: Location:跳转到哪里 Set-Cookie:设置Cookie信息(在HTTP响应头) WWW-Authenticate:用于身份验证信息HTTP、Basic等
HTTP响应状态码 1xx:信息提示 2xx:请求响应成功 3xx:重定向 4xx:客户端错误 5xx:服务端错误
HTTP 请求: 浏览器审查工具、BurpSuite等
Python-HTTP请求
GET请求 1、不带参数:requests.get(url) 2、带参数:r.url获取请求URL
import requests
url
="http://httpbin.org/get/ "
payload
={'key1':'value1','key2':'value2',}
r
=requests
.get
(url
,params
=payload
)
print(r
.status_code
)
print(r
.url
)
POST请求 1、不带参数:requests.post(url) 2、带参数:r.url获取请求URL
import requests
url
="http://httpbin.org/get/ "
payload
={'key1':'value1','key2':'value2',}
r
=requests
.post
(url
,data
=payload
)
print(r
.status_code
)
print(r
.url
)
自定义请求
import requests
url
="http://127.0.0.1/brute/brute_get.php"
zdy
={'User-agent':'hehe'}
r
=requests
.get
(url
,header
=zdy
)
print(r
.requests
.headers
)
其他请求
方法解释
requests.request()构造一个请求,支持以下各种方法requests.get()获取html的主要方法requests.head()获取html头部信息的主要方法requests.post()向html网页提交post请求的方法requests.put()向html网页提交put请求的方法requests.patch()向html提交局部修改的请求requests.delete()向html提交删除请求
Python-HTTP响应
import requests
url
="https://www.baidu.com/"
r
=requests
.get
(url
)
print(r
.text
)
print(r
.content
)
print(r
.status_code
)
print(r
.url
)
print(r
.request
.headers
)
print(r
.headers
)
print(r
.cookies
)
Python-HTTP代理
import requests
url
='https://www.baidu.com'
proxise
={'http':'http://192.168.83.138:8080','https':'https://192.168.83.138:8080'}
r
=requests
.get
(url
,proxies
=proxise
,verify
=False)
print(r
.status_code
)
Python-HTTP会话编程
url
='https://www.baidu.com'
s
=requests
.session
()
r
=s
.get
(url
)
print(r
.cookies
)
print(r
.request
.headers
)
r2
=s
.get
(url
)
print(r2
.request
.headers
)
Python 目录扫描工具
目录扫描原理 1、读取字典文件,拼接URL。 2、HTTP GET请求URL。 3、判断状态码,输出存在目录。
字典文件读取
with open("filename.txt","r") as f #打开字典文件,with:读取完就关闭。
f.readline() #读取一行
f.readlines() #读取全部文件
f.read(x) #读取x个字节
工具编写 1、读取字典文件 2、HTTP GET请求 3、参数优化
import requests
url
='https://github.com/'
with open('dir.txt','r') as f
:
for line
in f
.readlines
():
line
= line
.strip
()
print(line
)
r
=requests
.get
(url
+line
)
if r
.status_code
==200:
print('ulr:'+r
.url
+'exist')
设置User-Agent,在扫描时非通常的User-Agent可触发被扫描对象的发觉,所以可以“伪造”成通常的User-Agent。更逼真一些,也可以早扫描时导入一个User-Agent字典,让每一个请求包的User-Agent都不相同。
import requests
url
='https://www.baidu.com'
s
={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'}
r
=requests
.get
(url
,headers
=s
)
print(r
.request
.headers
)
Python - IIS PUT漏洞探测工具
import requests
url
='http://192.168.83.141:8006/'
r
=requests
.options
(url
)
print(r
.headers
)
result
=r
.headers
['Public']
if result
.find
('PUT') and result
.find
('MOVE'):
print('exist IIS put val')
else:
print('not exist')
Python 获取HTTP服务器信息
以Windows 2003为例
import requests
url
='http://192.168.83.141:8006/'
r
=requests
.get
(url
)
print(r
.headers
)
print("服务器中间件为:"+r
.headers
['Server'])
print("服务器脚本语言:"+r
.headers
['X-Powered-By'])
Python 漏洞检测工具
漏洞原理: 漏洞被披露之后,根据漏洞原理写出对应的PoC代码,用来验证漏洞是否存在。 写PoC代码,首先要了解漏洞原理。编写代码: 以ms15-034为例: Payload:‘Host’: ‘stuff’,‘Range’: ‘bytes=0-18446744073709551615’
url
='target_ip'
r
=requests
.get
(url
)
remote_server
= r
.headers
['Server']
if remote_server
.find
('IIS/7.5') or remote_server
.find
('8.0'):
payload
={'Host': 'stuff','Range': 'bytes=0-18446744073709551615'}
r1
=requests
.get
(url
,headers
=payload
)
if str(r1
.content
).find
('Requested Range Not Satisfiable'):
print(url
+ 'exist vuln ms15-034')
else:
print(url
+ 'not exist vuln ms15-034')
else:
print('Server not a iis 7.5 or iis 8.0')
验证检测代码检测效果: 搭建漏洞环境用于测试。 与其他工具进行效果对比。
站点地图构建(完整目录与文件)
测试Web APP首要任务,获取站点的完整目录与文件。技术种类: 1、通过基于字典的目录文件扫描(爆破),再通过响应状态码确定是否存在,使用Python的requests模块即可完成。 2、通过基于网络爬虫,使用Python的Scrapy模块即可完成。BurpSuite构建站点地图,通过Spider模块(爬虫)、Intruder模块(爆破)即可完成。