1.Nftables CVE-2023-0179提权利用
2.双眼rop是码解什么意思?
3.CTF(Capture The Flag)Pwn基础
4.夺旗赛 CTF 六大方向基础工具简介集合
5.kali 2020.3 å®è£
pwnç¯å¢
6.请问懂汇编的人:rsp寄存器有什么用
Nftables CVE-2023-0179提权利用
在分析了CVE---Nftables整型溢出漏洞的成因之后,本文接下来将深入探讨如何利用这一漏洞。码解首先,码解了解到payload_eval_copy_vlan函数中存在整型溢出问题,码解这使得我们可以将vlan头部结构拷贝至寄存器(NFT_REG_-NFT_REG_)中,码解而该变量位于栈上,码解播放器源码vip因此可以覆盖到栈上的码解其他变量。
然而,码解观察源码后发现regs变量无法直接覆盖到返回地址。码解进一步分析后发现,码解jumpstack变量位于regs变量下方,码解因此可以利用整型溢出覆盖到jumpstack变量。码解接下来,码解我们关注nft_jumpstack结构体,码解该结构体在nft_do_chain函数中起作用,码解当状态寄存器被设置为JUMP条件时,程序将跳转至其他chain进行处理。保存完当前chain状态后,程序将跳转至目的chain,即存储在regs.verdict.chain中。
还原chain的过程涉及通过递减stackptr来取出存储在jumpstack变量中的chain、rule、lastrule,然后进行rule的解析。需要注意的mnn 源码是,在遍历rule时,循环条件为rule < lastrule。因此,在伪造lastrule时,需要确保其值大于rule,否则无法进入循环内部。
接着,观察nft_rule_dp结构体,发现其中包含用于存储nft_expr结构体指针的八个字节。通过篡改该指针,可以劫持程序流程。为了解决这一问题,作者从ctfiot.com/.html中学习了一个技巧:使用ptype /o struct xxx显示结构体信息与偏移。
构建流程如下:通过漏洞溢出至nft_jumpstack结构体,并修改rule变量指向可控内容的地址。同时,将lastrule值篡改为大于rule的值。接下来,在可控内容中伪造一个nft_rule_dp结构体,篡改第一个八个字节(填充位)和第二个八个字节(函数表指针)的值,使其分别指向可控内容的地址。之后,在该地址处伪造nft_expr,将ops变量指向所需执行的raction源码函数。
分析后得知,通过上述手段可以实现程序流程的劫持。接下来,需要考虑如何伪造上述结构体。在nft_payload_copy_vlan函数中,漏洞点在于将vlan头数据复制到寄存器中,由于vlan头地址低于寄存器地址,导致在复制完vlan头后会覆盖寄存器值。这里,我们可以通过控制NFT_REG_的值来实现对jumpstack结构体的篡改。
由于可以控制regs变量,首先泄露regs地址,然后在此基础上伪造rule并重新指向jumpstack。这里采用将last_rule设置为函数地址的技巧,以节省八个字节的空间。然而,仅控制八个字节的函数指针不足以构造完整的ROP链,因此需要使用栈迁移。栈迁移的目标是控制一段内存,选择regs作为目标。
在寻找合适的栈迁移gadget时,作者使用了vmlinux-to-elf工具提取符号表,然后利用ropper工具搜索gadget。但尝试后发现大部分gadget不可用。pigz源码作者最后尝试使用objdump工具提取gadget,并通过搜索add rsp.*等指令找到栈迁移的gadget。进一步计算栈顶与regs函数地址的差值,找到相应的栈迁移gadget。
在提权方面,作者通过覆盖modprobe_path实现提权。选择合适的gadget将rdi设置为modprobe_path,rax设置为覆盖后的路径。然而,在返回到nf_hook_slow函数时,由于设置了rax值导致状态码无法正确设置,程序跳转至NF_DROP分支,导致内核异常。最终,作者在rbp中找到了一个do_softirq函数,并尝试将其作为返回地址。运行后发现程序能够正常返回到用户态。
最后,验证新用户是否已写入至/etc/passwd文件中,完成提权过程。完整exploit代码可参考github.com/h0pe-ay/Vuln.../poc.c。相关资料参考链接包括github.com/TurtleARM/CV...
双眼rop是什么意思?
ROP是“Return-Oriented Programming”的缩写,它是一种利用代码库(code gadget)和栈上数据(stack data)的技术,可以绕过程序本身的Blackcat源码安全机制实现攻击。这种攻击方式需要找到一个可以跳转到已知代码库中的地址,通过多次跳转执行一系列有意义的操作构建恶意代码。
ROP攻击的原理就是利用程序的栈溢出漏洞,通过查找已有的可信代码,将这些代码拼装成恶意代码,最后把控制权交给这段代码来控制目标计算机。由于ROP攻击选择的代码段本身是完整,不需要注入任何恶意代码,因此它很难被传统的安全防御技术所检测和拦截。
为了抵御ROP攻击,我们需要从多个方面入手。首先,应该尽量减少程序中存在的漏洞,通过加强代码审计和漏洞修复来提高程序的安全性。其次,可以采用随机化技术来破坏攻击者的代码拼接,使其难以预测,并增加攻击的复杂度。最后,可以使用ROP Guard等防御机制,检测非法代码跳转,从而遏制ROP攻击的发生。
CTF(Capture The Flag)Pwn基础
掌握CTF(Capture The Flag)Pwn基础的关键在于深入理解计算机系统原理,特别是二进制漏洞、内存管理、堆栈溢出和格式化字符串漏洞等概念。要熟知内存布局、堆栈、堆和寄存器等术语,以及函数调用的规则。熟悉Pwn工具,如pwntools、ROPgadget和angr,这些工具能简化Pwn挑战的解决过程。
在开始实践时,首先解决跨平台问题。由于 位程序不适用于MAC M1,需将程序部署在VPS服务器上,并确保其支持位程序。通过端口转发工具socat,可以在M1上实现远程操控,同时关闭地址随机化,以降低实验难度。
利用IDA Pro分析程序的静态代码,定位到getfruit函数,其存在缓冲区溢出漏洞。当用户输入超出v1数组长度的字符串时,能够覆盖栈上的敏感信息。目标是利用这个漏洞使getfruit函数调用getflag函数,获取隐藏的flag。
由于这是一道初级题目,已关闭了栈保护和金丝雀保护机制。接下来,利用gdb定位getflag函数地址,然后使用Python 2.7版本的pwn库进行实际的缓冲区溢出攻击,执行成功后即可获取flag。
对于MAC M1用户,要注意,由于conda默认不支持创建Python 2.7环境,需要采取特定步骤来安装和配置。
夺旗赛 CTF 六大方向基础工具简介集合
夺旗赛 CTF 六大方向基础工具集锦 在CTF挑战中,不同的方向需要相应的工具来应对。以下是六个主要方向上必备的基础工具,帮助你解决各类难题:MISC方向
图像隐写工具: Stegsolve.jar, 用于解码和处理图像隐写信息;QR_Research.exe用于二维码扫描;Audacity.exe处理音频隐写;outguess支持多种格式文件的开源隐写算法;MP3STEGO.exe专门针对音频隐写。
压缩包与取证: Editor进行文本编辑;WinHEX处理十六进制数据;archpr破解压缩包密码;WinRARa、7zip解压工具;ZiperelloZIP支持密码破解;AccessData_FTK_Imager用于磁盘镜像取证。
网络取证: Wireshark分析网络封包;fiddler2抓取HTTP数据;
环境: Kali Linux和WSL用于数字测试;Java和Python环境支持众多工具;
WEB方向
渗透测试: Burp Suite集成平台,HackBar浏览器插件,sqlmap进行SQL注入;Pangolin3.2.4同样用于SQL注入检测。
Web环境: phpStudy调试环境,PuTTY远程连接,Termite跳板机管理工具;SecureCRTSecureFX连接Linux服务器;WinSCP支持多种协议的文件传输;
其他: phpMyAdmin用于数据库操作,sunny-ngrok提供内网穿透,IP定位和代理池管理。
Crypto工具
密码学综合: CTFCrackTools, CyberChef, pyg密码学工具,CAP4教学加密工具;
单项加解密: RSATool v处理RSA,yafu用于因式分解;TextForever转换文件格式;小葵工具支持编码转换和解密;
在线工具: CTF在线工具库和wiki提供资源。
Reverse方向
反编译器: IDA Pro,Exeinfo PE,OllyDBG动态追踪;CAsm静态反编译;python反编译工具如pyinstxtractor和Uncompyle6。
Pwn方向
Python库: pwn库,gmpy2高精度计算,base和requests处理网络请求;Pillow图像处理。
Kali Linux工具: checksec检测文件保护,gdb、file和objdump进行调试分析。
ROP: ROPgadget辅助寻找ROP gadgets。
Mobile方向
Java反编译: JEB Decompiler,jd-gui,jadx反编译APK;
ARM汇编: SH汇编修改工具,Arm汇编转换器;
解包与运行: ABE.jar、Apktool、dex2jar等工具;MUMU、BlueStacks、Virtualbox、夜神模拟器用于安卓应用测试。
kali .3 å®è£ pwnç¯å¢
é ç¯å¢èªç¨
æ°ç使ç¨æ¹æ³ï¼
ROPgadgetåºç°é误ï¼
å ¶å®å¾ç®åï¼
æ示ç®å½/usr/local/lib/python2.7/dist-packages/ROPGadget-5.8.dist-info没æscripts/ROPgadgetã
éæ°cpä¸ä¸ªå°±è¡äº
å°±è¡äº
åèæç« ï¼/Cony_/article/details/
åèæç« ï¼/qq_/article/details/
请问懂汇编的人:rsp寄存器有什么用
rsp寄存器就是指向栈区的寄存器,看main函数开始是,栈区已经有了返回地址,当main函数执行完毕后,通过函数尾部的ret指令就会到libc_start_main + 处,这就是用于函数调用call ret,然后程序又会使用sub rsp,0x来开扩局部变量的内存,也就是s,s总共0x()个空间,而且s地址在程序放回地址的上方,当正常输入大于个数量时,此时程序的返回地址就会变成我们可控的数据,从而控制程序流程。
扩展资料
首先来控制没有任何保护的程序,因为没有任何保护。所以栈区可以执行,通过jmp rsp,或call rsp 就能执行shellcode,我们使用ROPgadget工具来找到这个指令(pwntools附带)ROPgadget --binary example --only 'jmp'|grep rsp。
但是无论是call rsp和jmp rsp都无法找到,这时可以通过libc库来寻找指令,libc库就和windows的dll类似,时所有动态链接linux程序都会加载的,但是基地址随机,所以要泄露libc地址,这个程序的返回地址就是在libc中。
所以可以用来泄露libc基地址,所有libc函数都在libc中(也就是scanf,read)等函数,大部分都在各种加载库中,而libc库就是一个必须的加载库。
只要输入个字符,就能泄露这个地址,因为read函数不会产生\x截断,所以输入个字符,此时个字符后就是libc中的地址,没有\x截断符号,所以因为puts(s)就会将libc地址输出,此时libc中有jmp rsp指令。