python中的eval()函数是用来计算所有数学的代数计算式,这样可以很快得到复杂代数式的结果。
例如:383660347*375705824-1796136991-1726898699*1899420019*1700897586*642532444-2073968155+592065376+1145982995+178738053=
>>>eval('383660347*375705824-1796136991-1726898699*1899420019*1700897586*642532444-2073968155+592065376+1145982995+178738053') >>>-3584768377397114585976975169312809498
这里记录一个bugkuctf的web题:秋名山老司机
进去发现是计算一个很复杂的代数式,且要求2秒,那么肯定要用脚本来跑
且刷新了几下发现要用post来提交答案,答案的值赋值给value。
那么直接上代码,先正则匹配出里面的代数式,然后再用eval进行求和,将结果赋值给value,然后再进行post发包,data就是value和它的值,然后输出响应包的数据。
import re import requests headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'} url='http://123.206.87.240:8002/qiumingshan/' s=requests.session() response=s.get(url,headers=headers) res_conte=re.search(r'(\d+[\+\-\*])+\d+',response.content.decode()) num=eval(res_conte.group()) datas={'value': num} response_post=s.post(url,headers=headers,data=datas) print(response_post.content.decode())
flag就出来了!
其实很多ctf赛事都要考察python的计算能力,也就要用到eval()等这些计算函数。