SQL注入(SQL lnjection Base)21

SQL注入(SQL lnjection Base)

sql-labs靶场的搭建

GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based.SQLI labs to test error based, Blind boolean based, Time based. - Audi-1/sqli-labshttps://github.com/Audi-1/sqli-labs.git

下载sql-labs的压缩包

打开小皮打开localhost的根目录

解压缩后将名字改为sqli方便一点

查询本地ip,打开小皮里面的apche和mysql

创建站点成功

再打开自己的本地ip后面跟后缀/sqli就可以进入页面

点击setup对数据库的连接

打开sqli里面的connection文件更改里面账号以及密码,改为自己当前数据库的账号密码

打开页面就可以显示以下内容

这里我们要选择php为5的版本才能打开

insert into USER

(

id,name,sex,birthday,job)

VALUES

(

1,'ss','male','2004','students')

;

insert into USER

(

id,name,sex,birthday,job)

VALUES

(

1,'ss','male','2004-12-02','students')

;

判断这是字符型,将id=1 and 1=2 判断为一整个整体

如果是数字型,这里我们输出id=2-1显示的结果应该是id=1的结果

这里是level2,我们先判断id=1的时候输出的name和password

这里是我们输出level2输出的数值

我们发现当输出id=2-1的时候输出的是id=1的值,所以我们判断这是数字型注入

数字型不需要闭合符号闭合,字符型需要闭合符号闭合

判断闭合符号

right syntax to use near ''2'' LIMIT 0,1' at line 1

其中我们分析有五个单引号,单引号的分布应该是' '2' ' LMIT 0.1'

也就是第一个和最后一个对应,2里面多了一个单引号

这里是我们输入1'后报错的内容

他是数字型函数所以没有闭合符号

改到less8来输入内容查看闭合信息

在后面加一个'号,发现没有值输出,说明出现错误,我们通过注释符号可以将其注释

注释符号分别有--+,#或%23

union联合注入

http://localhost/sqli/Less-1/?id=1' union select database()--+

联合注入需要查询前面的列是多少列

group by 二分法判断默认页面数据列数量

/?id=1' union select 1,2,3--+

这里的123只是为了保证数列等于三

查询回显位

http://192.168.153.1/sqli/Less-1/index.php?id=-1' union select 1,2,3--+

2号位和3号位可以回显

http://192.168.153.1/sqli/Less-1/index.php?id=-1' union select 1,2,database()--+

① version() -- 数据库版本

② user() -- 数据库用户

③ database() -- 当前所在数据库

④ current_user() -- 当前用户名

⑤ system_user() -- 系统用户名

⑥ session_user() -- 连接到数据库的用户名

⑦ @@basedir -- 数据库的安装目录

⑧ @@datadir -- 数据库文件存放目录

SQL注入是一种常见的Web应用程序漏洞,攻击者利用该漏洞向应用程序的数据库发送恶意的SQL查询,以获取敏感信息、修改数据或执行其他恶意操作。下面是关于SQL注入的说明以及如何进行和防范:

数据库:一个存放数据的库;分 为关系型数据库和非关系型数据库

通过命令docker pull mysql:5.7下载好数据库

docker run --name sqlinjectmysql -d -p 4001:3306 -e MYSQL_ROOT_PASSWORD=123 5107333e08a8 #Mysql image id

运行进入数据库

1.SQL注入的原理:

2.SQL注入利用应用程序对用户输入数据的不正确处理,将恶意的SQL代码注入到应用程序的数据库查询中。

3.攻击者通过在输入字段中插入恶意代码,改变SQL查询的逻辑,从而绕过身份验证、获取敏感数据或执行未经授权的数据库操作。

4.SQL注入攻击的实施:

5.Union注入:常用于获取额外的数据库信息,攻击者可以在查询中添加UNION语句,将两个表的数据合并输出。

6.Boolean-based注入:利用逻辑判断条件,通过观察页面的返回结果来判断数据库中的信息。

7.Error-based注入:利用数据库错误信息暴露数据库结构和数据信息。

8.Blind注入:攻击者无法直接获取数据返回结果,但可以通过不同的条件检测来推断数据。

9.判断SQL语句闭合符:

10.在进行SQL注入时,攻击者通常需要找到SQL语句中可以插入恶意代码的位置。判断SQL语句闭合符(通常是单引号')是一种重要的技术。

11.通过在输入字段中插入专门设计的字符(如单引号),观察应用程序的响应是否异常,可以帮助判断SQL语句中是否存在闭合符号。如果应用程序报错,可能表示注入点存在。

在防范SQL注入方面,有一些常用的做法:

12.使用参数化查询(Prepared Statements)来过滤用户输入,避免直接拼接SQL查询。

13.对用户输入进行输入验证和过滤,确保只接受预期的数据。

14.最小化应用程序的特权级别,限制应用程序对数据库的访问权限。

15.定期更新应用程序和数据库管理系统,确保应用程序所用的软件版本已修复已知的SQL注入漏洞。

在编写和设计Web应用程序时,应该时刻警惕SQL注入等漏洞的存在,采取有效的措施来防范和减少安全风险。

相关推荐
TianyaOAO8 分钟前
mysql的事务控制和数据库的备份和恢复
数据库·mysql
Ewen Seong20 分钟前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
kaixin_learn_qt_ing36 分钟前
了解RPC
网络·网络协议·rpc
码农老起1 小时前
企业如何通过TDSQL实现高效数据库迁移与性能优化
数据库·性能优化
安全小王子1 小时前
Kali操作系统简单介绍
网络·web安全
夏木~2 小时前
Oracle 中什么情况下 可以使用 EXISTS 替代 IN 提高查询效率
数据库·oracle
W21552 小时前
Liunx下MySQL:表的约束
数据库·mysql
黄名富2 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
言、雲2 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
Hacker_LaoYi2 小时前
【漏洞分析】DDOS攻防分析(四)——TCP篇
网络·tcp/ip·ddos