小白最近想学习一下Python但是一直看文档也不是个办法,于是决定去做一下题来快速地提升一下自己:
题目来源:实验吧天下武功为快不破。。BUGKU中的秋名山老司机
需要模块:requests
第一步:在windows上安装requests模块。首先cmd进入python文件夹,在cd进入scripts文件夹,然后再输入 pip install requests//等待安装完成,之后就可以用这个模块了
在写脚本之前我们先要知道如何发送请求到服务器,然后收到进行解析的
GET请求:test=requests.get(‘https://www.baidu.com’)//以百度为例,可能不会成功
POST请求:test=requests.post(‘https://www.baidu.com’)
查看请求的请求头:test.requests.headers//包括很多,如ua…等等都可以自己设置
查看某一请求头的属性:test.requests.headers[‘Accept-Encoding’]//等等、
查看响应头:test.headers//
查看响应头的某一属性:test.headers[‘status’]////等等。。。。。
查看服务器返回内容:test.text
传递GET参数:
GET请求参数:
先保存要传递的值:
如果为username与password的话
users={‘username’:‘Mikasa’,‘password’:‘Mikasa’}//用户名以及密码
传输时有test.requests.get(‘https://www.baidu.com’,params=users)//传递带参数的GET请求
//这里面假设可以传值的,所以你发送到百度后可能并不会有作用2333
看看吧!这样就可以传递了值!!!是不是很好玩,不要急,接下来我们还要分析一下POST的请求,以及接受如何服务器返回的值,然后再将它进行处理!通过对其进行一些处理再重新发送可得我们想要的信息!!!
POST传参
这个跟GET型的是差不多的只不过最后一句的test.requests.get(‘https://www.baidu.com’,params=users)
改为了test.requests.get(‘https://www.baidu.com’,data=users)
仅仅是将params改为了data!!!
传递Cookie:
一样。。。。
只是将data变为了cookies!!!
保持session()的传递
创建session:
test.requests.session()
接下来以一些实例为例:
首先是实验吧中的天下武功唯快不破:
于是判定可能需要写脚本让发送到服务端(POST发送key)。。
burp抓包发现
果然啊。。。。还是需要写脚本啊,其实这题较简单我们只需要知道一些简单的知识就可以做了:
import requests#添加一下requests模块
import base64#添加base64模块
test=requests.get('http://ctf5.shiyanbar.com/web/10/10.php')#发送一个get请求
print(test.headers)#查看一下响应头
Mikasa=test.headers['FLAG']#获得响应头里的FLAG端
print(Mikasa)#打印看一下!!!
Mikasa=base64.b64decode(Mikasa)#因为是base64编码,所以需要解码
print(Mikasa)#打印一下解码后的FLAG值
ko=Mikasa.split(':')[1]#以':'分割,然后
print(ko)#打印一下切割后的FLAG值
hu={'key':ko}#设置字典,待以后以POST形式发送至服务端
boss=requests.post('http://ctf5.shiyanbar.com/web/10/10.php',data=hu)#发送一个POST请求
print(boss.text)#打印返回的内容就可以看到FLAG了QAQ
多试试就自然就通了233333,加油啊
BUGKU中的秋名山老司机:
题目简单明了。。。。就是让我们计算的。。。。
怎么说呢。。这题的思路比较简单,,,但是如何构造就需要引入一些模块了re(正则模块)
还有eval()–>将字符串当成代码执行
下面贴下网上的代码(自己不会做233):
import requests#请求模块
import re#正则模块
url = 'http://123.206.87.240:8002/qiumingshan/'#将要访问的url
s = requests.Session()#这一题必须要设置session(),不然可能会失败
source = s.get(url)#发送请求
print(source.text)#打印响应体的内容
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()#利用正则将我们需要的表达式提取出来
print(expression)#打印一下我们提取的表达式
result = eval(expression)#利用eval()来执行我们的表达式
post = {'value': result}#将结果做成字典
print(s.post(url, data = post).text)#以post方式发送我们包含获取到的value的值,在将响应的内容打印出来
总结:最近想学Python(感觉挺香的),想锻炼一下写脚本的能力,目前只能写出一些非常简单的脚本,希望接下来的几个星期能够好好的将Pyhon掌握
参考文章:链接找不到了。。。。。