SQL注入各类型 讲解及利用 (二)

3. 常见网站架构

我们可以通过常见构架来判断数据库的类型

asp + access

asp + mssql

asp.net + mssql

php + mysql

Jsp + oracle

Jsp + mysql

具体得到采用什么模型,需要通过扫面工具,或得到的网站默认错误信息等获得.

4. 获取信息,提权

知道某个点存在注入以后,要获得数据库的内容,最直接的办法是使用union

UNION注入

UNION是数据库管理员经常使用且可以掌控的运算符之一

可以使用它连接两条或多条SELECT语句的查询结果

其基本语法如下:

SELECT colum1,colum2,colum3,…,columN FROM table1

UNION

SELECT colum1,colum2,colum3,…,columN FROM table2

如果应用返回第一个(原始)查询得到的数据
那么通过在第一个查询后注入一个UNION运算符,并添加另一个任意查询,便可读取到数据库用户有权限访问的任何一张表

当然这么好用的语句是有限制的

使用 UNION获取数据规则:
两个查询返回的列数必须相同
两个 SELECT语句返回的数据库对应的列必须类型相同或兼容

通常只有终止式注入时,可较快猜解并利用,否则要知道原始的SQL语句才能比较方便的利用

UNION语句的构建

例:

0x01 确定列数量:

UNION SELECT null,null,null,…,null FROM dual

使用逐步增加null数量,直到匹配原语句的列数量,成功匹配后返回正常页面

这是利用了两个查询返回的列数必须相同这个原理

使用ORDER BY确定原语句列数量, 可使用折半查找法提高猜测效率

0x02 确定列类型:

UNION SELECT 1,’2’,null,…,null FROM dual

我们这里先猜测第一列为数字,如果返回结果不正确,则判断为字符

如果还是不正确则保持null不变(可能为二进制类型),之后依次完成部分或全部类型的判断


当然,每种方式都有不适用的情况

Union不适用的地方

注入语句无法截断,且不清楚完整的SQL查询语句
Web页面中有两个SQL查询语句,查询语句的列数不同

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值