BUU的SUCTF 2019 Easysql

呜呜呜~~ ~自己已经好久好久都没有做题和更新博客辽
加上这次的疫情,感jio整个人都要躺发霉辽!!!
下午闲着没事终于开始了做题
打开题目发现是这样的一个页面
BUU的SUCTF 2019 Easysql_第1张图片
第一步还是老样子 先看看源码是什么样子的 应该是发现不了什么东西
BUU的SUCTF 2019 Easysql_第2张图片
我们发现是post 方法传参
我们可以发现

1;show databases;   #查库
1;show tables;      #查表

BUU的SUCTF 2019 Easysql_第3张图片
可以发现只有一个Flag表,看了大佬的blog发现了语句长度限制了40位,所以想要像强网一样的改表面和预编译的操作都不可以了。并且过滤了from等等(fuzz下就好了,这次放出了select)后来知道是这样可以出

select $_GET['query'] || flag from flag

哈哈哈哈 大佬自己都懵逼辽~~~
BUU的SUCTF 2019 Easysql_第4张图片
然后又看了另一个大佬的 easysql 题解
关键的查询代码是 select $post['query']||flag from Flag

输入 1 或 0 查询结果如图,要想办法让 ||不是逻辑或
官方给的 payload 是1;set sql_mode=PIPES_AS_CONCAT;select 1

拼接一下就是select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag

关于 sql_mode : 它定义了 MySQL 应支持的 SQL 语法,以及应该在数据上执行何种确认检查,其中的PIPES_AS_CONCAT||视为字符串的连接操作符而非 “或” 运算符

关于 sql_mode 更多可以查看这个链接 : MySQL sql_mode 说明

还有就是这个模式下进行查询的时候,使用字母连接会报错,使用数字连接才会查询出数据,因为这个||相当于是将 select 1select flag from flag 的结果拼接在一起

hhhh然后就是我上面刚刚求解的啦

关于非预期解 : *,1

拼接一下,不难理解 :select *,1||flag from Flag

等同于select *,1 from Flag

你可能感兴趣的:(BUU,web安全,SQL注入)