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页面

Pasted image 20260905104444

  但是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解码看一下

Pasted image 20260905105257

  分析mysql的账号密码应该是在config.php中

  同样的去解码查看config.php

tip:这个靶机在包含文件时会自动拼接.php后缀,在访问时不要多写,否则会解析php.php文件不存在

Pasted image 20260905105707

  这里看到了账号密码

  用这个虚拟机里的Navicat for MySQL 进行连接查看

Pasted image 20260905105937

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

  成功登入

Pasted image 20260905110349


三、上传漏洞尝试

  本来想试试用cs连接的,但是没地方跑team sever,并且也没在这个win7找到cs服务端目录,遂放弃

  还是老老实实用蚁剑吧,写个简简单单一句话(成也蚁剑败也蚁剑,玛德就不该用蚁剑的,当时也是脑残了把nc忘了,使用kali自动联想nc)

  上传后发现有格式限制,只允许图片格式,应该是有白名单限制(后面再看upload文件确实是白名单,保存时自动添加后缀,不能绕过)

Pasted image 20260905111323

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

Pasted image 20260905112545

  从中可以看出两个文件包含漏洞点

$_GET['page']
    // 会自动拼接.php后缀
$_COOKIE['lang']
if (isset($_COOKIE['lang'])) {
    include("lang/" . $_COOKIE['lang']);
}
    // 这里没有任何额外的拼接
    // 说明我们可以通过修改cookie来包含木马

  做到这里突然想起来蚁剑支持.htaccess配置文件来绕过,但是依旧白名单限制,这里只是提供一个思路


四、Cookie 包含 GetShell

  继续cookie包含,先上传一个jpg

  然后随便抓一个包在cookie后面加上lang变量访问

Pasted image 20260905115251

Pasted image 20260905115312

  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查看是否真的有作用

Pasted image 20260905143935

  使用蚁剑连接

Pasted image 20260905144141

  成功进入shell,现在就是提权了

  去找一下线索

Pasted image 20260905144926


六、提权尝试

项目 结果
当前用户 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 提权点

  但是我们之前进去数据库有三个账密,并且也在用户里看到了这三个账号,账号复用一下

屏幕截图 2026-09-05 152250

  折腾了很久,很遗憾在蚁剑里无法进行提权,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了

  应该可以做出来

illust_125577072_20241231_155500

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

posted @ 2026-09-07 17:58  Even1ngPrimr0se  阅读(19)  评论(0)    收藏  举报