哈哈哈,那个菜逼回来了,今天给大家讲讲最近审的一个CMS,大佬勿喷
前奏
俗话说的好:“工欲善其事,必先利其器”,下面我理了一下这次审计的思路
1:查看目录结构,了解大体的框架(主要是为了查看是否有框架加入,如:TP、WeiPHP等)
2:查看引入文件,找到重要文件,如过滤函数、变量集中定义文件等
3:访问特定功能点,进行特定代码审计,也就是说一个功能点看一段代码(这里如果出现了过滤函数,基本上可以在2中找到)
审计之旅
先打开首页看看,看到有登陆框和注册框,那就先从注册框开始审计
注册框SQL注入
打开注册框界面
现在的问题是怎么找到对应的代码,这里看到URL中有member和register,使用Seay全局搜索
观察发现,m参数对应的值应该是文件夹,f参数对应的值就是函数了
进入member目录的index.php看看,果然存在register()函数
再往下看看,发现register_save()函数通过safe_html()函数过滤以后,直接将数据插入到数据库中
而safe_html()正是上面从引入文件中找到的过滤函数文件中定义的一个函数,仔细观察发现,这里可以用大小写或者双写进行绕过
接下来验证一下,在注册框的用户名中加入',看结果如何
芜湖,报错了,直接用payload打它,嘿嘿嘿
payload:'or updatexml(1,concat(0x7e,(selEct concat(username,password) frOm c_admin),0x7e),1)#
登录框任意URL跳转
注册过后,就要进行登录了,先进入登陆框看看,观察到URL中带有gourl参数,可能有跳转
去看看对应的源码,发现这里接收了gourl参数后,判断是否有用户后,没有进行参数过滤,直接跳转gourl对应的值
那么这里我将gourl值改为http://www.baidu.com,然后登录,看是否跳转
普通用户登录界面Cookie注入
用刚才注册的用户登录后,进行漏洞挖掘,观察到这里有个收件箱,点进去看看功能
有收件箱、发件箱、写信息三个功能
查看收件箱功能相关代码,发现这里COOKIE的member_user参数,也是只经过safe_html函数过滤,所以可以直接注入
将包保存为txt文件,用sqlmap跑
普通用户登录界面存储XSS
点击资料管理,观察姓名处,看到姓名的值是直接插在value属性值中
查看源代码,芜湖,发现没有进行过滤,那就直接插啊
payload:"><script>alert(1)</script>
其他的功能点,要么不能用,要么洞都是跟上面一样,普通用户登录界面就到这了
后台登录界面文件上传+文件包含=Getshell
登录后台后,找到上传点
查看相关代码,发现是白名单机制,所以如果想要Getshell,需要配合文件包含或者解析漏洞
Seay全局搜索include,寻找文件包含漏洞
打开/api/index.php,查看代码,芜湖,没有进行过滤,直接调用,舒服了(这里默认后缀为.php)
在同名目录下创建phpinfo.php,访问http://127.0.0.1/api/index.php?c=phpinfo,进行测试,OK!!!
首先上传图片马
菜刀直接配合%00截断,进行getshell
http://127.0.0.1/index.php?c=../uploadfile/image/20201204/202012041021240.jpg%00
小结
这个CMS审计就告一段落了(PS:主要被大佬们都日穿了,呜呜呜)