基本信息
- https://app.hackthebox.com/machines/Gofer
- 10.10.11.225

端口扫描
22,80,开了smb的Linux,还有被过滤的25:
1 | nmap -sC -sV -Pn 10.10.11.225 |
80
需要加hosts:
1 | 10.10.11.225 gofer.htb |

SMB
smb匿名访问,backup里得到一个mail:
1 | python3 ~/Tools/impacket/examples/smbclient.py miao@10.10.11.225 -no-pass |

查看邮件内容,提到Jocelyn容易被邮件钓鱼,libreoffice odt格式,并且提到网络代理现在正在做限制访问
1 | From jdavis@gofer.htb Fri Oct 28 20:29:30 2022 |
子域名扫描
子域名扫描可以发现proxy,应该就是邮件里提到的代理:
1 | ffuf -w ~/Tools/dict/SecLists/Discovery/DNS/subdomains-top1million-5000.txt -u "http://gofer.htb/" -H 'Host: FUZZ.gofer.htb' -fw 20 |
proxy
添加hosts,直接访问是401,但根据前面邮件内容,限制访问是正在做,那就是还没完成,直接POST请求可以得到缺少url参数信息(小细节,post根目录还是401,/index.php才能得到信息):


url ssrf
添加url测试,确认存在SSRF:


filter
url参数还存在一些过滤,例如file协议和127,file协议可以简单的绕过:
- SSRF Cheat Sheet & Bypass Techniques
https://highon.coffee/blog/ssrf-cheat-sheet/ - SSRF (Server Side Request Forgery) - HackTricks
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery


127 ip过滤也可以通过简单的进制转换绕过:


SSRF SMTP
根据已有信息,重点是前面邮件里提到的钓鱼和内部邮件,SMTP外部被过滤但可以内部访问,那就可以通过SSRF来通过gopher协议和SMTP交互发邮件:
- Server-Side Request Forgery to Internal SMTP Access | by Muh. Fani Akbar | InfoSec Write-ups
https://infosecwriteups.com/server-side-request-forgery-to-internal-smtp-access-dea16fe37ed2 - tarunkant/Gopherus: This tool generates gopher link for exploiting SSRF and gaining RCE in various servers
https://github.com/tarunkant/Gopherus - Web-Application-Attack/other-vulnerability/service-side-request-forgery/ssrf-and-smtp.md at master · rhamaa/Web-Application-Attack
https://github.com/rhamaa/Web-Application-Attack/blob/master/other-vulnerability/service-side-request-forgery/ssrf-and-smtp.md
钓鱼目标用户根据前面邮件知道是Jocelyn,然后根据主站team页面中的全名和邮件中邮箱格式知道Jocelyn的邮件地址是Jhudson@gofer.htb


ssrf.php
1 |
|
libreoffice to shell
现在可以成功钓鱼让目标用户点击我们发送的链接,下一步就是具体利用了,根据前面信息知道用的libreoffice,需要odt格式:
msf自带的几个libreoffice模块测试都不行 ,只能自己手动来,libreoffice可以直接使用shell:
- Using Malicious LibreOffice Calc Macros to Target Linux
https://jamesonhacking.blogspot.com/2022/03/using-malicious-libreoffice-calc-macros.html
参考上面的文章手动编辑分配宏,区别就是文章用的表格,odt需要是文档。制作完之后同样的发送钓鱼,得到jhudson:


user flag
jhudson用户目录得到user.txt:

信息
查看home目录发现后还有其他几个用户,运行pspy发现定时运行的curl,其中得到tbuckley账号密码:
1 | 2023/07/31 08:25:01 CMD: UID=0 PID=34951 | /usr/bin/curl http://proxy.gofer.htb/?url=http://gofer.htb --user tbuckley:ooP4dietie3o_hquaeti |

tbuckley可以ssh登录,继续枚举,发现/usr/local/bin/notes有suid,dev组可以执行,而当前用户tbuckley在dev组:

notes
直接运行是一堆选项:

下载到本地分析:
1 | scp tbuckley@10.10.11.225:/usr/local/bin/notes . |
本地ghidra之类报错的话可以用这个在线的:
- Decompiler Explorer
https://dogbolt.org/
user
选项1 创建用户会通过malloc分配40个字节,前24是用户名,后16是角色,如果运行这个程序的是root,角色是admin,否则是user:
1 | echo -e "\x69\x6d\x64\x61" |

选项2 就是show user info:

选项3 删除用户,只是free,没有清空(重点):

notes
选项4 创建笔记也是通过malloc申请40字节内存,和前面user申请的大小一样(也是重点),选项5就是显示创建的笔记,选项6还没实现,选项7是删除:

backup
选项8是backup,首先判断用户是否是admin,通过后使用tar进行备份,注意tar没有指定绝对路径:

提权 & root flag
分两部分,第一部分是利用UAF成为admin,第二部分是backup劫持tar
UAF
所以二进制利用就是类似UAF的方式,因为user和note的size相同,user被释放后note再申请相同size的内存,得到的是同一地址,整个流程大概这样:
- 首先创建一个用户。
- 这将使用 malloc 在内存中分配 40 个字节,并将用户名放在前 24 个字节,角色放在最后 16 个字节。
- 删除用户 (漏洞就在这里)
- 它释放分配的内存,但没有将指针(指向为用户分配的内存)设置为空。因此,即使它被释放,它仍然指向分配的内存。
- 写个笔记。
- 这再次调用malloc分配40字节。和前面的malloc一样,会分配相同的区域。我们的用户在那里。
- 使用这个,我们可以写入我们的第一个指针仍然指向的内存,并使用如下注释修改用户角色(24个A):AAAAAAAAAAAAAAAAAAAAAAAAadmin
- 现在可以调用 show user info 来确认这一点,

backup
然后可以使用backup来运行tar,因为tar没有使用绝对路径,基础的路径劫持:
- Hijacking Relative Paths in SUID Programs | by Nairuz Abulhul | R3d Buck3T | Medium
https://medium.com/r3d-buck3t/hijacking-relative-paths-in-suid-programs-fed804694e6e
1 | export PATH=/tmp/miao:$PATH |


root flag
我们的命令被成功执行:

shadow
1 | root:$y$j9T$nDuW.3vSoMpbgISVomFz40$s8PL3BYhQ5HJINwYWlXvYKi9NnEt5KpMXlf3O0jHSx4:19473:0:99999:7::: |
参考资料
- SSRF Cheat Sheet & Bypass Techniques
https://highon.coffee/blog/ssrf-cheat-sheet/ - SSRF (Server Side Request Forgery) - HackTricks
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery - Server-Side Request Forgery to Internal SMTP Access | by Muh. Fani Akbar | InfoSec Write-ups
https://infosecwriteups.com/server-side-request-forgery-to-internal-smtp-access-dea16fe37ed2 - tarunkant/Gopherus: This tool generates gopher link for exploiting SSRF and gaining RCE in various servers
https://github.com/tarunkant/Gopherus - Web-Application-Attack/other-vulnerability/service-side-request-forgery/ssrf-and-smtp.md at master · rhamaa/Web-Application-Attack
https://github.com/rhamaa/Web-Application-Attack/blob/master/other-vulnerability/service-side-request-forgery/ssrf-and-smtp.md - Using Malicious LibreOffice Calc Macros to Target Linux
https://jamesonhacking.blogspot.com/2022/03/using-malicious-libreoffice-calc-macros.html - Decompiler Explorer
https://dogbolt.org/ - Hijacking Relative Paths in SUID Programs | by Nairuz Abulhul | R3d Buck3T | Medium
https://medium.com/r3d-buck3t/hijacking-relative-paths-in-suid-programs-fed804694e6e