polar 写shell
file_put_contents 函数 会把**<?php exit();”.$_POST[‘content’]** 存入到 $_GET[‘filename’] 文件里
但是这里的<?php exit(); 执行时就会直接先执行exit()退出了 导致我们后面的代码无法执行
这里就需要绕过一下exit();
这里是
php死亡exit()绕过
1file_put_contents($filename,"<?php exit();".$content);
tips:伪协议处理时会对过滤器urldecode一次;面对不可用的规则是报个Warning,然后跳过继续执行
base64编码绕过
12filename=php://filter/read/convert.base64-decode/resource=shell.phpcontent=aPD9waHAgcGhwaW5mbygpOz8+
利用php://filter 伪协议 先将 <?php exit() ...
其中笔记多为查询ai获得
ai直接解释不清楚的 为自行查找并总结
strops()strpos() 是 PHP 用来查找字符串 的函数,它用于查找 某个字符串 在 另一个字符串 中 首次出现的位置。
if (strpos($xdmtql, 'sys nb') !== false) {
echo 'flag{*******}';
} else {
echo 'true .swp file?';
}
strops函数匹配上传的参数里有sys nb
如果 $xdmtql 不匹配 /sys.*nb/(即 sys 和 nb 不能被任何字符隔开,除非是空格)
如果 $xdmtql 里面有 “sys nb”,输出 flag{*******}(获取 flag)
否则,输出 “true .swp file?”`。
preg_match()preg_match('/^\W+$/', $v3):这行代码检 ...
设置cookie: from=ISCTF
访问/get_contents_qwerghjkl.php
这里有个file_get_content函数 用data://伪协议绕过
file_get_contents($_POST[‘name’]) 会尝试读取一个文件 名为name 而不是文件的内容
所以这里要让 file_get_contents() 读取的是一个“伪造的文件”,它的内容正好是 "ISCTF"。
而data:// 是 PHP 的 数据流(Stream Wrapper),允许直接创建“虚拟文件”。
所以这里传 name=data://text/plain,ISCTF即可
访问/well_down_mlpnkobji.php
这里看不清 自己找个文本写入看
waf($poc);对poc过滤了 “/http|php|file|:|=|/|?/i”
我们需要通过php://filter伪协议 ...
get传参b=a[0]=QLTHNDT
md5弱比较 这里是0e绕过 QNKCDZO与QLTHNDT经过md5编码后都是0e开头
因为PHP 试图解析它们为数值,发现它们符合 0eX(科学计数法),都被解释为 0 * 10^X = 0。
结果是 0 == 0,所以 返回 true。
然后post num
num=2024 不能有字母 intval($num,0)=2024
小数点绕过即可
post传参num=2024.1
intval() 转换小数类型时,只返回个位数,不遵循四舍五入的原则。
接下来是一个switch循环
get传参 which=flag
在 PHP 中,switch 语句的比较是通过 严格比较(==) 来进行的。当你传递一个非数字字符串(例如 "flag")时,PHP 会尝试将其转换为数字。这个转换过程有些特殊,通常会把任何非数字字符串转换为 0。
也就是
PHP 会自动尝试将 "flag" 转换为数字。在 PHP ...
NSSRound#28 Team ez_php
先看代码呗
post传参 a b get传参 pssword
password不能是纯数字 又要等于123456
is_numeric检验password是不是数字 如果是数字就会执行第一个die
password!=123456 是非严格比较
PHP 进行 非严格比较 (!=) 时,会尝试将字符串转换成数字。如果字符串以数字开头,PHP 会尽可能解析成数字,"123456abc" 会被当作 123456 来比较
所以这里我们可以通过传password=123456abc进行绕过
1if ($a != $b && md5($a) === md5($b))
a!=b a的md5还要等于b的md5
因为md5对数组加密结果为NULL 所以这里直接用数组绕过
post传参 a[]=1&b[]=2即可绕过
接下来就是文件包含inclue
直接利用php://filte文件读取流读取level2.php
file ...
通过 __toString() 方法输出数据,从而被滥用于信息泄露。
1. ExceptionException 的 __toString() 方法会输出 message,可以用来泄露敏感信息:
1?v1=Exception&v2=file_get_contents&arg=/etc/passwd
相当于:
1echo new Exception(file_get_contents('/etc/passwd'));
如果 file_get_contents('/etc/passwd') 成功读取到了内容,它就会直接输出异常,导致信息泄露。
2. ErrorPHP 7+ 之后,Error 继承自 Throwable,其行为和 Exception 类似:
1?v1=Error&v2=file_get_contents&arg=/etc/passwd
它会输出:
1Error: /etc/passwd in script.php:3
3. ReflectionClassReflectionClass 的 __to ...







