1.首先查找注入点,不光是id=数字的可以注入,包括id=字符串的也有可能能够进行注入。
2.探测注入可以使用单引号、双引号、and 1=1、and 1=2进行注入点的探测。
3.在网页报错了的时候可以大概推断该链接可能存在注入点。接下来需要走的流程是查看当前MySQL中有多少个数据库,然后查看指定的数据库中有多少表,哪个表是我们所需要的,表中的字段都是什么内容。
4.在报错的基础上需要使SQL查询语句后面的部分的布尔值为1,所以需要写一个and 1=1,然后接着进行数据库中的列判断,使用order by可以进行列数的判断,从1开始,直至网站报错,报错说明数据库中的表内没有该列。
5.接下来需要判断所得到的列数中是由哪一列显示的数据,则需要使union select进行查询,具体办法是在使原语句报错的情况下才能够使用union select进行下一步的查询,例如:id=1’ union select 1,2,3,4 #,这里以4列为例,不要忘记将后续语句注释掉。
6.查看当前数据只需要使用database(),函数就可以了,要查看其它数据库的话就不得不提到MySQL中的information_schema库了,该库中的schemata表中记录了MySQL中的所有数据库的名称,所以可以查询该库中的内容得到MySQL中的所有库名。例如:1’ union select 1,2,schema_name,4 from information_schema.schemata limit 0,1 #进行逐字逐句的查询。这里有一个坑,在部分网站中是允许使用该语句的limit 0,8进行8个数据库的查询并且直接显示到网页上的,但是也有很多网站是不允许这样操作的,所以要想查询所有数据库的方法就有两种,第一种是使用limit 0,1 limit 1,2进行逐个的查询,但是这样笔者觉得非常费时间,有时候容易自己查完自己就忘了。所以引申出下一种办法,group_concat是一个好东西,他可以将不同字段的内容连接在一起从而打破网站的限制,可以免于limit的麻烦,所以推荐使用:1’ union select 1,2,group_concat(schema_name),4 from information_schema.schemata #进行查询
7.在得到我们想要进行查询的数据库名后,开始进行该数据库中的表的查询。information_schema库中的table表中含有各个数据库中的表的信息,所以我们可以从这里入手去查找其他数据库中标的信息。例如1’ union select 1,table_name,3,4 from information_schema.tables where table_schema=‘dedecms’ limit 0,1 #等等,与上文相同,若出现不能完全显示的情况,可以使用group_concat函数进行字符连接。
8.在我们已经了解到表的相关信息后就应该对目标表的字段进行获取,此时利用的仍然是information_schema库中的表,该表的名为columns。例如: 1’ union select 1,column_name,3,4 from information_schema.columns where table_schema=‘dedecms’ and table_name=‘dede_admin’ limit 0,1 #。与上文相同,若不能爆出完整的字段请使用group_concat函数对所查询的数据进行包裹。
9.在我们知道我们所想要查询的库名,表名之后,我们就可以对目标数据进行查询了,具体方法如下:1’ union select 1,2,group(id,name,password,status),4 from dedecms.dede_admin #。
注入过程就到这里了,我确实要被自己打自闭了,不想做脚本小子。