利用Python进行Web渗透测试(六):使用requests模块与Web应用进行交互(转载)
本篇将会涉及:
- requests模块
- 第一个脚本
- 设置http请求头
- 发送POST请求
文章目录 [隐藏]
requests模块
接触过Python爬虫的同学,对requests模块都不会陌生。这是一个高效便捷快速友好的HTTP请求库。
与爬虫类似,进行Web渗透测试也需要对Web应用进行请求,与网站进行交互或者是遍历网站路径亦或是测试SQL注入漏洞,还是上传带有后门的表单文件。
requests模块支持多种HTTP请求方式,基本上涵盖了HTTP协议所定义的请求方法:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924142816673-1466822672.png)
同时能够方便地查看请求和响应的信息。
- 查看状态码:使用status_code属性;
- 查看响应头:使用header属性;
- 查看响应内容:使用content或text属性;
下面我们通过写一个脚本,实际的使用一下requests这个库。
第一个脚本
第一个例子,我们使用requests库对上一篇介绍的HTTP请求和响应测试网站www.httpbin.org的/ip路径进行一个GET请求。
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924142842599-1655941257.png)
运行脚本,结果返回和浏览器上打开的结果一致的信息:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924142901052-281215850.png)
我们再来访问一下httpbin.org的跳转重定向链接:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924142923710-830525497.png)
这个链接会跳转到example.com的网站上。在这里,我们使用params参数来传递重定向的值:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924142949559-992288705.png)
返回了200状态码,表示请求成功:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924143010015-895945256.png)
我们可以再通过requests来看看头域的信息:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924143037446-586535794.png)
结果返回了:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924143052846-200458186.png)
设置请求头域
默认情况下,requests会使用自己的请求头,但是我们可以修改它。
比如:
- 自定义一个头域;
- 篡改我们的浏览器标识;
- 更改host头;
- 篡改任何的头域;
httpbin.org提供了一个测试http头域的工具:/headers:
其会返回客户端的请求头。我们直接使用requests.get请求一下,看看返回的结果:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924143130482-1116339280.png)
可以看到,在默认请求下,requests的浏览器标识为“python-requests/2.18.2”,接受所有类型的响应:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924143159667-1448193947.png)
下面,我们使用requests请求方法中的headers属性,将我们的请求头域修改一下,浏览器标识改为Iphone X:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924143216829-1894781879.png)
结果我们的浏览器标识成功改成了Iphone X :
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924143235377-1065790835.png)
提交POST表单
在Web渗透测试之中,表单是测试的一个重点。有表单的地方就有输入,有输入的地方就会与服务器进行交互,像经典的SQL注入多数情况下就是通过在输入框中构造SQL语句来达到入侵的效果。
在requests中,我们通过post()方法来进行POST请求,使用它的data属性来传输表单数据,同样是利用httpbin.org提供的post测试路径:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924143300405-1623299789.png)
看看返回的结果:
![](https://img2020.cnblogs.com/blog/2525040/202109/2525040-20210924143320346-1582785658.png)
表单数据中,是我们传输的name数据。
本篇内容就此结束,有错误的地方还望指正,有疑问的地方欢迎留言讨论。
感谢阅读!
文章版权所有:州的先生博客,转载必须保留出处及原文链接
原文地址:https://zmister.com/archives/177.html
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# coding:utf-8 import requests if __name__ == '__main__': # payload = {'url':'http://www.example.com'} ''' r = requests.get('http://www.httpbin.org/ip') print("状态码:",r.status_code) print("内容:", r.text) print("响应头域:") for i in r.headers.items(): print(i) ''' ''' r = requests.get('http://www.httpbin.org/headers') print("内容:", r.text) ''' ''' header = {'User-Agent':'Iphone X'} r = requests.get('http://www.httpbin.org/headers',headers=header) print("内容:", r.text) ''' r = requests.post('http://www.httpbin.org/post',data={'name':'zmister.com'}) print("内容:", r.text)