马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Hello. 于 2020-7-11 12:58 编辑
[b]
最近很忙,好久没更新啦,各位久等 [/b]
[b]正好最近打了个很好玩的靶,就记录下来让各位理理思路吧 ^_^[/b]
[b]
[/b]
[b]涉及知识点:代码审计,PHP 反序列化,木 马 构造
[/b]
[b]必需工具:清凉扫描,中国蚁剑或中国菜刀,Edit this cookie ,VS Code
那就~开始吧 ?
[/b]
一、知己知彼
1、不妨先打开看看网站有什么
2、模仿 Discuz ,首页只有登录和注册页面,那么进行注册、登录,继续观察功能。
3、登入之后发现了上传图片功能,但只能上传 png 格式图片(我像傻子一样用 jpg 试了很久)
4、可以看到图片正确地被上传到服务器了,但这个页面似乎没有任何其他功能了。
5、然后我们来用清凉扫描扫扫 敏 感 文件,发现 /www.tar.gz 下有内容,
那就下载下来解压看看,发现框架为 ThinkPHP 5 。
二、代码审计
1、用 VS Code 打开下载的文件夹,进行代码审计。
2、调试一下,发现 Register.php 第六十行和 Index.php 第四十行有断点。
3、再次调试审计,发现这两个点的作用如下:
Index.php :
访问大部分页面(例如 index )会调用 login_check 方法,
该方法会将传入的用户 Profile 反序列化,再到数据库中检查相关信息是否一致。
Register.php :
判断是否注册,未注册的调用 check (也就是 Index 的 index 方法),跳转到主页。
4、然后审一下其他代码,发现上传图片的主要逻辑在 Profile.php 里。
流程如下:
首先,检查是否登录,
然后,判断是否有文件,
接着,获取后缀是否为 png ,并解析图片,判断是否能正常打开,
最后,从临时文件拷贝到目标路径。
5、发现 Profile 有 _call 和 _get 两个魔法方法
分别表明在调用 不可调用方法 和 不可调用成员变量时 怎么办。
_get 从 except 里找
_call 调用自身的 name 成员变量 指代的变量 所指代的方法
到这里,我们已经有了大致思路
前面审计到了反序列化和析构函数的调用,
[b]所以结合这三点我们就可以操控 Profile 里的参数,控制其中的 upload_img 方法,
[/b]
[b]这样我们就能任意更改文件名,从图片这里突破
[/b]
四、运行脚本 && 置 cookie
1、运行脚本,指定一下路径,拿到 Poc
2、利用 Edit this cookie 置 cookie
[b]
3、刷新!(漂亮[/b])
五、连接图片马、夺旗
1、蚁剑连上,打开 /flag 文件。
2、成功夺旗!
看到这里,你们一定和沐沐一样激动,其实我也只是这个领域的菜鸟而已
[b]希望这次的实 战教程能给你们带来收获 ;
[/b]
[b]我一定会继续努力,把教程永永远远做下去 !
[/b]
声明:原创作品,如有侵权,请联系删除;如有雷同,纯属巧合
转载请注明出处及作者
统计: [b]
夺旗时间:3.4 小时
写作时间:2 天
整理时间:5 小时
字数:11555 字节
图片:21 张 [/b]
作者:曦沐
特别鸣谢:
所有支持【工欲善其事】&【安全时刻】系列以及安全实验室的朋友们!
写这篇文章耗费了大量心血,希望各位支持一下! 如果喜欢,记得收藏+评分吖,谢
如果有收获,别忘了评分
|