题目信息
项
内容
比赛
网鼎杯 2018
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
漏洞类型:SQL 注入(UNION)+ SSRF(curl file 协议)+ PHP 反序列化。
信息收集
robots.txt 泄漏 user.php.bak 源码备份。
源码关键类 UserInfo:
1234567891011121314151617class UserInfo { public $name = ""; public $age = 0; public $blog = ""; public function __construct($name, $age, $blog) { $this->name = $name; $this->age = (int)$age; $this->blog = $blog; } function get($url) { $ch = curl_init ...
题目信息
项
内容
比赛
强网杯 2019
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
信息收集题目 ID、练习场 ID、friendly_id 与提交记录 ID 等标识已脱敏。入口为 GET 参数 inject。
漏洞分析类型:SQL 注入(堆叠注入 + handler 语句绕过关键字过滤)。
原理:题目对 inject 参数做了两层过滤:
preg_match("/select|update|delete|drop|insert|where|\./i",$inject) —— 过滤 select 等关键字和点号。
strstr($inject, "set") && strstr($inject, "prepare") —— 同时含 set 和 prepare 时拦截(封堵预处理语句注入)。
但未过滤堆叠注入(分号拼接多条语句)和 handler 语句。MySQL/MariaDB 的 HANDLER 语句可直接按索引读取表数据,不需要 SELECT。
12p ...
题目信息
项
内容
比赛
强网杯 2019
方向
Web
难度
中等
环境
授权靶场(已脱敏)
信息收集访问页面提示「备份了网站源码到 www.tar.gz」。
1curl "http://target:8080/www.tar.gz" -o www.tar.gz
解压后得到 3001 个 PHP 文件(src/ 目录),文件名随机,每个文件内容都是大量混淆变量 + 假后门。题目与练习场标识已脱敏。
漏洞分析分析假后门特征逐个文件审计发现,绝大多数「后门」是假的,特征如下:
假条件拦截:if('aaaa' == 'bbbb') system($_GET['x']); —— 条件恒为 false,永不可达
假函数调用:if(function_exists("随机名")) 随机名($var); —— 函数不存在
注释死代码:危险调用写在 /* ... */ 注释内
参数先清空:$_GET['x'] = ' '; echo {$_GET[‘x’ ...
题目信息
项
内容
比赛
强网杯 2019
方向
Web
难度
中等
框架
ThinkPHP 5.1.35 LTS(PHP 7.3.10 + openresty)
环境
授权靶场(已脱敏)
信息收集访问 /www.tar.gz 泄露完整源码,审计确认触发点。绝对路径信息(/var/www/html/public/)属于部署环境,仅作解题叙事保留。
Index::login_check() 对 cookie user 做 base64_decode + unserialize:
123456public function login_check(){ $profile = cookie('user'); $profile = base64_decode($profile); $this->profile = unserialize($profile); if($this->profile['ID']) { ... }}
漏洞分析漏洞类型:PH ...
题目信息
项
内容
比赛
极客大挑战 2019
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
信息收集首页表单:
1<form action="check.php" method="GET">
参数 username、password。登录成功后页面回显用户名(Hello X)和密码(Your password is 'X'),这两处可作为 UNION 注入的回显位。
练习场 ID、题目 ID、friendly_id 与提交记录 ID 等标识已脱敏。
漏洞分析类型:SQL 注入(UNION 联合查询注入)。
原理:登录接口 check.php 通过 GET 参数 username、password 拼接 SQL 查询,未做过滤。登录成功后页面回显用户名和密码,可用 UNION 注入将查询结果回显到这两处。
利用过程
定位注入点:首页表单 <form action="check.php" method="GET">,参数 usern ...
题目信息
项
内容
比赛
极客大挑战 2019
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
信息收集探测首页,查看 HTML 源码,在页面底部注释中发现泄漏的后端 PHP 逻辑。
12345$cat=$_GET['cat'];echo $cat;if($cat=='dog'){ echo 'Syc{cat_cat_cat_cat}'; // 占位符,平台真实 flag 为另一格式}
练习场 ID、题目 ID、friendly_id 与提交记录 ID 等标识已脱敏。
漏洞分析类型:PHP 源码注释泄漏(信息泄露 / 逻辑判断泄漏)。
原理:页面 HTML 源码的末尾注释中泄漏了后端 PHP 逻辑。后端读取 GET 参数 cat 并回显,当 cat 等于 dog 时输出 flag。只需构造 ?cat=dog 即可触发。
利用过程
探测首页:访问 /,查看 HTML 源码,在页面底部注释中发现泄漏的 PHP 逻辑。
触发判断:访问 /? ...
题目信息
项
内容
比赛
极客大挑战 2019
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
信息收集访问首页是一个登录表单,提交到 check.php,参数为 username 和 password(GET 方式)。
1234<form action="check.php" method="GET"> <input type="text" name="username" /> <input type="text" name="password" /></form>
正常登录测试:
12GET /check.php?username=admin&password=*** HTTP/1.1Host: target:8080
返回:NO,Wrong username password!!!
友好 ID、求解人数等平台标识已脱敏。
漏洞分析漏洞类型:SQL 注入(万能 ...
题目信息
项
内容
比赛
护网杯 2018
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
信息收集首页泄漏三个文件链接:
/hints.txt:md5(cookie_secret+md5(filename))(filehash 算法提示)
/welcome.txt:render(提示 SSTI)
/flag.txt:flag in /fllllllllllllag
题目 ID、练习场 ID、friendly_id 与提交记录 ID 等标识已脱敏。
漏洞分析类型:Tornado 模板注入(SSTI)+ cookie_secret 泄漏 + filehash 伪造。
原理:filehash 算法为 md5(cookie_secret + md5(filename))(由 /hints.txt 提示)。/file 读取任意文件需正确 filehash。/error?msg= 存在 Tornado 模板注入,可读 handler.settings 泄漏 cookie_secret,从而伪造任意文件的 filehash。
利用过程
定位 SSTI:/err ...
题目信息
项
内容
比赛
护网杯 2018
方向
Web
难度
中等偏难
环境
授权靶场(已脱敏)
信息收集源码泄露首页 HTML 注释泄露源码地址:<!-- code: https://github.com/qqqqqqvq/easy_laravel -->。审计源码发现:
NoteController 存在 SQL 注入(name 字段直接拼入查询)。
UploadController::check() 的 file_exists() 两个参数可控,可触发 phar 反序列化。
FlagController::showFlag() 读取 /th1s1s_F14g_2333333。
环境差异(关键)原题使用 nginx + mysql,buuoj 复现环境使用 apache + sqlite(PHP/5.6.40 + apache + sqlite)。这导致两个关键差异:
web 根目录从 /usr/share/nginx/html 变为 /var/www/html。
SQL 注入注释符不能用 #(sqlite),需用 --。
...
题目信息
项
内容
比赛
WesternCTF2018
方向
Web
难度
Easy
环境
授权靶场(已脱敏)
信息收集访问 / 直接返回源码(open(__file__).read()),属源码泄漏。题目与练习场的 ID、friendly_id 等标识已脱敏。
1234567891011121314151617import flaskimport osapp = flask.Flask(__name__)app.config['FLAG'] = os.environ.pop('FLAG')@app.route('/')def index(): return open(__file__).read()@app.route('/shrine/<path:shrine>')def shrine(shrine): def safe_jinja(s): s = s.replace('(', '').replace ...










