すのはら荘春原庄的雪

《web安全深度剖析》书籍学习笔记04day

Toretto·2022-02-12 11:43·77 次阅读

《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语句不一样罢了。

 声明:本人原创,未经允许,禁止转载

posted @   水墨ye  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示