文件操作类漏洞学习笔记1

文件操作类漏洞学习笔记1

文件包含漏洞:

​ 什么是文件包含?

​ 文件包含即将文件包含到此网站,比如说我现在网站的根目录下有一个文件test.php

其中包含用语句为include或者require

img点击并拖拽以移动

​ 同时我们还有一个456456.php文件

img

点击并拖拽以移动

​ 于是我们进入网站时,就可以利用此get请求包含文件

img点击并拖拽以移动

​ 可以看到我们的456456.php被执行了,我再将456456后缀改成txt

img

点击并拖拽以移动

img点击并拖拽以移动

​ 发现还是执行成php了,那如果要包含的文件不在网站根目录呢,我尝试包含一张在D盘下的文件

img

点击并拖拽以移动

​ 发现还是可以成功包含

img点击并拖拽以移动

​ 倘若我包含一张图片呢

img

点击并拖拽以移动

img点击并拖拽以移动

​ 可见其未被解析成一张正常的图片文件 ,因为include和require函数会默认将包含的文件解析成为php文件,所以如果网站没有做限制和过滤,并且包含的是一个恶意脚本,那么就可以通过这种方式执行脚本,这就是文件包含漏洞

实战

pikachu靶场本地包含:

​ 发现搜索框内可以选择查看球星

img

点击并拖拽以移动

​ 同时可以注意到url里有对应的文件(file1.php)

img点击并拖拽以移动

​ 并且我们在切换人物时,也可以发现url里的文件变了img点击并拖拽以移动

​ 进一步说明这里是通过文件包含函数包含了文件,那么我们就可以自定义文件名,比如在前面加上../就可访问上一级目录的文件,那么这里就可以拿到网站根目录下的flag了img点击并拖拽以移动

pikachu靶场远程包含:

​ 如果出现这句话要先去开启

img点击并拖拽以移动

​ 可以写一个phpinfo函数的php文件直接找php.ini的位置

img

点击并拖拽以移动

img点击并拖拽以移动

​ 找到php.ini的位置进行修改

img点击并拖拽以移动

​ 将其修改为On,随后重启中间件服务

img

点击并拖拽以移动

​ 远程包含漏洞的关键就是要开启这两个功能

img点击并拖拽以移动

​ 开启后即可从远端服务器包含其文件到网站,于本地同理,如果是恶意脚本并且没有做限制或过滤,就会在网站下执行

​ 比如这里的url显示从远端包含的是file1.php

img点击并拖拽以移动

​ 通过查看原码也可以看出这里是直接包含get请求中的文件名

img点击并拖拽以移动 于是就可以通过这个漏洞执行恶意代码或者查看远端服务器内的文件了

img点击并拖拽以移动

​ 也可以使用其它伪协议来读取文件

img点击并拖拽以移动img点击并拖拽以移动

upload-lab第13关

img点击并拖拽以移动

​ 上传图片马

img

点击并拖拽以移动

​ 并进入include文件包含漏洞界面包含刚上传的图片马

img点击并拖拽以移动

img点击并拖拽以移动

​ 可以看到最后的php语句不见了,那应该是解析php成功了

img点击并拖拽以移动

​ 使用蚁剑连接成功

img点击并拖拽以移动

holynix靶机

​ 开启靶机后按正常流程来走我们要先扫描网段下有哪些ip,但是这里扫不到,经过查询

关于解决找不到该靶机ip的问题解决方案:
综合一些参考文章以及这台靶机官方页面的评论,表明这台靶机是有问题的,把mac地址写死了,因此扫描不到它的ip,最终解决成功如下: 首先,kali和靶机的网络都设置为NAT(注意不是自定义中的VMnet8),然后选中靶机的网卡高级设置:将该mac地址修改为00:0C:29:BC:05:DE,注意是关机状态下再设置。

​ 于是再进入kali使用nmap查找网段内IP

img点击并拖拽以移动

这个ip的mac地址对应的就是靶机的mac地址,那么这个ip就是靶机的IP

访问这个IP,看到靶机的网站

img点击并拖拽以移动

发现登录界面,尝试用万能密码,发现登录成功

img点击并拖拽以移动img点击并拖拽以移动

发现有很多功能选项,且在security界面里发现疑似文件包含漏洞

img点击并拖拽以移动

这里应该是通过修改text_file_name的值实现文件包含,于是抓包,找到该值

img点击并拖拽以移动

将其修改验证漏洞

img点击并拖拽以移动

img点击并拖拽以移动

证明确实存在文件包含漏洞

同时又发现能够上传文件的界面

img点击并拖拽以移动

尝试上传文件但是提示当前用户不允许上传到家目录

img点击并拖拽以移动 应该是只能管理员用户上传,可以利用之前发现的万能密码登录框进行sql注入

发现是post型注入,那就偷个懒用sqlmap吧v

抓取数据包

img

点击并拖拽以移动

使用sqlmap进行post注入

img点击并拖拽以移动

找到数据库creds

img

点击并拖拽以移动

接着寻找数据表

img点击并拖拽以移动找到一些数据表

img

点击并拖拽以移动

猜测管理员账户应该在accounts里面

接着寻找数据列

img点击并拖拽以移动 找到一些列

img

点击并拖拽以移动

把所有数据都查出来

img点击并拖拽以移动但似乎没找到疑似管理员用户呐

img点击并拖拽以移动

但是除了第一个和第九个其他的upload上传数量(猜测应该是这个意思)都不为0,是不是除了这俩其余账户都能上传文件?

登录第二个用户试一试

img

点击并拖拽以移动

尝试上传,还真的上传成功了!

img点击并拖拽以移动

接着上传木马文件试试

上传成功!img点击并拖拽以移动

但是我得先知道上传到哪了,根据前面上传不成功的提示,应该是放在用户家目录了

注意到在上传后有个界面叫transfer,可以查看这里知道文件的位置,先利用前面的文件包含漏洞查看该网页原码img点击并拖拽以移动

利用文件包含漏洞访问,果然是放在家目录了,但没有权限执行

img点击并拖拽以移动

img点击并拖拽以移动

还有另一种方式,就是上传压缩包,它刚才有提示可以自动解压的选项,经过询问ai

  • 直接上传的 PHP 文件:可能权限设置不正确(如 644),导致 Web 服务器(如 Apache/Nginx)无法读取或执行。

  • 解压后的 PHP 文件:自动解压时,系统可能赋予了合适的权限(如 755),使 Web 服务器有执行权限。

  • 直接上传的文件可能属于你的用户账户,而 Web 服务器(如 www-datanginx)没有访问权限。

  • 解压工具(如 unziptar)可能在解压时自动将文件所有权设为 Web 服务器可用的用户组。

所以解压后的权限有可能发生改变

现在才想起来我们的目的是拿下shell,所以应该要使用回弹shell的payload才对

img点击并拖拽以移动

给payload配置参数

img点击并拖拽以移动

压缩文件

img点击并拖拽以移动

随后上传压缩文件,经过测试要在kalilinux里上传(还不清楚为什么),在物理机上传了不会自动解压

img点击并拖拽以移动

kali开启端口监听

img点击并拖拽以移动

随后进入~etenenbaum目录下(第一次知道可以这样在网站访问我们的家目录),同时点击我们上传的反弹shell文件

img点击并拖拽以移动

img点击并拖拽以移动

成功拿到shell

新的未解之谜:为什么不经过压缩上传的文件没有权限执行,而经过压缩后上传的文件就可以被解析呢,我后面又上传了同样的回弹shell的脚本rere.php,但是点击它回显的是没有权限执行,就和前面访问木马文件一样,虽然我有查过解压后的权限可能发生改变,但这里是通过sudo默认以管理员的身份来进行解压文件,解压后的文件应该和压缩前的文件具有同样的权限才对啊,压缩前无权访问解压后应该也无权呐,其实我先前还把木马文件通过压缩后上传尝试了,但是就算自动解压后还是无权访问木马文件,真实奇了怪了,但也不排除我自身的操作可能哪里出错了

posted @ 2025-05-11 01:22  VermiliEiz  阅读(6)  评论(0)    收藏  举报