webshell初探,buu20

场景:

buu 刷到20题, 使用了ret2lib拿到了flag

但是网上的解法都是写webshell,那就写一个试试水

 

总所周知:地址随机化,或者说模块的重定位  这里说的模块 包括dll,so,sys,可执行文件等

只要这个文件中有重定位表,即可进行地址随机化,同时意味着如果没有基址,就无法调用的正确的函数,直接crash

 

让我们再来看看call jmp,取全局变量等操作  要么是使用了相对偏移,要么使用了绝对地址

相对偏移在 任何情况下,针对自身模块的操作总是正确的  //不扩展开讲了

绝对地址 只有在模块加载到固定位置才能正常运行

 

让我们看看正常的实验环境

     地址随机化开了

     写入的shellcode虽然空间上是某个模块内(一般是可执行文件) 但是我们不知道任何地址的情况下,也用不了相对地址  

     考虑一下极端情况,当可执行文件自身也进行地址随机,由于不知道基址, got 表 ,plt表等也使用不了

 

那么就没有什么东西是随机不了的吗

    存在的,比如说 gdt 由于gdt表的基址存在gdtr中 ,所以地址随机化对齐无效 ,当然3环情况下gdt也不好使

    但是和gdt类似的还是存在的 ,比如说 tr 寄存器  idtr 中断表寄存器等

 

那么中断能做什么,确切来说,中断一般是从3环到0环,idt[index] 里能找到入口点

大部分重要函数最后都是要通过中断门,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值