pwnlab_init
小记-------铁打的身体磁铁打的床,晚上不想睡早上不想起
环境:纯虚拟机环境 本机ip 172.16.12.9 服务器:172.16.12.64
不是很爱在纯虚拟机上做,老win7不好用还不赏心悦目,但是做都做了还是记一下
声明:我的记录仅仅只是个人思路记录和流程遍历,不是标答不是标答,而且我后面没做出来,只是做记录使用,win7还是太难用了,寻找完美过程请寻找其他大拿文章
一、信息收集
还是先做信息收集,很遗憾这个win7机内的nmap貌似有配置错误:
failed to open device eth0
npcap 驱动没有正常工作
nmap 无法通过 npcap 操作底层网卡。
这里借一下别人的扫描结果:
PORT STATE SERVICE
80/tcp open http
111/tcp open rpcbind
3306/tcp open mysql
49874/tcp open unknown
然后用御剑跑一下后台目录并查看一下这个80端口的Web页面

但是windows不能whatweb并且虚拟机没有浏览器插件,暂时看不了web服务器和框架
后面估计要burp的时候看一下请求包看一下能不能看出来
在主页面的登录url里有page=login,可能对应着包含login.php文件 后端代码可能类似:
include($_GET['page'] . '.php');
这意味着我们可以读取服务器上任何php文件的源码,并且可能有sql注入漏洞和源码泄露
二、源码泄露与登录
这里优先去看一下当前登陆页面的源码
GET /?page=php://filter/read=convert.base64-encode/resource=login HTTP/1.1
Host: 172.16.12.64
用burpsuit解码看一下

分析mysql的账号密码应该是在config.php中
同样的去解码查看config.php
tip:这个靶机在包含文件时会自动拼接.php后缀,在访问时不要多写,否则会解析php.php文件不存在

这里看到了账号密码
用这个虚拟机里的Navicat for MySQL 进行连接查看

由此可得那个登陆页面的账号密码,密码注意base64加密
成功登入

三、上传漏洞尝试
本来想试试用cs连接的,但是没地方跑team sever,并且也没在这个win7找到cs服务端目录,遂放弃
还是老老实实用蚁剑吧,写个简简单单一句话(成也蚁剑败也蚁剑,玛德就不该用蚁剑的,当时也是脑残了把nc忘了,使用kali自动联想nc)
上传后发现有格式限制,只允许图片格式,应该是有白名单限制(后面再看upload文件确实是白名单,保存时自动添加后缀,不能绕过)

文件上传走不通,再去其他地方看看,御剑扫出来的php目前还剩index没看过源码

从中可以看出两个文件包含漏洞点
$_GET['page']
// 会自动拼接.php后缀
$_COOKIE['lang']
if (isset($_COOKIE['lang'])) {
include("lang/" . $_COOKIE['lang']);
}
// 这里没有任何额外的拼接
// 说明我们可以通过修改cookie来包含木马
做到这里突然想起来蚁剑支持.htaccess配置文件来绕过,但是依旧白名单限制,这里只是提供一个思路
四、Cookie 包含 GetShell
继续cookie包含,先上传一个jpg
然后随便抓一个包在cookie后面加上lang变量访问


php被成功执行
五
接下来就可以连接shell了,但是失败了,其实这里有个细节问题(蚁剑用的少)
上面那个GET请求的数据包虽然返回了GIF89a但是这仅仅只代表include通了,但是PHP代码没被执行
蚁剑是按照POST模式工作的,所以一句话里必须写POST去请求,所以eval post是标准(get system都不行),蚁剑发ant=...参数会通过eval执行,命令执行器会输出结构化结果(base64编码后的数组),而system这种有原生输出的函数蚁剑那到底是原始字符串就会解析失败
另外这里 ?page=xxx是触发include的关键
回忆一下 index.php 的关键源码:
if (isset($_GET['page'])) {
include($_GET['page'] . ".php");
}
和 lang 的 include:
if (isset($_COOKIE['lang'])) {
include("lang/" . $_COOKIE['lang']);
}
关键点:第二个 include必须放在某个 PHP 页面里才能执行。
所以平时的默认url不带参数会连接失败,走的是index.php的默认分支
http://172.16.12.64/ # 不带 page → 不走 include("lang/...") → webshell 不执行
http://172.16.12.64/?page=upload # 带 page → 走 include("upload.php") → upload.php 里又触发了 include("lang/" . $_COOKIE['lang']) → 图片马被加载 → webshell 执行
这里是我踩的一个坑,平时不带参数写习惯了(现在想起kali的好了)
重新使用post请求,以phpinfo查看是否真的有作用

使用蚁剑连接

成功进入shell,现在就是提权了
去找一下线索

六、提权尝试
| 项目 | 结果 |
|---|---|
| 当前用户 | www-data,无 sudo(not found) |
| 内核 | Linux 3.16.7,发布于 2016-02——存在脏牛 (CVE-2016-5195)、Dirty COW变种等多种提权漏洞 |
| 系统用户 | john、kane、kent、mike——没有 root 权限读不到他们的文件 |
| SUID 程序 | 都是系统默认的(mount、su、chfn、passwd 等),没有可疑的 SUID 提权点 |
但是我们之前进去数据库有三个账密,并且也在用户里看到了这三个账号,账号复用一下

折腾了很久,很遗憾在蚁剑里无法进行提权,su命令必须在原生终端内执行
- 靶机没装 sudo,标准 sudo 提权失效
- 蚁剑 shell 没 TTY,su 报 "must be run from a terminal"
- 脏牛编译成功(gcc 在),但执行后 /etc/passwd 没变化(写入长度/转义问题)
当时放弃了,但是后面又有新的思路,想到的时候环境已经销毁了,后面我提一下
七、复盘
后面看了一下关于这道题网络上面的解法,基本都是kali环境内进行的,拿到shell后登录kane后可以发现msgmike文件,
执行该文件会调用cat读取/home/mike/msg.txt
那么可以新建一个cat文件并添加执行权限去运行,就会触发当前目录的cat(/bin/sh)
就会提升到mike权限,在mike的目录里有msg2root,可以注入命令进行提权
回到刚刚说的新思路,蚁剑的终端不行的话可以使用nc进行连接反弹,sudo不行还有su - ,但是我当时纠结sudo去了(应该大概可能是这样的),说实话现在回看感觉自己做的时候真是没睡醒,nc了
应该可以做出来

每天还是应该多睡会,不然会像我一样nc
AI好啊,AI得用,不习惯博客园的排版格式,AI一键帮排QWQ

浙公网安备 33010602011771号