人过留名,雁过留声
人生天地间,凡有大动静处
必有猪头
环境准备
Phpstudy
Sublime
Firefox
Webug4.0源码
https://github.com/wangai3176/webug4.0
环境搭建
- 把 Webug4.0 源码放在 Phpstudy 的 WWW 目录下。
- 按照 Webug4.0 源码中 sql 文件夹下的 .sql 文件名创建三个数据库,导入 .sql 文件的时候注意将字符集编码选定为 utf8。
- 修改data目录下的dbconfig和dbconn文件,修改为自己的数据库账号密码和数据库名。
- 建议将源码文件夹名修改为 pt_env ,因为在有些文件下有重定向地址,如
/control/auth_cross/cross_auth_passwd.php文件下的一段代码,意思为重定向到 /pt_env/control/auth_cross/ 路径下的 cross_auth_passwd2.php 文件,如果源码的文件夹命名为其他,那将会重定向错误。如果要改下面重定向的地址也可,但是会有多处改动,很麻烦。
header("Location:/pt_env/control/auth_cross/cross_auth_passwd2.php?id={$id}")
越权漏洞靶场(ID:22)
网站的登录账号/密码:admin/admin
22号靶场(cross_auth_passwd.php)
源码分析
POST 提交参数
参数没有过滤
单引号引用参数并直接拼接 SQL 语句
根据查询的结果,如果存在该账户则获取该账户条目对应的 id,并拼接在 URL 后面。
存在明显的 SQL 注入漏洞
漏洞利用
使用万能钥匙登录
账号/密码:' or 1=1 -- /111
(ps:注释符后面要接空格,密码可以随意,因为会被注释掉,但不能为空,因为源码有验证账号和密码不为空。)
登录进来之后是一个修改密码界面,这里还可以注意到 URL 中的 id=2,这是由于之前用万能密码遍历到最后一个账户登录的结果。在这里可以做一个大胆的猜想,修改 id 的值应该是可以直接修改其他账户的密码的。
为了更直观地验证这一猜想,来看一下数据库和 cross_auth_passwd2.php 的源码。
数据库
id=1 是管理员账号/密码
源码分析(cross_auth_passwd2.php)
获取 id/oldPassword/newPassword 三个参数,且不能为空
实际上没有对 oldPassword 的真实性做一个验证,且真正利用到的参数只有 newPassword 和 id
漏洞利用
直接修改 URL 里面的 id 值就可以修改管理员的密码。
① 方法1
直接在 URL 地址栏修改,刷新一下页面后就能进行管理员密码的修改
② 方法2
打开 f12 开发者工具,编辑和重发消息头。
这样,管理员的密码就被修改成功。
猪头
2020.2.7