[Writeup] Bugku CTF 秋名山老司机 writeup

[复制链接]
查看12531 | 回复2 | 2018-2-7 18:20:17 | 显示全部楼层 |阅读模式
本帖最后由 wasrehpic 于 2018-12-8 13:04 编辑

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

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

[mw_shl_code=python,true]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)[/mw_shl_code]

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


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


bugku_qiuming_flag.png

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

使用道具 举报

wasrehpic | 2018-3-16 21:55:33 | 显示全部楼层
ggg123 发表于 2018-3-16 10:21
请问 py2.7 环境下,运行代码,跳出UnicodeEncodeError: 'gbk' codec can't encode character u'\xe5' in p ...

在我主机上 Python 2.7 与 Python 3.6 都能正常运行,根据错误提示,估计与你的运行环境的编码设置有关,去查查如何将你的运行环境编码从 'gbk' 设置为 'utf-8'。
回复

使用道具 举报

匿名 ggg123 | 2018-3-16 10:21:10 | 显示全部楼层
请问 py2.7 环境下,运行代码,跳出UnicodeEncodeError: 'gbk' codec can't encode character u'\xe5' in position 0: illegal multibyte sequence 这个错误,该怎么解决呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

匿名

0

主题

3

帖子

110

积分

小有名气

Rank: 3Rank: 3

积分
110