黄石市网站建设_网站建设公司_外包开发_seo优化
2025/12/18 12:34:51 网站建设 项目流程

和web9中一样的登录界面,但是之前默认的用户名“admin”没有了

随便输入账号密码,没有回显

尝试使用万能密码 admin ' or 1=1,发现SQL错误回显,应该是SQL注入

不小心点到取消,竟然触发下载了一个index.phps

返回检查源码,才发现了不一样,点击取消按钮会触发“cancel()”这个函数,这个函数应该是会下载源文件。(之前检查源代码的时候不够仔细

使用记事本打开查看index.phps文件

分析代码:

1. 对用户名和密码分别进行过滤,如果过滤前后的字符串长度不一致,则报错并退出。 2. 然后执行SQL查询:select * from user where username = '$username' 3. 如果查询结果有数据,则逐行取出,并比较密码(使用弱类型比较==),如果相等则输出flag。 4. 过滤机制:`replaceSpecialChar()`函数会删除SQL关键字(select, from, where, join, sleep, and, union, 逗号)和空格 5. 长度检查:如果过滤前后字符串长度变化,会终止执行(die("sql inject error")) 6. 登录逻辑: - 先查询用户名是否存在 - 如果存在,逐行比较密码是否相等(`==`弱类型比较) - 密码匹配则输出flag

PHP端的有password == $row['password']验证,这意味着我们必须让SQL查询返回一行我们“已知”密码的数据。

但是我们可以利用WITH ROLLUP 绕过密码验证,这是应对“PHP层验证密码”最经典且有效的绕过方式。

group by password with rollup 会产生一行 password 为 NULL 的数据,注意使用使用/**/绕过空格,构造payload如下:

​#注意密码设置为空 admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup/**/limit/**/1/**/offset/**/1# ​

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询