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

抄的另一种解法:

相关推荐
ac.char1 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
繁星¹⁸⁹⁵2 小时前
通过update-alternatives可以实现cuda的多版本切换
服务器
中科米堆2 小时前
中科米堆CASAIM自动化三维测量设备测量汽车壳体直径尺寸
运维·自动化·汽车·视觉检测
缘华工业智维3 小时前
CNN 在故障诊断中的应用:原理、案例与优势
大数据·运维·cnn
开航母的李大4 小时前
软件系统运维常见问题
运维·服务器·系统架构·运维开发
华强笔记6 小时前
Linux内存管理系统性总结
linux·运维·网络
拾心216 小时前
【运维进阶】Ansible 角色管理
运维·ansible
phoenix09817 小时前
ansible部署lnmp-allinone
linux·运维·ansible
phoenix09818 小时前
Linux入门DAY27
linux·运维·服务器
xw59 小时前
免费的个人网站托管-PinMe篇
服务器·前端