ZVulDrill靶场审计笔记
一、实验准备
环境: 虚拟机windows server 2019 、phpstudy 2018(php5.3+apache+mysql)。由于我这里的环境问题,需要更改lib.php中mysql_real_escape_string函数为mysql_escape_string函数。两个函数功能一致,前者需要接受的是一个连接句柄并根据当前字符集转义字符串。
工具: seay 源代码审计系统、NotePad–
二、ZVulDrill靶场审计
1、使用seay 源代码审计系统自动审计源码
打开seay 源代码审计系统,新建项目选择ZVulDrill靶场源码,开始自动审计
按照审计结果,逐一验证(自动审计不一定能扫描全,且不一定存在)
2、文件包含漏洞验证
审计结果显示about.php文件中可能存在文件包含漏洞
$f
变量通过GET方法获取,$f
变量直接将值传给include包含,中间没有任何过滤。尝试包含测试文件
成功包含,如果远程包含的话需要打开下面两个选项,这里默认allow_url_include是关闭的
3、反射型XSS漏洞验证
search.php中直接将GET方法获取的参数echo输出到页面,存在反射型XSS漏洞(这里还发现一个SQL注入,后面会分析)
在search参数构造XSS语句
成功弹窗
4、文件上传漏洞
这里文件上传没有做任何的限制
上传点在用户修改隔热恩信息更换头像位置
上传的文件保存在images文件夹,这里不会对文件重命名。也可以直接鼠标右键新标签打开图片获得上传文件位置
5、SQL注入
这里自动审计出来的几处可能存在SQL注入的地方其实是被引号包裹了而且经过了clean_input函数的过滤
会将特使符号转义,无法闭合引号
在search.php中,发现了一处变量未经过滤直接拼接到SQL语句中
成功注入得到数据信息
在logCheck.php中也发现了一处未经过滤直接传入SQL语句中的变量$name
这里存在SQL注入的是管理员登录的后台地址,普通用户的登录的地方输入变量被clean_input函数转义了特使符号
可以直接利用SQL注入登录免密登录(万能密码)
6、存储型XSS
- 留言处存在存储型XSS的较常见的一处场景。
这里提交留言到数据库的时候,会通过clean_input函数转义特殊符号但没有对相关字符进行过滤处理,被污染的数据会原样提交到数据库中
message.php在从数据库中取出数据显示在留言页面,但这里使用htmlspecialchars函数对显示内容做了html实体编码
因此这里不存在存储型XSS
虽然注册的用户名被转义了但是mysql_real_escape_string() /mysql_escape_string() 函数并不会转义<、>、/符号
XSS语句当作用户名写入数据库中,登录后用户名会原样显示在user.php页面中。造成存储型XSS
7、越权
在用户更改用户名的时候是根据POST方法传入的id参数来更改对应的用户名
只要我们更改用户名时,给该id值就能越权给他他人用户名
登录用户a修改test用户的用户名为testa
先更改a用户的用户名,让后抓包给该id值为test用户的id值
成功修改
7、CSRF
这里更改用户名和更改密码没有对用户提交请求的Referer或token做验证,更重要的是修改密码不需要知道原密码。存在CSRF漏洞
抓到修改密码的包(这里是以GET方法提交的),直接利用burp生成CSRF利用的POC
诱导用户访问这个poc链接(我这里burp监听的是8081端口)
点击按钮即可。修改成功
补充:
登录没有验证码,也没有限制登录失败次数,存在暴力破解漏洞。此外还有目录遍历漏洞。