1.本**二网安专业,目源码题想打ctf,该怎么入门?
2.CTF基础知识及web
3.CTF入门必备之题型介绍
4.pwn基础— Got表劫持
5.2022Pwnhub春季赛相关体验及wp
6.pwntools处理ELF文件中plt与got表获取
本**二网安专业,想打ctf,该怎么入门?
CTF竞赛,中文译作夺旗赛,库源是代码一种网络安全领域的竞技活动,起源于年DEFCON全球黑客大会,目源码题旨在通过模拟网络安全攻击与防御,库源提升参赛者的代码时光飞船指标源码技能。CTF竞赛有多种模式,目源码题包括解题模式、库源攻防模式以及结合两种模式的代码混合模式,其中解题模式和攻防模式是目源码题较常见的两种。
CTF竞赛题目通常分为六大类:Web、库源MISC、代码Crypto、目源码题Reverse、库源PWN和Mobile,代码每类题目都涉及不同的技能和知识,如Web类侧重于常见Web漏洞的利用,Crypto类则强调密码学知识,Reverse类则关注软件逆向工程。参赛者需具备Windows和Linux基础、计算机组成原理、操作系统原理、网络协议分析、IDA工具使用、逆向工程、密码学、缓冲区溢出等相关知识。
入门CTF竞赛,首先要确定学习方向,A方向以PWN、Reverse和Crypto为主,B方向则以Web和Misc为主。基础学习内容包括Windows和Linux基础、计算机组成原理、操作系统原理、网络协议分析等。选择A方向还需掌握IDA工具使用、逆向工程、密码学、缓冲区溢出等知识;选择B方向则需熟悉Web安全、网络安全、内网渗透、数据库安全等。
刷题是入门CTF竞赛的关键步骤,通过大量练习,fusionapp网页翻译源码可以提升解题能力和技巧。选择已存在Writeup的比赛或参加最新CTF比赛,总结解题过程并撰写博客等,可以加深理解和学习效果。推荐平台如bugku,通过实际解题寻找工具,总结经验,逐步提高。
在编程方面,建议学习PHP、Python等热门语言,PHP是必学项目,学透后代码审计将变得轻松。编程技能应足够使用,对照文档编写程序,理解基础即可,避免过度深入,以防忽略安全知识。
最后,为了帮助学习网络安全,提供了包括入门/进阶学习资料、网络安全源码合集与工具包、面试题在内的资源包,如有需要,可通过链接免费领取。
CTF基础知识及web
CTF基础知识及web
一、CTF简介
CTF(Capture The Flag)夺旗比赛,是网络安全领域中技术人员之间进行技术竞技的一种比赛形式。CTF起源于年DEFCON全球黑客大会,取代了黑客之间通过发起真实攻击进行技术比拼的传统方式。如今,CTF已经成为全球网络安全领域流行的竞赛形式,年全球举办的国际性CTF赛事超过五十场。DEFCON作为CTF赛制的发源地,DEFCON CTF被誉为CTF赛场的“世界杯”。
二、CTF赛事介绍
CTF是一种流行的信息安全竞赛形式,以“夺得Flag”为特点。比赛流程中,参赛队伍需通过攻防对抗、程序分析等方式,在主办方提供的环境中获取一串具有一定格式的字符串或其他内容,并提交给主办方,以获得分数。软件有源码吗Flag是CTF竞赛中用来称呼这种内容的通用术语。
三、CTF竞赛模式
1. 解题模式(Jeopardy)
解题模式CTF赛制,参赛队伍通过互联网或现场网络参与,解决网络安全技术挑战题目,以分值和时间排名,主要用于在线选拔赛。题目涉及逆向、漏洞挖掘与利用、Web渗透、密码、取证、隐写、安全编程等。
2. 攻防模式(Attack-Defense)
攻防模式CTF赛制中,参赛队伍在网络空间内互相进行攻击与防御,挖掘网络服务漏洞并攻击对手服务得分,同时修补自身服务漏洞以避免丢分。这种赛制实时反映比赛情况,最终以得分决定胜负,强调智力、技术、体力及团队协作。
3. 混合模式(Mix)
混合模式CTF赛制结合了解题与攻防元素,参赛队伍通过解题获取初始分数,然后通过攻防对抗进行得分增减,最终以得分高低分出胜负。iCTF国际CTF竞赛是此类赛制的典型代表。
四、CTF竞赛内容
主流CTF比赛内容包括但不限于Web应用漏洞挖掘与利用、密码学、程序逻辑分析与漏洞利用、Misc杂项(如隐写、数据还原、社会工程与信息安全相关的大数据)、二进制程序逆向分析、编程类等。
五、国内外著名赛事
国际知名CTF赛事包括DEFCON CTF、“世界杯”般的比赛、UCSB iCTF、Plaid CTF、Boston Key Party、Codegate CTF、超级波段附图源码Secuinside CTF、XXC3 CTF、SIGINT CTF、Hack.lu CTF、EBCTF、Ghost in the Shellcode、RwthCTF、RuCTF、PHD CTF等。国内赛事有XCTF全国联赛、AliCTF、KCTF、XDCTF、HCTF、ISCC、LCTF、TCTF、百度杯CTF夺旗大战、全国大学生信息安全竞赛创新实践能力赛线上赛等。
六、如何学习CTF
学习CTF需要分析赛题情况,了解涉及的知识点,并根据自身能力选择适合的方向。建议从低难度题目入手,研究历年经典写解(writeup),并关注团队需要掌握的基础知识,如Linux基础、计算机组成原理、操作系统原理、网络协议分析等。推荐书籍包括《RE for Beginners》、《IDA Pro权威指南》等。
CTF学习中,重要的是兴趣和团队协作。选择适合自己的方向,从低到高、由易入难地学习,同时研究历年经典写解,可显著提升技能水平。书籍推荐覆盖PWN、Reverse、Crypto、Web、Misc等方向,展翅指标公式源码助力提高CTF竞赛能力。
七、备份文件下载
CTF竞赛中,涉及的备份文件下载技术包括目录遍历、PHPINFO、网站源码、.bak文件、vim缓存和.DS_Store文件等。具体操作步骤包括:点开链接、进入环境、使用工具(如burp)暴力破解、找到flag并提交等。注意避免在提交时出现空格,确保提交内容的正确性。
CTF入门必备之题型介绍
CTF入门必备,理解题型至关重要。比赛中的主要题型包括Web渗透、RE逆向、Misc杂项、PWN漏洞利用和Crypto密码破解。
Web类题目是入门者的友好选择,涉及注入、XSS、文件包含等漏洞,信息搜集对解题至关重要。通过敏感目录或备份文件,可以获取源代码和内部URL。例如,Banner识别可揭示框架信息,帮助利用历史漏洞。SQL注入是常见漏洞,包括多种注入方式,如数字型、UNION等。
文件读取漏洞允许攻击者读取私密文件,威胁服务器安全。SSRF漏洞则利用服务端的请求功能,攻击内部系统。命令执行漏洞和XSS漏洞分别涉及恶意命令注入和网页代码注入,需对用户输入进行严格检查。
二进制类题目中,Android题目多关注逆向和杂项。逆向涉及Java/C++的分析和调试,静态与动态分析是常用手段。代码保护和混淆增加了逆向难度,而符号执行和插桩则是解题工具。
PWN题目聚焦于利用漏洞获取权限,需要强大的逆向和数学能力。密码学题型对参赛者的数学和逻辑思维要求极高,挑战性日益提升。
掌握这些题型,对于新入门的CTF选手来说,是提高解题技能和理解深度的关键步骤。每个领域都有其独特技巧和策略,需要深入学习和实践才能在游戏中脱颖而出。
pwn基础— Got表劫持
随着技术的发展,攻击者越来越重视对软件的深入理解,其中对GOT(全局偏移表)的劫持技术成为了渗透测试中的一种重要手段。本文将对GOT表劫持的基础知识进行深入讲解,包括其原理、流程、检测方法、保护机制、源码分析以及利用脚本的编写和动态调试分析。
程序信息方面,我们以ELF程序为例。由于延迟绑定机制的存在,GOT是可以被修改的,这为攻击者提供了任意控制程序流程的可能性。劫持原理主要分为两步:首先,在未执行漏洞函数前,GOT中的特定地址存储着真实的函数地址;然后,通过执行漏洞函数,将该地址修改为攻击者想要的函数地址,如system函数,从而在再次调用原函数时,其行为被改变了。
检测保护机制时,通常使用检查安全工具来分析程序的安全性。在本例中,程序仅开启了Canary保护和部分RELRO保护,这意味着堆、栈、BSS段代码可执行,但GOT仍然可写。这为GOT劫持提供了条件。保护机制的全称为RELRO(Relocation Read-Only),通过设置全RELRO,可以防止GOT劫持,因为在加载时将所有函数绑定完成,GOT被设置为不可写。
分析源码是理解攻击流程的关键步骤。题目直接提供了源码,通过仔细阅读,我们可以发现puts@plt地址和全局变量name的地址,这是进行GOT劫持和shellcode注入的基础。
编写利用脚本是将理论知识转化为实践的环节。通过编写并执行exp脚本,成功实现了getshell,验证了攻击流程的有效性。动态调试分析提供了更直观的视角,通过在关键位置设置断点,观察内存内容的变化,确认shellcode的注入和目标地址的修改,最终实现目标函数的劫持。
综上所述,GOT表劫持技术是渗透测试领域中一种复杂且强大的攻击手段。通过深入了解其原理、流程、保护机制和利用方法,可以有效提升安全意识和防御能力。对于开发者而言,及时更新安全保护机制,如全RELRO保护,可以有效防止GOT劫持,保障软件的安全性。
Pwnhub春季赛相关体验及wp
首次参加Pwnhub举办的大型公开赛,体验令人满意。Pwnhub的声誉名副其实,比赛中只有四个解题,且难度集中在easyrop。比赛前期的宣传充分到位,Pwnhub历来以举办公开月赛闻名,此次公开赛规模空前,奖励丰厚。
比赛题目多样,涵盖了web、misc、crypto、re、pwn等多个方向,还加入了ACM、OCR、以及汇编等不同类型的题目,甚至引入了网页版的传奇游戏,以减轻比赛的枯燥性。题目设计全面,从多个方面考验参赛者的个人能力。
比赛流程流畅,靶机启动迅速,不限制数量,后期取消了靶机时间限制,但在所有靶机都开放在同一IP地址上,端口号可以遍历,加之不是动态flag,可能导致蹭取flag的情况。
首次在CTF比赛中遇到使用Flash游戏的题目,新颖有趣,促使我迅速安装Flash并进入主办方设置的游戏。游戏类题目共有四个小题,最后一个题需要获取服务器的shell,可以视为半个web挑战。
注册账号,创建角色登录游戏,发现公告栏中明确显示了flag,十分友好。下一步是购买题目中的元宝召唤道具,但需要通过抽奖将绑定元宝转化为元宝,再购买。打死召唤出的怪物后,会掉落flag之书1,注意掉落的flag之书可以被其他玩家捡走,谨防被抢,我的flag为flag{ nonono_notmola}。
主办方放出服务器源码,虽然经过修改,但仍能从中找出一些漏洞。从log.php中可以获取生成token的密钥,允许任意用户登录其他账户。在log.php中,理论上存在注入漏洞,但线上复现不成功。web方面的其他漏洞未能发现,获取shell需要对游戏服务器文件进行逆向工程。
web部分考察知识新颖且难度适中。在EzPDFParser中,通过java写的PDF解析器在解析PDF时触发log4j2漏洞,搭建恶意JNDI服务器,修改PDF文件即可触发漏洞。在easyCMS中,通过测试MySQL联通性,利用MySQL读取文件,通过Rogue-MySql-Server实现,使用PHP脚本操作。
在baby_flask中,利用flask模板渲染不会更新的问题,通过生成个模板并在缓存刷新时执行payload,即可获取flag。Misc部分需要使用裸眼3d技巧,借助stegsolve工具将两张图分开,获取flag{ nice_pwnhub}。在其他页面的签到中,通过关于页面的视频中的二维码找到flag。
比赛持续小时,时间较长,但某些类别的题目数量似乎不是很多,如web部分,队伍数量较多,完成三个题后,期待后期上新题,可惜未能如愿。整体体验良好,通过赛题学习到许多知识,期待Pwnhub举办更多类似的公开赛!
pwntools处理ELF文件中plt与got表获取
在pwntool源码中,elf.py中的elffile处理ELF文件获取section。
elffile.py中的get_section逐个获取section_header,通过判断'sh_type'属性来确定section类型,方便后续处理。
ELF文件包含多种section,每种section类型在section header中有对应描述,例如:
ELF文件中的section类型包括但不限于:SHT_NULL(无效section header),SHT_PROGBITS(程序数据部分),SHT_SYMTAB/SHT_DYNSYM(符号表),SHT_STRTAB(字符串表),SHT_RELA/SHT_REL(重定位表),SHT_HASH(哈希表),SHT_DYNAMIC(动态链接信息),SHT_NOBITS(不占空间的section),SHT_SHLIB/SHT_LOPROC/SHT_HIPROC/SHT_LOUSER/SHT_HIUSER(特殊用途section)。
依据section类型,elffile.py中的_make_section函数调用特定类进行处理。例如,针对SHT_HASH,调用_make_elf_hash_section,并最终指向ELFHashSection,用于从ELF文件读取section数据。
获取ELF文件的section后,可以进一步获取symbol表、plt表与got表。
在_populate_symbols函数中,判断section是否属于SymbolTableSection,对应于_make_section()中检测sectype为SHT_SYMTAB、SHT_DYNSYM或SHT_SUNW_LDYNSM。iter_symbols返回sec._symbols,每个symbol对象包含name和value,若value非零,则将name和value关联存入self.symbols。
在_populate_got中,处理静态链接时关注relocation section,对应sectype为'SHT_REL'和"SHT_RELA'。若symbol和name非空,则对self.got进行赋值。
在_populate_plt中,首先处理self.got和self.symbols,读取到内容后,将section.data()的范围内,即以section.header.sh_addr为起始地址,以section.data()长度为范围,4字节对齐进行扫描。选取对应函数和其地址存入self.plt。
最终,通过这些步骤,实现了对ELF文件中self.symbols、self.got和self.plt的获取。