SQL注入——类型及提交方法

SQL注入——类型及提交方法

1.前言

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

2.数据类型

  • 数字型语句:
1
select * from user where id  
  • 字符型语句:
1
select * from user where name = 'liaoyue'
  • 搜索型语句:(like)
1
2
select * from users where name like%liaoyue%
select * from users where name like (’%xihua%’)

  通过三种语句的对比可以看见,在字符型语句中变量是需要使用到引号的,而在搜索类型中则需要注释单引号’、百分号%、括号等,这个需要自己进行多次尝试,搜索语句的类型并不多。因此我们的参数值在注入的时候需要去注意类型的判别。

  json类型:

3.请求方法

  不同的请求方式,上传的数据类型和大小是有区别的。我们不在上传的时候要根据请求的发送进行提交相关的语句,因此同的请求方法可能会有着不同注入的写法和方式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$get=$_GET['g']; //get接受参数名为g的值赋值给变量get
echo $get; //输出变量g的数据

$post=$_POST['p']; //post接受参数名为p的值赋值给变量post
echo $post; //输出变量p的数据

$c=$_COOKIE['c'];
echo $c;

$r=$_REQUEST['r'];
echo $r;

$s=$_SERVER['HTTP_USER_AGENT'];
echo $s;
?>

  (注:在java、python等语言的框架中基本也是一样的思路,只是写法可能会有细微的出入)

  • GET与POST:

  我们尝试发送数据http://127.0.0.1/liaoyue.php/?g=123&p=456

3
  可以看见,在数据包传输过后,界面显示的只有g的内容,p的内容传送失败了。这是因为在burp的抓包中,我们的数据是用GET的形式去请求的,而p是用POST进行接收,所以p并没有接收最终导致了只有g的内容被打印出来。

  接下来修改传送方法,通过火狐插件 HackBar 在post提交p。

  最终效果:

  成功显示123456,在网址后面传参为get请求,不论是否为POST的请求类型,主要是在网址后面,get就能接收到,所以这样子用了POST的请求方式可以同时把GET和POST两个参数都传上去。

  这也就是说我们注入的位置是有要求和限制的,不同的请求方式会导致我们注入位置形成影响

  首先明确cookie并不是请求方法,是在数据包中cookie可以通过修改数据包中的cookie进行注入

  • REQUEST

  既可以通过GET请求,也可以通过POST请求,基本可以说可以REQUST能在所有方法的位置提交。

  当然,在post请求的方法中也只是将位置接在post传输的数据后面,其他没有区别。

  • HTTP 头
1
2
3
4
#$_SERVER详解
$_SERVER['HTTP_ACCEPT_LANGUAGE'] //浏览器语言
$_SERVER['REMOTE_ADDR'] //当前用户 IP
#其余的相关内容可以参考网站:https://www.cainiaoxueyuan.com/bc/9910.html

  测试网址:http://ip.tool.chinaz.com/


SQL注入——类型及提交方法
https://one-null-pointer.github.io/2022/08/05/SQL注入——类型及提交方法/
Author
liaoyue
Posted on
August 5, 2022
传送口