CTF之Bugku 秋名山老司机+python脚本代码解析

第一次写python脚本,之前完全不懂脚本运行的原理,寒假学了javaWEB才有点明白,有些脚本的题也可以做了。

先贴上这道题的脚本:

import requests
import re
url='http://123.206.87.240:8002/qiumingshan/'
r = requests.session()
requestpage = r.get(url)
ans = re.findall('
(.*?)=?;
'
, requestpage.text) ans="".join(ans) ans=ans[:-2] post=eval(ans) data={'value':post} flag=r.post(url, data=data) print(flag.text)

用到的知识挺多,慢慢来。

import requests

可以先看看这个博客,里面讲到了下面要用的一些方法。
requests库python好像没有自带,要去命令行用pip下载(我是手动命令下的)
直接win+r输入cmd
在输入pip install requests,等下就好了

这个库里面我们用到了session(),get(),post()

r = requests.session()

“r”这个对象能跨请求的保留某些参数,比如cookie
cookie就是保留你当前会话信息的一个对象

requestpage = r.get(url)

产生一个请求资源的对象,能更方便地的获取url里的资源
url就是上面的网址
这个==get()==方法还可以带其他参数,这里用不到就不提了,可以百度下

data={‘value’:post}
flag=r.post(url, data=data)

开始的链接里也有讲到,这是将我们的值提交到网页中去的一个方法
一般网页提交的方式是postget
这里就是用到了post方法
至于这个方法里的参数大家可以好好看看上面的链接

import re

接下来是re
这个库里一般是用来匹配文字,这也是为什么我们能用脚本计算这个算式的原因。

ans = re.findall('
(.*?)=?;
'
, requestpage.text)

这里用到了re库里的==findall()==方法
第一个参数是正则表达式,用来匹配网页中要计算的那个式子
简单来说,第一个参数这么写就能获取那串式子

第二个参数requestpage.text,是将我们请求到的资源变成字符串的形式。
具体可以看这个博客
然后以列表的形式返回到变量ans里面

ans="".join(ans)
ans=ans[:-2]

第一句是把ans从列表的形式转化为字符串的形式
第二句是去掉字符串后两个字符,再重新赋值给ans
最后两个字符是 “=?”
第二句不知道为什么这么写的同学可以看看这个博客

post=eval(ans)

这里用到了==eval()==函数
它可以将我们刚刚得到的式子计算出结果,至于为什么可以看看这个博客

最后r会返回一个flag
打印出来就得到flag啦

你可能感兴趣的:(CTF)