代码审计初试-对zvuldrill漏洞靶场的代码审计(一)

一.zvuldrill靶场搭建

靶场地址:https://github.com/710leo/ZVulDrill
按照上面的要求需要创建一个名为zvuldrill的数据库,在将sys文件夹下的zvuldrill.sql导入到新建数据库中。

创建完成之后,在浏览器打开:http://127.0.0.1/ZVulDrill/ 即可访问

二.后台登录功能万能密码绕过

采用正向审计的方法,即先找到用户的可控输入位置,在定位到危险函数。
首先用rips代码审计工具进行scan,找到用户可控输入


找到用户可控输入$_POST[pass],发现它存在于logCheck.php中,用seay代码审计工具打开

所以我们可以直接构造万能密码

1
2
3
' or 1 or '1
' or 1 #
' or 1 --

直接不用输入密码就可以绕过检测机制
我们来验证一下
用Navicat数据库工具打开本地的数据库

将logCheck.php中的改造一下
1
SELECT * FROM admin WHERE admin_name = 'admin' or '1'AND admin_pass = SHA('$pass')

复制到数据库命令行中

登录网站:http://127.0.0.1/ZVulDrill/admin/login.php


根据seay自带的mysql检测工具可以看到,我们进行的数据库操作

三.前台搜索功能sql注入

继续看rips扫描的结果,发现有个$_GET[search]参数用户可控

用seay审计工具打开

发现用户传入的search参数,没有进行任何过滤就直接加入了sql语句中,这容易造成搜索型sql注入。
验证,打开数据库命令行,先查看数据库有几列

用order by语句,发现为5时会报错,4时显示正常,所以这个数据库的列是4。
所以我们打开admin的数据表,查看对应的列名。
可以用union select联合查询语句构造payload,直接爆出管理员的密码。

1
SELECT * FROM comment WHERE comment_text LIKE '%%' union select admin_id,admin_name,admin_pass,4 from admin;


用过构造sql注入语句
1
1%' union select 1,2,admin_pass,4 from admin#

在网页中尝试 发现可以爆出管理员的密码

在这个搜索页面中不光有sql注入漏洞,xss也同样存在,因为这个页面对用户输入的没有进行过滤。
构造xss payload:

1
<script>alert(/xss/)</script>

完成弹框

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×