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注入等漏洞的存在,采取有效的措施来防范和减少安全风险。

相关推荐
لا معنى له6 小时前
残差网络论文学习笔记:Deep Residual Learning for Image Recognition全文翻译
网络·人工智能·笔记·深度学习·学习·机器学习
TDengine (老段)6 小时前
TDengine 时间函数 WEEK 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
还是鼠鼠7 小时前
Redisson实现的分布式锁能解决主从一致性的问题吗?
java·数据库·redis·分布式·缓存·面试·redisson
DingYuan1017 小时前
MySql分类
数据库·mysql
爬山算法7 小时前
Redis(153)Redis的网络使用如何监控?
网络·redis·bootstrap
杨云龙UP8 小时前
SQL Server 备份异地同步 + 清理脚本
运维·服务器·数据库·sql·mysql·sqlserver
O***Z6168 小时前
Redis——Windows安装
数据库·windows·redis
0***h9428 小时前
MySQL 启动失败 (code=exited, status=1FAILURE) 异常解决方案
数据库·mysql
极地星光8 小时前
C++链式调用设计:打造优雅流式API
服务器·网络·c++