1 介绍
SQL注入漏洞主要是由于,在要求的时候没有做严格的过滤,致使传入的语句被当作SQL语句被履行,从而致使数据库受损(被脱库、删除、乃至数据付权限沦陷)
2 一般步骤
SQL注入点探测:
判断甚么地方存在SQL注入点,通常在表单,文章查询等与数据库有关操作的页面。
搜集后台数据库信息:
区别的数据库的注入方法、函数各不相同,因此注入前要判断数据库的类型。
如:
特殊字符、单引号:让数据库返回毛病
函数:
version()函数:MSQL专用
猜想用户名和密码:
表名、字段名、字段数、用户名和密码。
查找 Web 后台管理入口:
可使用 目录扫描工具
入侵and破坏:
- 登录后台:上传木马、篡改网页、盗取信息。
- 进一步提权:入侵Web服务器和数据库服务器。
3 注入
测试数据;
| isbn | title |
+—————+———————————-+
| 9787302458210 | SQL Server 从入门到精通(第2版) |
| 9787115496003 | 虚拟化技术利用与实践 |
| 9787302510109 | 算法设计与分析(第4版) |
| 9787503442490 | 心灵密码 |
| 9787503421884 | 雪狼 |
| 9787539635835 | 龙头老太 |
+—————+———————————-+
3 函数
3.1 经常使用的系统函数
| 函数 | 作用 |
|---|---|
| version() | mysql版本 |
| user() | 数据库用户名 |
| database() | 数据库名 |
| @@datadir | 数据库路径 |
| @@version_complie_os | 操作系统版本 |
3.2 字符串联接函数
三大宝贝:concat(),group_concat(),concat_ws()
3.2.1 concat() 函数
特点:concat(str1,str2,...)
返回结果为连接参数产生的字符串,如果任何一个参数为NULL,则返回值为NULL,可以有一个或多个参数。
1. 不使用字符连接函数:
| isbn | title |
+—————+———————————-+
| 9787302458210 | SQL Server 从入门到精通(第2版) |
+—————+———————————-+
2.使用示例
一般我们都要用一个字符将各个项隔开,便于数据的查看
| concat(isbn,’,’,title) |
+————————————————+
| 9787302458210,SQL Server 从入门到精通(第2版) |
+————————————————+
3.2.2 concat_ws() 函数
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊情势。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也能够是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会疏忽任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会疏忽任何空字符串。 (但是会疏忽所有的 NULL)。特点:CONCAT_WS(separator,str1,str2,…)
使用示例
3.2.3 group_concat() 函数
GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。
就不演示了,sql语句犹如上面
4 注入
4.1 联合查询 union 注入
使用联合查询进行的条件是我们进行注入的页面一定要有显示位。
1、使用union
payload:
select 一定要有相同的列,且各列的数据也都相同,同时,每条 SELECT 语句中的列的顺序一定要相同。
联合查询可先在链接最后添加 order by X 基于随便数字的注入,根据页面的返回结果来判断站点中的字段数目。
2、 payload:a' order by 4#%
3、得到主查询由三个字段后,我们用union来做一个sql拼接。
pauload
这里没有测试通过
4.2 information_schema 注入
information_schema数据库是MySQL5.0系统自带的数据库,其中保存着关于MySQL服务器所保护的所有其他数据库的信息。
实际注入测试
5.2.1 获得所有数据库
类型:id=/wd=/name=
4.2.2 获得指定数据库的表
payload
4.2.3 获得指定表的字段名
payload
4.2.4 获得字段值得内容
payload
4.3 基于报错信息注入
此方法是在页面没有显示位,但是 echomysql_error() 函数,在前端输出了毛病信息的时候方能使用。
优点是注入速度不错,缺点是语句较为复杂,而且只能用 limit 顺次进行猜解。整体来讲,报错注入实际上是一种公式化的注入方法,主要用于在页面中没有显示位,但是用 echomysql_error() 输出了毛病信息时使用。常见的select/insert/update/delete 注入都可使用报错方式来获得信息。
4.3.1 三个经常使用报错函数
updatexml(): 函数是MYSQL对XML文档数据进行查询和修改的XPATH函数
extractvalue() : 函数也是MYSQL对XML文档数据进行查询的XPATH函数.
floor(): MYSQL中用来取整的函数.
4.4 数字注入
4.5 搜索注入
在搜索框搜索的时候,成为搜索型。
数字型与字符型注入最大区分:数字型不需要单引号闭合,而字符串类型需要单引号闭合。
5 sql注入防御
- 对输入进行严格的转义和过滤
- 使用参数化(Parameterized):目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
到此这篇关于sql注入数据库原理详情介绍的文章就介绍到这了,更多相关sql注入数据库 内容请搜索之前的文章或继续浏览下面的相关文章希望大家以后多多支持!
本文来源:https://www.yuntue.com/post/150174.html | 云服务器网,转载请注明出处!

微信扫一扫打赏
支付宝扫一扫打赏