1.SQL注入原理

在1998年12月的《Phack》第54期,名为rfp的黑客发表了一篇名为“NT Webs Technology Vulnerabilities”的文章,随后一种在OWASP TOP10排行榜霸榜多年名为SQL注入的漏洞来到了世人的眼前

原文地址:http://phrack.org/issues/54/8.html


SQL注入基础

SQL语言介绍

SQL全称是“结构化查询语言”,最早是IBM为关系数据库系统SYSTEMR开发的一种查询语言,SQL语言结构简洁,功能强大,简单易学,所以IBM于1981年推出后得到了广泛的应用。

结构化查询语言SQL是一种介于关系代数与关系演算之间的语言,其功能包含查询、操纵、定义和控制,是一个通用功能极强的关系数据库标准语言

SQL注入产生原因

由于B/S模式随着互联网的高速发展,被应用的越来越广泛,而开发人员水平和经验参差不齐,在编写代码的时候没有对用户的输入数据或页面中所携带的信息进行必要的合法性判断,攻击者利用这个机会提交一段数据库查询代码,根据程序返回结果即可获得部分数据库信息

SQL注入原理

SQL注入是一种将恶意的SQL代码插入或添加到应用(用户)的输入输出的攻击手段,攻击者探测出开发者编程过程中的漏洞,利用这些漏洞构造SQL语句,对数据库内容进行直接的检索或修改

image-20200625140542821

灵活的SQL查询语句+用户输入的数据代入了SQL语句=用户操作数据库->SQL注入漏洞

案例演示

SQLi-LABS源码:https://github.com/Audi-1/sqli-labs

PHP环境安装SQLi-LABS,并且打开SQLi-LABS的数据库

show databases;	#显示已有数据库
use security;#进入SQLi-LABS的数据库security
show tables;#查看已有数据表
select * from users;#查看数据表users所有内容
select username,password from users where id=1;#查看数据表users中id=1的username,password列内容
select version();#使用内置函数version()查看数据库版本

在注入中有一个函数叫做union,作用是联合查询,常被用于数据库注入

select username,password from users where id=1 union select 1,version();

这里需要注意的是,我们要符合列数对应,两列内容必须对应两列,否则就会报错

image-20200628002147578

所以我们这里添加单独查询1(查询1会直接返回1)来占位,结果第一行返回了id=1的username,password和第二行返回了查询1的结果和mysql版本号

image-20200628003033628

为了更直观的演示,我们打开SQLi-LABS Less-1的index.php,直接跳转到20行与29行

image-20200628005128225

我们发现在20行获取了传入id之后,没有经过任何的处理,就直接把放进了sql语句中进行应用,并且在33行开始返回结果

如果我们正常传入数字id的话,将会输出id所对应的username和password的值

image-20200628094046738

limit 0,1指的是从第0条开始返回一条记录

我们现在已知传入时候代码会被无过滤的放到id=的后面,所以我们构造一个联合查询,查询版本号,同时将’ limit 0,1使用注释符注释

select * from users where id='1' union select version(),1,2;#' limit 0,1;

image-20200628100611206

我们在浏览器中构造url

http://127.0.0.1/Less-1/?id=1%27%20union%20select%20version(),1,2;%23

因为#通常会用在编码中,所以直接使用#会报错,%23是#的编码

image-20200628101556676

我们发现语句被正常执行了,但是由于网页输出只输出一行的原因没能被输出出来

那我们就让第一行报错,报错就不执行了,而且数据库第一列是id,网页中也是不输出的,所以我们把他version()和1换个位置

重新构造URL

http://127.0.0.1/Less-1/?id=-1%27%20union%20select%201,version(),2;%23

输出成功

image-20200628101926282

大致流程如下图

-1%27%20union%20select%201,version(),2;%23


输出成功

[外链图片转存中...(img-5fBP2NCI-1598410666629)]

大致流程如下图

![image-20200627173107083](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9za3lzdGFycnktMTI1MTE1NzI0Ny5jb3MuYXAtY2hlbmdkdS5teXFjbG91ZC5jb20vaW1nL2ltYWdlLTIwMjAwNjI3MTczMTA3MDgzLnBuZw?x-oss-process=image/format,png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值