SQL注入漏洞,常用注入函数及其pakachu漏洞靶场演示

目录

SQL注入漏洞概述

SQL注入的常用函数

漏洞分类与利用

1.基于联合查询的SQL注入

2.盲注

时间盲注(base on bool)​编辑

3.宽字节注入

4.inset/update/delete注入

5.header注入

1.HTTP头部详解

2.漏洞利用


SQL注入漏洞概述

SQL:是操作数据库数据的结构化的查询语言,实现对网页应用数据和后台数据库的交互。SQL注入是将表单域或数据包输入的参数,拼接成的SQL语句,传递给Web服务器,进而传给数据库服务器并得到执行,达到获取数据库信息的目的。如果Web应用程序的开发人员对用户输入的数据或Cookie等内容未过滤或者验证就直接传给数据库,就可能导致恶意的SQL语句被执行,进而获取数据库的信息,造成SQL注入攻击。

SQL注入漏洞产生的主要原因:

  1. 用户可以控制前端传给后端的参数。
  2. 传入的参数被拼接到SQL语句中,并被执行。
  3. 用户输入的参数未被验证或者过滤。

SQL注入的常用函数

1.concat函数

concat函数主要功能就是将多个字符拼接成一个字符串

  • 语法:concat(str1,str2,......),返回的结果为连接参数生成的新字符串,如果有任何一个参数为NULL,则返回值就为NULL。

将数据表中多列数据排成一列,便于显示结果,concat_ws函数和concat函数类似,区别是concat—ws函数可以指定分隔符,其语法为:concat_ws(separator,str1,str2,...),需要注意的是分隔符不能为NULL,如果为NULL,则返回结果为NULL。group_concat函数也和concat类似,区别是group_concat函数主要用在含有group_by的查询语句中,将同一个分组的值拼接起来。

  • 语法:group_concat({distinct}column{separator‘分隔符’})

2.length函数

length函数主要功能就是计算字符串的字符长度。

  • 语法:length(str1),返回结果为字符串长度。

在SQL注入的过程中,经常需要计算字符串的长度,例如在不回显的场景下进行注入,一本被称为盲注,这种情况下需要逐一猜解字符,猜解过程中首先就要计算字符串长度。

3.ascii函数

ascii函数主要功能就是计算字符的sacii码值。

  • 语法:ascii(char),返回结果为字符对应的ascii码值。

盲注的过程中需要逐一猜解字符,过程中需要计算ascii码,进行数值比较从而确定字符。

4.substr函数

substr函数主要功能就是截取字符串

  • 语法:substr(string,start,length),其中string为字符串,start为起始位置,length为字符长度,返回结果为字符串。

盲注的过程中需要逐一猜解字符,过程中需要截取字符串中其中一个字符进行判断。

5.left、right函数

left函数主要功能也是截取字符串,默认从左截取。right同理

  • 语法:left(string,length),其中string为长度,返回结果为子字符长度。

6.if函数

根据条件表达式的结果返回不同的值

  • 语法:if(confition,value_if_ture,value_if_false),其中confition为条件表达式,value_if_ture,value_if_false分别是条件为真或假的时候表达的ture或flase作为条件返回的值

在SQl注入中,if函数和sleep函数结合使用,实现SQL注入中的时间盲注。

7.updatexml函数

改变文档中符合条件的节点的值

  • 语法:updatexml(xml_document,XPath_string,new_value),其中xml_document为XML文档对象,XPath_string是XPath格式的字符串,报错注入时,需要写入错误的格式来显示错误的信息,new_valiue是string格式替换查找到符合条件的的数据,在注入时可以加入任意字符,执行XPath_string中SQL语句,获取相应的信息。

SQL注入过程中,若无数据回显,但是存在报错页面的数据回显,会用到报错注入中。

漏洞分类与利用

SQL注入漏洞种类有很多,按照数据类型分为数字型、字符型和搜索型;按照提交方式可分为GET型、POST型、Cookie型和HTTP请求头注入型;按照执行效果可以分为,报错注入,联合查询注入、联合查询注入、盲注和堆查询注入,其中盲注又可以分为基于布尔和基于时间注入。

1.基于联合查询的SQL注入

联合查询是合并多个相似选择查询的结果集,即将一个表追加到另一个表,从而实现将两个表的杳询结果组合在一起,使用关键词为union或union all。
基于联合查询的SQL注入是SQL注入的一种,既要满足SOL注入漏洞存在的一般条件,还要满足查询的信息在前端有回显。

基于pikachu平台,我演示一个完整的基于联合查询的SOL注入案例。

if(isset($_GET['submit']) && $_GET['name']!=null){
    //这里没有做任何处理,直接拼到select里面去了
    $name=$_GET['name'];
    //这里的变量是字符型,需要考虑闭合
    $query="select id,email from member where username='$name'";
    $result=execute($link, $query);
    if(mysqli_num_rows($result)>=1){
        while($data=mysqli_fetch_assoc($result)){
            $id=$data['id'];
            $email=$data['email'];
            $html.="<p class='notice'>your uid:{$id} <br />your email is: {$email}</p>";

由第24~26行代码可知,后端基于GET方法,通过“name”变量接收前端传递的参数,由第28~31行代码可知,后端将接收到的参数未做任何过滤和处理,直接拼接到SQL语句中,并使用execute函数执行SQL语句获取数据,从而造成SOL注入漏洞,由第32~34行代码可知,后端将获取到的member数据表的id、emai字段的数据返回给前端。因此,可以利用基于联合査询的SQL注入进行攻击。

1.判断是否存在SQL注入点

输入kobe,查询出kobe的基本信息

输入kobe' and 1=1#,查询,也可以查询出kobe的基本信息

输入kobe' and 1=2#,不能查询出boke基本信息,可以判断出此处存在字符型的SQL漏洞。

2.判断查询数据表中字段的数目。

输入kobe' order by 2#,查询

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值