星与酸咪咪

十年树木,百年树袋熊

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  14 Posts :: 15 Stories :: 5 Comments :: 0 Trackbacks

常用链接

留言簿(22)

我参与的团队

最新随笔

搜索

  •  

积分与排名

  • 积分 - 6366
  • 排名 - 1418

最新评论

阅读排行榜

评论排行榜


      今天我知道shellcode了,原来我之前编的那些远程线程,给pe添的代码都叫shellcode,就是有通用性的都叫shellcode
      书上给了个c写的shell挖!痛苦死,一大堆限制什么不用静态量,switch只用三分支,还有连接选项要去掉某某,定义的时候用一堆宏,对齐也是,但是有一点很明显,就是他要逃避重定位!!
      好吧,竟然他能实现就是好的,至少我可捂不出能完美躲避重定位的办法,我喜欢汇编.
      重定位的文章之前写过一篇了,有兴趣去看看吧.总之定位api呢,又多了总方法找kernel32,就是遍历SEH链到链尾,handler就会指向kernel32的函数叫啥UnhandledExceptionFilter.后面都一样了还有一种方法fs:[30h],它指向peb,peb里面有个ProcessModuleInfo

      进入正题.
      首先大部分的溢出都是靠字符串输入搞的,所以先输入一串,然后到堆栈里找,找到了,好第一个字节就是shellcode的起点,以后要ret到它,或者异常到它,然后找原来的ebp,用0012比较好找(我猜,堆栈位置的前两字节),或者妈的执行到ret看他堆栈弹到哪.,好这下知道ret的地址了,接下来就漫漫构造吧,不过还有一个小问题,必须避免0的出现,因为它让code结束(字符串结束),所以要在你的shellcode里面找个没出现过的字节值(编个循环来找吧),然后对你整个code异或,当然你要在code前加解或(异或)的代码,不要告诉我你解或的代码里有0
      之前说的那个改ret地址,还可以改SEH的异常处理函数的地址,搜索mov fs:[0],esp或者push fs:[0]下断,要不你搜堆栈里的地址-4就是值的地方

      一切指针都是可能惊喜的地方,利用api的指针参数也可以

      如果有对象的输入操作,就算它在堆上,也可以尽其空间,
      对于特定系统,吗的api都不用重定位,直接call,

      可以修改的范围达到父函数的变量或者参数,你要取舍改或不改(你先把原值调查清楚吧),考虑shell的功能,那些可以把shellcode移到更安全的地方,还原之前的变量等等,心情好给shellcode安个seh

posted on 2007-09-03 21:08 0down274 阅读(97) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理