开始只是给了我们一段话,让我们去找,先看看网页源码。
发现有其他关联连接,进去之后又看到关联连接。
我们继续进去,然后说“看清楚了吗?”
看到这里,我们要用burpsuite看看,到底有什么东西。
看到返回页中有这个信息,进去之后有下面的php代码。
1 |
|
从过滤字符可以考虑是否有文件包含漏洞。同时还提示了flag在flag.php里面。
这时我们试试filter
?file=php://filter/convert.base64-encode/resource=flag.php
解码之后即可达到flag。
补充:
一、重定向与转发
在上面有action.php直接跳转到end.php这里涉及到了重定向,与此类似的还有一个转发。
http响应头location指示了其所连接对象的url位置。还可以用状态码302判断重定向。
重定向(Redirect):就是通过各种方法将各种网络请求重新定个方向转到其他位置。(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。在网站调整时可以使用。常用重定向的方式有:301(永久性转移)、302(暂时性转移)。
这个过程是由浏览器端实现的。
重定向的特点
- 地址栏:显示新的地址
- 请求次数:2次
- 根目录:http://localhost:8080/ 没有项目的名字
- 请求域中的数据会丢失,因为是2次请求
与之不同的转发的方式是服务器进行处理。
转发的特点
- 地址栏不发生变化,显示的是上一个页面的地址
- 请求次数:只有1次请求
- 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
- 请求域中数据不会丢失
| 区别 | 转发forward() | 重定向sendRedirect() |
|---|---|---|
| 根目录 | 包含项目访问地址 | 没有项目访问地址 |
| 地址栏 | 不会发生变化 | 会发生变化 |
| 哪里跳转 | 服务器端进行的跳转 | 浏览器端进行的跳转 |
| 请求域中数据 | 不会丢失 | 会丢失 |
二、文件包含漏洞
- 文件包含:程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,例如 include “1.php”。php常见的文件包含函数:
1 | include "1.php"; //当包含文件出现错误时,发出错误信息,继续执行。 |
- 漏洞出现的原因
为了控制代码的灵活性,程序员把要使用的函数写到一个文件中,其他需要执行其中的函数时,只需要通过该文件包含进来,而且没有验证。
- 文件包含漏洞分类
1)本地的文件包含漏洞:
a)上传图片马,本地包含图片马getshell
b)本地包含读取网站源码,使用php伪协议包含读取网站源码,获得base64加密源码。
c)包含日志文件,getshell。现在日志文件中写入带有小马的日志文件,具体做法是使用burp抓取对网站的访问请求,在访问路径就面加上小马,日志文件会记录到用户的请求信息,成功写入小马,后面只需菜刀连接即可。
d)包含session文件getshell
e)获取服务器信息:../../../../../../../ect/passwd
2)远程文件包含漏洞
远程文件包含与本地类似,只不过包含的是远程文件,需要注意:
a)php.ini中的配置选项allow_url_fopen和allow_url_include 的值为on
b)包含的远程文件不能以php结尾,php结尾会直接被解析
c)包含远程文件一个技巧,可以在远程文件中写入一个创建小马的程序,当成功包含后,会在本地创建一个小马文件,使用菜刀连接,即可getshell。
1 |
|
- 伪协议的利用
1)读取网站源码
index.php?page=php://filter/read=convert.base64-encode/resource=index.php
2)接收post文件,需要执行的内容放到post中 仅需要开启allow_url_include
index.php?php://input
3)?page=data://text/plain,<?php phpinfo();?>需要开启allow_url_open和allow_url_include
php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。