SQL注入漏洞
- SQL注入漏洞
- SQL注入原理
- SQL注入带来的危害
- SQL注入分类
- 数字型注入实操
- 字符型注入实操
- 类型检测
- and测试
- 绕过密码:'or 1=1 --
- 搜索型注入实操
SQL注入漏洞
攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。
SQL注入原理
服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当作SQL语句执行,从而产生威胁。
SQL注入带来的危害
- 绕过登录验证:使用万能密码登录网站后台等
- 获取敏感数据:获取网站管理员帐号、密码等
- 文件系统操作:列目录,读取、写入文件等
- 注册表操作:读取、写入、删除注册表等
- 执行系统命令:远程执行命令
SQL注入分类
- 按照注入点进行分类
- 数字型注入
- 字符型注入
- 搜索性注入
- 按照诸如技术进行分类
- 基于布尔的盲注
- 基于时间的盲注
- 基于报错的注入
- 联合查询注入
- 堆查询注入
数字型注入实操
使用火狐打开到这个界面,sqli安装在之前文章中介绍过了。
页面提示请输入ID,
在这里输入ID即可,然后点击execute执行即可看到上面的页面,可以继续换ID的值,改成2或者3等等去测试:
可以在看一下页面相关的源文件:
字符型注入实操
因为并不是所有的地方都是输入数字就正确,接下来使用Less-1进行测试:
接下来打开index.php源文件进行查看,验证Less-1是要求输入字符串的:
Less-1的源文件和Less-2的源文件只有这里一个差别,现在在页面进行测试:
接下来尝试错误的输入,因为并不是一开始就能输入对:
我们把页面的报错信息的双引号中间的内容拿出来:‘4’’ LIMIT 0,1,刚才输入进去的是4’,再稍微观察一下:
现在就很明显了,显然我们输入错误的是4’,然后4’的外面又有一个单引号,所以猜测这里使用的是字符串,加上刚才原码的查看,可以证明猜测是正确的。原来的语句就是select * from 表名 where id = ‘值’ limit 0,1;
类型检测
and测试
接上面的字符型注入,我们可以使用别的方法进行检测输入类型是什么,好比and:
如果输入的是:1’ and ‘1’ = '1,将这一部分替换到值的那一部分,那么原来的语句就变成了:
select * from 表明 where id = ‘1’ and ‘1’ = ‘1’ limit 0,1;可以发现是一点错误都没有,接下来进行测试:
发现没有问题,说白了其实就是一个引号闭合的事情,然后进行测试输入的类型。
绕过密码:'or 1=1 –
现在假设有这么一个源码:
select username password from users where username= ‘$ username’ and password=‘$password’
其中的 $username和 $password通过 $_GET[‘ ’]获取,显示加上or–,因为这个‘–’在数据库中代表注释的意思,即使输入也不影响:
这个语句为真,于是就跳过了密码,接下来进行测试:
admin库下的账号密码全都出来了。
搜索型注入实操
一般源文件的代码为:
select * from 表名 where 字段 like ‘%值%’;
当把值改为:‘and [查询条件] and ‘%’=’,那么提交过去的话, 最终显示为:select * from 表名 where 字段 like ‘%‘and [查询条件] and ‘%’=’%’;
以上就是按照注入点所作的三种分类了。