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