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在第三列

抄的另一种解法:

相关推荐
半夏知半秋2 小时前
skynet-socket.lua源码分析
服务器·开发语言·学习·架构·lua
小白银子2 小时前
零基础从头教学Linux(Day 45)
linux·运维·junit·openresty
半梦半醒*4 小时前
nginx反向代理和负载均衡
linux·运维·nginx·centos·tomcat·负载均衡
喜欢你,还有大家4 小时前
集群的概述和分类和负载均衡集群
运维·负载均衡
liu****4 小时前
负载均衡式的在线OJ项目编写(六)
运维·c++·负载均衡·个人开发
swaveye90605 小时前
轻量服务器创建mysql,并配置远程连接
服务器·mysql·adb
Elastic 中国社区官方博客6 小时前
CI/CD 流水线与 agentic AI:如何创建自我纠正的 monorepos
大数据·运维·数据库·人工智能·搜索引擎·ci/cd·全文检索
A-刘晨阳6 小时前
Linux安装centos8及基础配置
linux·运维·服务器·操作系统·centos8
恒雨田6 小时前
解决 jenkins 用户 SSH 连接目标服务器时的 Permission denied 问题
运维·ssh·jenkins
迎風吹頭髮6 小时前
UNIX下C语言编程与实践14-UNIX 文件系统格式化:磁盘分区与文件系统创建原理
运维·c语言·unix