BUU28 [GXYCTF2019]BabySQli1

常规万能密码,发现登不上去

过滤掉了or,=,当尝试了n种方法以后,最关键的是发现()居然也被过滤了

哈哈,那玩个淡,

再搜wp!!

当输入admin的时候,提示密码错误,这时候就说明用户名确实是admin

抓包发现有注释掉的内容,其实这个直接看源代码也行(但是又忘了这步)

这串代码先用base32解码,再用base64解码(菜还是得多练)

二者区别:

  • Base64
    • Base64 编码使用的字符集包含 A - Za - z0 - 9 以及 +/ 这 64 个字符。当编码的数据长度不是 3 的倍数时,会用 = 作为填充字符。
    • 例如,对字符串 "hello" 进行 Base64 编码后得到 "aGVsbG8=",其中可以看到编码结果中包含了字符集内的字母、数字以及填充字符 =。【两个等号也是它的标志】
  • Base32
    • Base32 编码使用的字符集是 A - Z2 - 7 这 32 个字符。同样,当编码的数据长度不是 5 的倍数时,也会用 = 作为填充字符。通常不区分大小写
    • 比如,对字符串 "hello" 进行 Base32 编码后得到 "NBSWY3DP",编码结果只包含字符集内的大写字母和部分数字。

表有三列:

错误查询方式:1' and select 1,2,3#

在这个拼接后的语句中,and 关键字后面紧接着 select,这不符合 SQL 的语法规则。在 SQL 里,and 是用于连接条件表达式的逻辑运算符,而 select 是用于开始一个查询的关键字,它们不能这样直接组合在一起,所以会导致语法错误。

正确查询: 1' union select 1,2,3#

如果SQL后台的代码长这样:

sql 复制代码
SELECT * FROM users WHERE name = '$name' AND pw = '$pw';

那么注入以后就是:

sql 复制代码
SELECT * FROM users WHERE name = '1' union select 1,'admin','47bce5c74f589f4867dbd57e9ca9f808'#' AND pw = 'aaa';

UNION 用于将两个或多个 SELECT 语句的结果集合并成一个结果集。要使用union,必须要使每个 SELECT 语句的列数相同。

users 表的列数为 3 且数据类型兼容,注入的 SELECT 语句会与原 SELECT 语句的结果集合并。select 1,'admin','47bce5c74f589f4867dbd57e9ca9f808' 会返回一行数据,其中第一列值为 1,第二列值为 'admin',第三列值为 '47bce5c74f589f4867dbd57e9ca9f808'。应用程序可能会将这行数据当作合法的用户记录进行处理,攻击者可能会以 admin 用户的身份登录系统。

union做查询时,查询的数据不存在,那么联合查询就会创建一个虚拟的数据存放在数据库中

源代码中也有暗示:admin在数据表第二列,password在第三列

抄的另一种解法:

相关推荐
林开落L24 分钟前
Linux深度探索:进程管理与系统架构
linux·运维·系统架构
XINO30 分钟前
防火墙双机热备实践
运维·安全
神洛华40 分钟前
Docker概念详解
运维·docker·容器
四川合睿达自动化控制工程有限公司41 分钟前
管道位移自动化监测方案
运维·自动化
007php00743 分钟前
Docker Compose 安装Elasticsearch8和kibana和mysql8和redis5 并重置密码的经验与总结
大数据·运维·elasticsearch·搜索引擎·docker·容器·jenkins
城南已开9791 小时前
vue部署到nginx服务器 启用gzip
服务器·vue.js·nginx
XINO1 小时前
企业常见安全事故排查思路
运维·安全
自由如风7092 小时前
Apache Atlas构建安装(Linux)
linux·运维·apache
烦躁的大鼻嘎2 小时前
【Linux】进程替换与自定义 Shell:原理与实战
linux·运维·服务器·ubuntu
gzgenius3 小时前
警惕阿里云中的yum update操作不当导致:/sbin/init被清空导致Linux无法正常启动
linux·服务器·阿里云