当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-024321

漏洞标题:SupperRadius商业系例 加密算法破解

相关厂商:亿联S-Radiuss系列产品

漏洞作者: Lee Swagger

提交时间:2013-05-23 10:29

修复时间:2013-08-21 10:29

公开时间:2013-08-21 10:29

漏洞类型:设计错误/逻辑缺陷

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-05-23: 细节已通知厂商并且等待厂商处理中
2013-05-28: 厂商已经确认,细节仅向厂商公开
2013-05-31: 细节向第三方安全合作伙伴开放
2013-07-22: 细节向核心白帽子及相关领域专家公开
2013-08-01: 细节向普通白帽子公开
2013-08-11: 细节向实习白帽子公开
2013-08-21: 细节向公众公开

简要描述:

SupperRadius商业系例 加密破解 破解以后可以一个账号公用多个人 无需 拨号客户端

详细说明:

解码表.png


账号保留 密码提取出来.如果密码为70da4k 其中7,0,4为数字 就到数字表中查找;d,a,k 则在字母表查找对应的代码
(列表中都是2位十六进制,其实在后面再加2个0 就是 真实密码,为了清楚,在表格中省略00)
【1】7在密码第一位 则查找7对应的第一位5d,然后5d后加上00 (每个字符后都要加)->也就是5d00
【2】字母d在字母表对应的第三位是05,->0500
一一对应
这样子70da4k的真实密码也就是5D00590005000E0053000A00
直接复制这个当拨号连接密码就是真实密码 登录即可

漏洞证明:

try
{
this.textBox2.Text = "";
char[,] chArray = new char[,] { { 'A', '9', '1', 'F', '7', '1' }, { 'B', '8', '0', 'E', '6', '0' }, { '8', 'B', '3', 'D', '5', '3' }, { '9', 'A', '2', 'C', '4', '2' }, { 'E', 'D', '5', 'B', '3', '5' }, { 'F', 'C', '4', 'A', '2', '4' }, { 'C', 'F', '7', '9', '1', '7' }, { 'D', 'E', '6', '8', '0', '6' }, { '2', '1', '9', '7', 'F', '9' }, { '3', '0', '8', '6', 'E', '8' } };
if ((this.textBox1.Text != null) && (this.textBox1.Text.Length <= 6))
{
for (int i = 0; i < this.textBox1.Text.Length; i++)
{
int num2 = int.Parse(this.textBox1.Text.Substring(i, 1));
object text = this.textBox2.Text;
this.textBox2.Text = string.Concat(new object[] { text, "5", chArray[num2, i], "00" });
}
}
else
{
MessageBox.Show("请输入密码不符!");
}
}
catch (Exception exception)
{
MessageBox.Show(exception.Message.ToString());
}


NET code.png

修复方案:

修改加密方式(防止内存读取)

版权声明:转载请注明来源 Lee Swagger@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:14

确认时间:2013-05-28 08:19

厂商回复:

最新状态:

暂无


漏洞评价:

评论

  1. 2013-05-23 10:30 | none ( 实习白帽子 | Rank:40 漏洞数:5 | 十次十次啊 hack it then know more~)

    如果是freeradius的 更劲爆

  2. 2013-06-17 10:29 | xsjswt ( 普通白帽子 | Rank:156 漏洞数:49 | 我思故我猥琐,我猥琐故我强大)

    这个就是一个带扰动的轮盘机嘛

  3. 2013-06-17 12:16 | Lee Swagger ( 路人 | Rank:28 漏洞数:5 | 洗洗睡吧)

    @xsjswt ?何解 有新的方法?

  4. 2013-06-17 12:39 | xsjswt ( 普通白帽子 | Rank:156 漏洞数:49 | 我思故我猥琐,我猥琐故我强大)

    @Lee Swagger 没有什么新方法,这个就是最原始的带扰动多表替换嘛。二战时候德国老的那个英格码都比这个复杂。

  5. 2013-09-06 23:59 | Lee Swagger ( 路人 | Rank:28 漏洞数:5 | 洗洗睡吧)

    VC 重写NET程序#include <stdio.h>#include "windows.h"int ClearClipboradBuffer();int AppendBufferToClipboard( char *cBuffer, int nSize );//**********************************************************************//Main Functionint main(){ //The table of breaking the code char a[10][6]={{'A','9','1','F','7','1',}, {'B','8','0','E','6','0',}, {'8','D','3','D','5','3',}, {'9','A','2','C','4','2',}, {'E','D','5','B','3','5',}, {'F','C','4','A','2','4',}, {'C','F','7','9','1','7',}, {'D','E','6','8','0','6',}, {'2','1','9','7','F','9',}, {'3','0','8','6','E','8',}}; int b,c,d,e,f,g; printf("www.wooyun.org\n-------------------------------\n"); int i;pk:printf("请输入你设置的六位密码,用空格分割每一位\n\n"); scanf("%d%d%d%d%d%d",&b,&c,&d,&e,&f,&g); printf("\n真正的密码是::\n*******************************\n 5%c005%c005%c005%c005%c005%c00\n*******************************\n\n\n",a[b][0],a[c][1],a[d][2],a[e][3],a[f][4],a[g][5]); char cTest[ 512 ]={ 0 }; char cClip[ 512 ] = { 0 }; int nRet = 0; //将数据写入字符cTest中 nRet=sprintf(cTest,"5%c005%c005%c005%c005%c005%c00", a[b][0],a[c][1],a[d][2],a[e][3],a[f][4],a[g][5]); ClearClipboradBuffer(); //判断是否有写入剪切板 if( AppendBufferToClipboard( cTest, nRet ) ) { printf( "对不起,密码复制失败! \n\n#############################################################\n\n" );// return 0; } else { printf("密码已经复制到剪贴板,可以用快捷键CTRL+V粘贴。\n\n#############################################################\n\n");// return 0; } goto pk;}//*************************************************************************************//清空剪切板int ClearClipboradBuffer(){ HGLOBAL hClipboard = NULL; if( OpenClipboard( NULL ) ) { hClipboard = GetClipboardData( CF_TEXT ); GlobalFree( hClipboard ); EmptyClipboard(); CloseClipboard(); return 0; } else { return -1; }}//将字符串放到剪切板int AppendBufferToClipboard( char *cBuffer, int nSize ){ HGLOBAL hClipboard = NULL; char *pClipBuf = NULL; if( OpenClipboard( NULL ) ) { hClipboard = GlobalAlloc( GMEM_DDESHARE, nSize+1 ); pClipBuf = (char*)GlobalLock(hClipboard); memset( pClipBuf, 0, nSize+1 ); memcpy( pClipBuf, cBuffer, nSize ); GlobalUnlock( hClipboard ); SetClipboardData( CF_TEXT, hClipboard ); CloseClipboard(); } else { return -1; } return 0;}