ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:33.55KB ,
资源ID:12535626      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12535626.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Perl黑客编程.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Perl黑客编程.docx

1、Perl黑客编程 Perl 黑客编程一. Perl简介Perl是Practical Extraction and Report Language的编写,它是由Larry Wall设计的,主要用于UNIX环境下编程,当然目前它也是只支持Windows系统的,本文主要也是讲在Windows下的Perl编程,并侧重于黑客安全方面。Perl如脚本语言一般,无需经编译器来编译才能运行代码,应用起来也很简便,特别是用它来写exploit尤为流行。据统计,目前世界上有70%的exploit是用Perl来编写的。在国内,由安全焦点出版的网络渗透技术一书提到的主要编程语言中,主要有perl,c,asm三种,书中

2、提到在阅读此书的预备知识中就要求熟悉C,Perl,Asm,由此可见,perl语言在国内安全方面的应用也是占有一席之地的。在国外著名漏洞公布站点milw0rm中,我们也可以经常看到用perl编写的exploit,无论是在脚本攻击中,还是在系统漏利用中,特别是在溢出攻击中,都可以经常见到它的身影。除此之外,有些安全人士也用它来编写Fuzzing工具,用于挖掘漏洞。另外,本文讲述的只是Perl语言中的冰山一角,如果读者想深入学习该语言的话,建议学习一下官方文档或者其它编程书籍。TAG: 黑客 Perl二Windows下的Perl环境搭建在开始Perl编程之旅之前,读者需要先下载两样工具:Active

3、Perl和EditPlus。ActivePerl是一款Perl解释器,可在AIX, HP-UX, Linux, Mac OS X, Solaris 和Windows等多操作系统平台下使用,使用起来也很简便,直接双击编写好的*.pl文件(perl的文件格式)(这种方法可能会在未看清楚输出结果就自动关闭了,但如果你只是为了生成某个文件,就可以直接使用这种方法,比如在本地溢出利用中用于构造可触发溢出的文件)或者在DOS下输入如下命令即可: perl example.plEditPlus 是 Windows 下的一个简便的 Internet 32 位文本编辑器、HTML 编辑器和程序设计员的编辑器,支

4、持 HTML、CSS、PHP、ASP、Perl、C/C+、Java、JavaScript 和 VBScript 等多种语言的代码高亮显示,使用者也可根据自己需要到其官方网站下载语言包去支持其它语言(如汇编语言)的代码高亮,读者可也根据自己喜好选择其它编辑器,如Notepad+。现在我们可新建一个example.pl:print Hello World !n;然后打开DOS进入example.pl文件所在目录,输入命令:perl example.pl后,执行结果如下所示:d:perl example.plHello World!三基础知识在Perl中,变量的定义是在变量名之前加上符号$,完成后记

5、得加分号;例如:$x = 123;(十进制数,注意分号的使用,这跟C语言是相同的。)$y = 0xff;(十六进制数)$z = -32.2;(浮点数)$string = “ Im riusksk.n”;(对于包含空格的字符串要加双引号,是英文输入法中的双引号,而非中文的双引号。如果无空格,那么不加引号也是可以的。除此之外,单引号也是可以的,除非字符串中已经含有单引号,就像这一句就只能使用双引号了,但是使用单引号后,不能解释转义符,也就是说,如果使用了单引号,那么它就会把n之类的转义符直接输出,而不是换行。)一些常见的转义符如下:n New LinerReturntTabfForm FeedbB

6、ackspacevVertical TabeEscapeaAlarmL Lowercase AlllLowercase NextUUppercase AlluUppercase First在perl中,#是不为解释器所解释的,它是作为注释符来使用的,比如将以下代码保存为riusksk.pl文件:$name = “riusksk n”; #my nameprint $name;那么运行后它会直接输出:d:perl riusksk.plriusksk现在我们将上面的代码改成:$hello = “Hello,”;$name = “riusksk!n”; #my nameprint “$hello”$

7、name”;输出结果如下:d:perl riusksk.plHello,riusksk!在这里点号“”起到一个连接字符串的作用,在后面关于溢出exploit编写中,你就可以体会到它的方便之处了,而且增强了代码的易读性。接下来,我们讲讲关于操作符方面的知识。算术操作符主要有:+(加)、-(减)、*(乘)、/(除)、*(乘幂)、%(取余)、-(单目负)。整数比较操作符主要有: (大于)、=(等于)、= (大于等于)、!= (不等于)、 (比较,返回1,0,或者-1)。字符串比较操作符主要有:lt (小于)、gt (大于)、eq(等于)、le (小于等于)、ge (大于等于)、ne (不等于)、cm

8、p (比较,返回1,0,或者-1)。下面我们实例操作一下,以巩固知识。输入以下代码并保存为riusksk.pl:$a = 1+2;$b = 4-3;$c = 5*6;$d = 6/2;$e = 21;$f = 3!=4;$g = “A” eq “A”;$h = “A” cmp ”B”;print “$a”.”t”;print “$b”.”t”;print “$c”.”t”;print “$d”.”t”;print “$e”.”t”;print “$f”.”t”;print “$g”.”t”;print “$h”.”n”;输出结果如下:d:perl riusksk.pl3 1 30 3 1 1

9、1 -1四数组数组是用来存储列表的,与变量不同,它允许在perl程序中使用一序列值,可以为任意数值,也可为空,数组变量是以字符?开头的。为了理解它,我们需要去实践操作一下。先在riusksk.pl中输入以下代码: hello = (?Hello?,?World?);print hello;运行后输出结果如下:d:perl riusksk.plHelloWorld在这里,我们可借助join()函数在HelloWorld之间加入空格,具体代码如下:hello = (?Hello?,?World?);print join(? ?,hello);运行结果:d:perl riusksk.plHello

10、World对于数组元素的读取可以通过下标来实现,首个元素的下标为0。如果读取的是不存在的元素,那么它将返回NULL,但如果给超出数组大小的元素赋值,那么数组就会自动增长,原来没有的元素为NULL。比如:hello = (hello,world);print $hello0.n;print $hello1.n;print $hello2.n;输出结果:d:perl riusksk.plhelloworldd:下面我们再讲一个函数?split()函数,主要功能是以某种字符来分割句子以转存到数组中,然后从数组中提取数据以作为他用。下面我们还是以实例进行讲解:$sentence = Hello eve

11、ryone ! my name is riusksk. ;words = split( , $sentence) ; #这里 也可写成/ /(中间有空格),即以空格为间隔符print join( ,words);输出结果:d:perl riusksk.plHello everyone ! my name is riusksk.五条件与循环语句1. 条件判断语句经典的条件判断语句莫过于ifthen语句了,它几乎存在于每一种编程语言中,它在perl中基本格式如下:if (express1) statement1elsif (express2) statement2else statement3例如

12、:$name = riusksk;if ($name eq riusksk) print youre riusksk.n;elsif ($name eq quange) print youre quange.n;else print I dont know your name !n;输出结果为:d:perl riusksk.plyoure riusksk.2.循环语句对于循环语句,我们这里主要下面四种循环语句:while循环,until循环,for循环,foreach循环。(1)while循环语句格式:while (express) statemet例如:$x = 1;while ($x pe

13、rl riusksk.pl5(2)until循环语句格式:until (express) statemet例如:$y = A;until ($y ge C) $y+;print $y;输出结果:d:perl riusksk.plC(3)for循环语句格式:for ($i=1; $i =5; $i+) statement例如:for ($i=1; $i perl riusksk.pl1 2 3 4 5(4)foreach循环格式:foreach $num (array) #num为数组array中的元素statement 例如:array = (10,20,30,40,50);foreach $

14、num (array) if ($num = 10) $num = 30; print join( ,array);输出结果:d:perl riusksk.pl30 20 30 40 50六用户数据获取(1)STDIN当编写exploit的时候,我们有时需要获取用户的输入数据,比如IP地址,以便使程序根据用户的意图来执行相应的工作。对于这种情况,我们可以使用STDIN(标准输入)方法来获取用户的输入数据。例如:print Whats your name?n;$name = ;chomp $name; #去除换行符,因为输入数据通过STDIN获取后会自动添加换行符nprint Hello,$na

15、me.Nice to meet you !n;输出结果:d:perl riusksk.plWhats your name?riuskskHello,riusksk.Nice to meet you !(2)ARGV除以上方法之外,我们还可以使用ARGV。如同数组一般,ARGV支持用户参数,这跟C语言中的argv,argc类似,在很多perl exploit中经常可以见到它。比如我们在对目标主机进行溢出攻击时,经常可见到像下面的指令:perl exploit .pl 127.0.0.1 3424127.0.0.1是目标主机的IP地址,3424是端口号。下面我们举例讲解一下ARGV的使用,以下代码

16、将输入参数和保存在ARGV数组中,而$0是用来代替被perl解释器所解释的文件名(比如perl riusksk.pl中$0=riusksk.pl):if (ARGV != 2) print “Usage: perl $0 n”;exit;($IP , $Port) = ARGV;print “IP Address: $IP, Port is $Port.n”;输出结果:d:perl riusksk.plUsage: perl riusksk.pl d:perl riusksk.pl 127.0.0.1 1234IP Address:127.0.0.1,Port is 1234.(3)GetOp

17、t这里我们再讲述另一种获取用户输入数据的方法,这是一种叫做GetOpt的perl模块。请看下列代码:use Getopt:Std; #导入GetOpt STD模块,取消模块用no语句getopts (:a:p:, %args); #定义两个标志-a 和 -p分别用来获取参数if (defined $argsa) #若已给标志-a中的参数赋值,则将参数值赋予变量$a$a = $argsa;if (defined $argsp) $p = $argsp;if (!defined $argsa or !defined $argsp) #如果有一个参数未输入则输出以下语句并退出print Usage:

18、 perl $0 -a -p n;exit;print IP Address: $a, Port is $p.n;输出结果:d:perl riusksk.plUsage: perl riusksk.pl -a -p d:perl riusksk.pl a 127.0.0.1 p 1234IP Address: 127.0.0.1, Port is 1234.以上三种方法以最后一种最为常用了,常用于编写exploit。七文件读写 在编写本地溢出exploit时经常要构造一个可触发溢出的文件,这里就需要对文件进行读写了。要对某文件进行操作需要先打开文件,打开文件的语法如下:open (fp,” f

19、ilename”),其中fp为文件句柄,可以理解为文件的代号,filename是文件名,其路径可为相对路径,也可为绝对路径。例如:open(fp,”exploit.mp3”);open(fp,”c:/hacking/exploit.mp3);如果我们想创建一个不存在的文件可以使用下列语句:open (fp,”exploit.mp3”);如果打开失败,我们可以结束程序,那么以上代码可更改为:unless (open(fp,”exploit.mp3”) die (“open file failn”);成功打开文件之后,我们就可以对其进行读写了。读取文件的语法为:(1)$line=:从文件中读取一行

20、数据并将其储存到变量$line中,而且文件指针会向后移动一行。(2)array=:读取文件的所有内容并将其储存到数组array中,而且文件中的每一行(包含回车符)为array中的一个元素。写文件的语句如下:print(fp,”hellon”);对文件操作完成后,需要关闭文件:close (fp);下面我们举个例子来进行文件读写操作:if (open(fp1,exploit.txt) print (create file sucessful!n);else die(create file fail !n);print fp1 (riuskskn.quangen);close (fp1);unle

21、ss (open(fp2,exploit.txt) die (open file failn);array= ;print (the content of exploit.txt : n);print array;close (fp2);输出结果如下:d:perl riusksk.plCreate file sucessful !The content of exploit.txt :riuskskquange八子程序(1)子程序的定义方法:sub function statement;调用时可在子程序名前加&,或者先定义后直接以子程序名调用(省略&),也可先定义子程序名,再定义程序体。(2)

22、参数格式:&function ($arg1,$arg2,$arg3);sub function my ($arg1,$arg2,$arg3)=array;(3)局部变量局部变量的定义方法有两种:my和local,其中my定义的变量只存在于子程序中,而local定义的变量不存在于主程序中,但存在于子程序及该子程序调用的子程序当中。例如:my ($name) = riusksk;local($num)= 1;九LWP模块LWP (Library for WWW in Perl 的缩写) 是一个由多个模块组成,主要用来获取网络数据的一个模块组。LWP包含有许多模块,通过它我们就可编写perl脚本来访

23、问外部的WEB服务器上的资源了,关于LWP各模块的更多信息可以访问以下地址获得:http:/search.cpan.org/gaas/libwww-perl/这里我们只讲LWP:Simple和LWP:UserAgent这两个模块。(1)LWP:SimpleLWP:Simple是LWP的一个简单程序接口,它主要有以下函数: get($url) 获取指定URL地址的网页内容,如果没有发生错误,get 函数返回此网页,否则,返回undef。 head($url) 获取指定URL地址的页面头信息,如果成功则返回($content_type, $document_length, $modified_ti

24、me, $expires, $server)五个变量值,即依次为内容类型,文档长度,最后更新时间,过期时间和服务器名称。 getprint($url) 获取并输出指定URL地址的网页内容,它返回一个状态号,比如成功将返回200,文件没有找到将返回404。 getstore($url,$file) 获取指定URL地址的网页内容并保存在文件$file中,返回值为也是状态号。例如:use LWP:Simple;$a=getprint();print n;print $a;print n;my ($b,$c,$d,$e,$f)=head();print $b.n.$c.n.$d.n.$e.n.$f;g

25、etstore(/Article/UploadFiles/200912/20091219145544327.jpg); system(riusksk.jpg); #打开图片sleep(5); #延时5秒unlink(riusksk.jpg); #删除图片输出结果如下:D:软件perl riusksk.plXX一下,你就知道 bodymargin:4px 0省略部分内容把XX设为主页加入XX推广 | 搜索风云榜 | 关于XX | About Baidu©2009 Baidu 使用XX前必读 京ICP证030173号 省略部分内容200text/html;charset=gb231235201256476657BWS/1.0然后打开下载的图片riusksk.jpg,接着停顿5秒后,再

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1