《web安全深度剖析》书籍学习笔记04day
Do one thing at a time, and do well.
一次只做一件事,做到最好!
SQL注入(1)
SQL注入形成原因:就是用户输入被sql解释器执行。
SQL注入类型:数字型和字符型
数字型
定义:当输入的参数为整数型时,如:ID、年龄、页码等,如果有SQL注入漏洞,则可以认为是数字型注入
举例:假如URL为http://www.test.com/test.php?id=8
SQL语句应当为:select * from table where id=8
测试步骤:
1.http://www.test.com/test.php?id=8'
SQL语句将为: select * from table where id=8'
网站页面将出现异常,无法从数据库提取数据
2.http://www.test.com/test.php?id=8 and 1=1
sql语句:select * from table where id=8 and 1=1
网页反应不会出现异常,因为 1=1 为true
3.http://www.test.com/test.php? id=8 and 1=2
sql语句:select * from table where id=8 and 1=2
网页将出现错误,因为 1=2 为flase 始终为假。
为什么用and 1=1正常 and 1=2报错来判断是否存在SQL注入
因为如果存在SQL注入,那么and就是和的意思,1=1是一个恒等式,然后因为原本能够查出数据,那么两个真就是True,但是1=2肯定是不可能的,这里就会返回一个False,然后因为和必须两个真才返回True,所以这里拼接就不成立返回False.
如果以上步骤满足则代表网站存在SQL注入漏洞
这种数字类型注入最多出现在ASP、PHP等弱类型语言中,弱类型语言会自动推导变量类型,PHP会自动推导变量id为int整数型,那么id =8 and 1=1 ,则会推导为string字符串类型,这是弱类型语言的特性。对于java、C#强类型语言,如果试图将一个字符串转为int类型,则会抛出异常,无法执行,所以遇到这类型语言可以尽量避开。
字符型注入
定义:当输入的参数为字符串时,称为字符型。
数字型、字符型注入区别:数字型不需要单引号,字符型需要单引号闭合。
数字型sql语句
select * from table where id = 8
字符型sql语句
select * from table where username='admin'
字符型注入关键在于如何闭合SQL语句及注释多余的代码。
查询内容为字符串时,SQL代码如下:
select * from table where username = 'admin'
如果尝试用直接用admin 1=1注入时
sql语句:select * from table where username = 'admin 1=1 '
结果将被直接作为字符串进行查询。
在注入语句进行闭合并注释admin‘ and 1=1 --+
sql语句: select * from table where username = 'admin' and 1=1 --+'
后面的注入语句也就可以被继续执行了
字符型注入,都要进行闭合单引号及注释多余的代码。
举例:
update语句: update person set username = 'username',set password='password' wher id =1
利用单引号闭合注入该语句:update person set username = 'username' ,set password = ''+(select@@version)+'' where id=1
注:sql注入语句中update 为修改语句
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
注:数据不同,字符串连接字符也不同,如SQL Server 连接符为“+”,Oracle连接“||”,mysql连接符为空格。
SQL注入分类
Cookie注入、POST注入、盲注、延时注入,统统可以为类上面两个类型,他们与上面两个类型本质都是在数据库查询数据时,使用字符串或者数字进行参数输入,他们的区别只在于,展现形式、展现的位置不同罢了。
POST注入:注入字段在POST数据中
Cookie注入:注入字段在Cookie数据中
延时注入:使用数据库延时特性注入
搜索注入:注入处为搜索地点
base64注入:注入字符串需要经过base64
常见数据注入
大多数数据库,SQL注入原理相似,但其中也存在很多差异,包括语法、函数的不同。所以针对不同的数据库,思路方法也要不一样。
对于数据库的注入,主要还是利用数据库获取数据与权限。利用方式也可以分为以下几大类:
查询数据
读写文件
执行命令
对于注入者来说,无论任何数据,无非都是在做三件事,只不过不同的数据库注入的sql语句不一样罢了。
声明:本人原创,未经允许,禁止转载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下