Bugku-秋名山车神
目录
题目描述
要在2秒内计算出表达式,并post提交
时间:2023年9月9日
类型:Web 正则匹配 cookie获取
WP
提取信息
多刷新几次发现有不同页面。使用bp抓包找到规律
页面1
Cookie中只有一个PHPSESSID
页面2
cookie中多了一个 Timeout=alive
阅读页面2信息可得:我们需要用POST提交一个参数名为value 值为这个表达式的结果1535374328+207288372-16885296531546521933-1179470093375750599*1032048184-962316762-1406938828-1119101745+1964143764=
根据所得信息编写简易脚本
import re
import requests
URL = "http://114.67.175.224:11503/"
s = requests.Session() #创建会话
res = s.get(URL) #获取cookie
res = s.post(URL, ) #使用获取到的cookie,得到页面2
DATA = {
"value": eval(re.search(r"Give me value post about (.*?)=\?", res.text, re.S).group(1)) #计算表达式
}
res = s.post(URL, data=DATA) #提交获取response
print(res.content.decode()) #获取flag
得到flag
flag{4ec655100d6a9e1e4e7d159de8738616}
总结
- 有的题比较坑,找不到啥信息就多刷新几次看看
参考资料
eval()
用法: eval(expression, globals=None, locals=None)
- expression:这个参数是一个字符串,,python会使用globals字典和locals字典作为全局和局部的命名空间,将expression当做一个python表达式(从技术上讲,是一个条件列表)进行解析和计算。
- globals :这个参数管控的是一个全局的命名空间,也就是我们在计算表达式的时候可以使用全局的命名空间中的函数,如果这个参数被提供了,并且没有提供自定义的__builtins__,那么会将当前环境中的__builtins__拷贝到自己提供的globals里,然后才会进行计算。关于__builtins__,它是python的内建模块,也就是python自带的模块,不需要我们import就可以使用的,例如我们平时使用的int、str、abs等都在这个模块中。关于它的说明可以参照这篇文章:点击打开链接。如果globals没有被提供,则使用python的全局命名空间。
- locals:这个参数管控的是一个局部的命名空间,和globals类似,不过当它和globals中有重复的部分时,locals里的定义会覆盖掉globals中的,也就是当globals和locals中有冲突的部分时,locals说了算,它有决定权,以它的为准。如果locals没有被 提供的话,则默认为globals。
a=10;
print(eval("a+1")) #10
输出为 10 ,eval()可以识别变量a为10
a=10;
g={'a':4}
print(eval("a+1",g)) #5
输出为 5 ,eval()因为我们指定了g作为全局变量,所以会优先取字典g中寻找
a=10
b=20
c=30
g={'a':6,'b':8}
t={'b':100,'c':10}
print(eval('a+b+c',g,t))
输出为 116,eval()由此可见变量的优先级 字典t > 字典g > 外部定义变量