Bugku CTF 秋名山老司机 writeup

Bugku CTF 秋名山老司机 writeup

Bugku CTF 秋名山老司机 writeup_第1张图片
image.png

本题要求计算响应内容中的表达式并用 POST 请求返回结果,实质还是快速反弹包含正确信息的 POST 请求,详情可参考详解 CTF Web 中的快速反弹 POST 请求

先放题解的 Python 脚本,后再解析:

import requests
import re
url = 'http://120.24.86.145:8002/qiumingshan/'
s = requests.Session()
source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)
post = {'value': result}
print(s.post(url, data = post).text)

1、有关 requests 的部分此处不细讲,唯一要注意必须利用会话对象 Session(),否则提交结果的时候,页面又重新生成一个新的表达式,结果自然错误。
2、第 6 行是利用正则表达式截取响应内容中的算术表达式。首先引入 re 模块,其次用 search() 匹配算术表达式,匹配成功后用 group() 返回算术表达式的字符串。
3、第 7 行在获得算术表达式的字符串后,直接利用 Python 的內建方法 eval() 来计算出结果,简单、暴力、快捷。

执行完上述脚本,就有一定的概率可以获得 flag 了:

Bugku CTF 秋名山老司机 writeup_第2张图片
Code
Bugku CTF 秋名山老司机 writeup_第3张图片
Result

为什么说是一定概率呢?读者们自行尝试便知,据我观察,当计算结果超出一定长度时,服务器就不响应了。在此猜想:可能客户端 Python 脚本计算错误,也可能服务器端 PHP 脚本对大数计算有误差,还可能在 POST 请求过程中令大整数发生改变。至于是哪种,还请高手解答。

你可能感兴趣的:(Bugku CTF 秋名山老司机 writeup)