- A+
0x00
在进行安全测试的时候经常遇到ASP.NET平台的各类系统,它们加密手段有强有弱。有的只加密用户信息,有的则将数据库连接字串也进行了加密。以前不熟悉ASP.NET的时候有时解密一个连接字串都要花费数小时。下面介绍三种方法(由难到易),以便快速解密加密的内容,适合新手。
0x01
工具:IIS(要配置支持ASP.NET)、.NET Reflector、记事本、任意浏览器……
要求:一定的代码阅读能力
0x02
方法一(适用于能看懂代码又能写代码的童鞋)
.NET Reflector定位至解密函数读懂代码,用任意一门编程语言编写同样解密算法的工具。(不详述此方法,因此方法跟自身的代码阅读能力、逆向跟踪能力有关。若是解密算法调用函数太多那么会消耗不少时间)
方法二(适用于能读代码但不会写代码的童鞋)
示例:
.NET Reflector定位至解密函数
查看无复杂的调用,只有string str2 = str_key;中的str_key是未知的。跟踪得到str_key是zysoftvschool。
复制整个函数到demo.aspx,添加要解密的字符串。demo.aspx内容如下: <%@ Page Language="C#" ValidateRequest="false" %>
<script runat ="server" >
//===============直接复制 .NET Reflector中看到的函数================
public static string Decrypt(string str)
{
string str2 = "zysoftvschool";
string str3 = "";
int num5 = 0;
if (str == "")
{
return "";
}
int length = str2.Length;
if (length == 0)
{
str2 = "Think Space";
}
int num2 = 0;
int num3 = Convert.ToInt32(str.Substring(0, 2), 0x10);
int startIndex = 2;
while (true)
{
try
{
num5 = Convert.ToInt32(str.Substring(startIndex, 2), 0x10);
}
catch (Exception)
{
}
int num6 = num5 ^ Convert.ToInt32(str2[num2]);
if (num6 <= num3)
{
num6 = (0xff + num6) - num3;
}
else
{
num6 -= num3;
}
str3 = str3 + Convert.ToChar(num6);
num3 = num5;
startIndex += 2;
if (num2 < length)
{
num2++;
}
else
{
num2 = 1;
}
if (startIndex >= str.Length)
{
return str3;
}
}
}
/===========================================================
</script>
<%
//调用上面的解密函数Decrypt
Response.Write(Decrypt("要解密的字串写这里"));
%>
浏览器访问,得到密码:***ccom102668
方法三(适用于代码读不了更写不了的童鞋)
示例:
.NET Reflector定位至解密函数,解密函数调用非常复杂,跟了几步思路也跟丢了……
对付这类的加密那就使用最简单的方法吧——直接调用dll内的解密函数。调用方法:命令空间.类.方法
注意:本地解密需要把调用的xxx.dll放至Web目录的bin文件夹中!如果将写好的脚本放到目标Web目录则可以直接执行。
Demo: <%@ Page Language="C#" ValidateRequest="false" Debug="true" %>
<script runat ="server" >
public static string Decrypt(string str)
{
string str3 = "";
//下面是调用方法
str3 = Newcapec.eCard.Utility.ConnectionInfo.DecryptDBConnectionString(str);
return str3;
}
</script>
<%
Response.Write(Decrypt("AQAAANCMnd8BFdERjHoAwE/Cl
+sBAAAAECVqcj9oCEGaJ0mZSN5kGAQAAAACAAAAAAAQZgAAAAEAACAAAAAhqwK0FIppu3zaId41oqAahOfebXIgpn6Y
9wtCSh66xwAAAAAOgAAAAAIAACAAAAA9kwoU8mJNSwcoouLxVGh9PIU8RLsqFehwf0nmMVUeamAAAABdTYklOfQhsR4
l8obq/PAZfLp12Ff1GvHiJBK1C7lJzi8d0dgs51TZvp5fOc0C2Ok6qqtXXcx07i9KlMGr1ETF23vFi0oE5wHy36bjGu
0OvTo9psUMFia7wVLkchDkDoRAAAAAULGxt/L13wLHBMpv85P+ruAczDqo5NG8ufk
+F3VVaEdPr7PvFK3OeHYtMOlLRSTBZk6sKilhsQRuNNM4z0GouA=="));
%>
浏览器中访问得到解密后内容:Data Source=orcl;User Id=ccense;Password=ecard;min pool size=1;max pool size=50;Pooling=true
0x03 总结
三种解密方法中第三种方法最为省时省力,且对那些绑定机器的加密最为简单有效。但是还是建议多使用第一种方法,虽耗时耗力但可以学到更多东西。
1#看风者 | 2014-09-12 12:47
不顶没天理
2#insight-labs | 2014-09-12 12:52
赞一个
3#梧桐雨 | 2014-09-12 13:01
好帖!顶。
4#c4bbage | 2014-09-12 13:06
赞一个
5#Vigoss_Z | 2014-09-12 13:33
我来添一个吧。
还有一种情况是使用.NET自带的加密方法加密链接字符串
解密:
aspnet_regiis.exe -pd "connectionStrings" -app "/SampleWebSite"
(因是RSA加密,所以必须在同一台机器上进行;站点的web.config被加密,下载下来本机解不了。)
第二种方法:
代码:
using System;
using System.Configuration;
using System.Web.Configuration;
string provider = "RSAProtectedConfigurationProvider";
string section = "connectionStrings";
protected void btnDecrypt_Click(object sender, EventArgs e)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
ConfigurationSection configSect = config.GetSection(section);
if (configSect.SectionInformation.IsProtected)
{
configSect.SectionInformation.UnprotectSection();
config.Save();
}
}
web.config被解密。
6#工作专用 | 2014-09-12 16:42
神贴刘明!
7#Nc4 | 2014-09-12 16:46
神贴
8#Sunshine | 2014-09-13 09:59
嗯嗯
赞一个,平时用Reflector看看函数
9#核攻击 | 2014-09-13 10:04
good jb~
10#园长 | 2014-09-13 11:24
赞~老师好
11#Mody | 2014-09-13 21:02
@Vigoss_Z 不错
12#ヤ深蓝T透 | 2014-09-14 18:45
赞~老师好
13#null | 2014-09-15 09:23
终于有人分享了~~~
14#逝情 | 2014-09-22 23:58
10086个赞,顺便问下,可以转载么?嘎嘎
15#大漠長河 | 2014-09-24 06:13
等八点半后慢慢看 没有乌云币 没法感谢 送本地景点门票一张已示支持
16#Coody | 2014-09-24 08:39
随然不是太懂,但是先收藏了。。。
17#蒙塔基的钢弹 | 2014-09-27 12:24
大赞啊,大牛!~
18#qing | 2014-09-28 10:08
请求帮忙解密文件 http://103.252.17.111/bin.rar 乌云币感谢
19#RedFree | 2014-09-28 14:52
@qing
MTY3NzUyTzY1NDU3Nk8xNDY4NjM2TzI2MDU4MjRPNDA3Mjg0OE81ODYxMDI0Tzc5Nzg0NjRPMTA0MTk0NDhPMTMxODMzMDBPMTYyNzM0NTJPMTk2OTE3MjRPMjM0MzYwODhPMjc1MDE2MDRPMzE4OTY0MzZPMzY2MTE4NDhPNDE2NTYwMDRPNDcwMjcyOTJPNTI3MjE5MTZPNTg3NDIwNjBPNjUwODg2MDhPNzE3NTgxODBPNzg3NTYzNDBPODYwNzY1ODhPOTM3MjU5NDRPMTAxNjk3NTk2TzEwOTk5NTE4NE8xMTg2MjAzNzJPMTI3NTY4ODQ0TzEzNjg0MjYyOE8xNDY0NDA5NDRPMTU2MzY2NjUyTzE2NjYxOTE4ME8xNzcxOTMxMjBPMTg4MDk1OTA4TzE5OTMyMDIxMk8yMTA4NzU3MDRPMjIyNzUyNDAwTzIzNDk1Mjk1Mk8yNDc0ODE3ODBPMjYwMzM4ODg0TzI3MzUxNjc3Nk8yODcwMjI1ODBPMzAwODQ5NTg4TzMxNTAwNTE4NE8zMjk0ODc3NTZPMzQ0Mjk0NDk2TzM1OTQyNjYwME8zNzQ4ODUzMTZPMzkwNjY2NTM2TzQwNjc3MjYwME80MjMyMDY0NzJPNDM5OTY4NDY0Tw==
Setp1: Base64_Decode
167752O654576O1468636O2605824O4072848O5861024O7978464O10419448O13183300O16273452O19691724O23436088O27501604O31896436O36611848O41656004O47027292O52721916O58742060O65088608O71758180O78756340O86076588O93725944O101697596O109995184O118620372O127568844O136842628O146440944O156366652O166619180O177193120O188095908O199320212O210875704O222752400O234952952O247481780O260338884O273516776O287022580O300849588O315005184O329487756O344294496O359426600O374885316O390666536O406772600O423206472O439968464O
Setp2:Split by O
167752
654576
1468636
2605824
4072848
5861024
7978464
10419448
13183300
16273452
19691724
23436088
27501604
31896436
36611848
41656004
47027292
52721916
58742060
65088608
71758180
78756340
86076588
93725944
101697596
109995184
118620372
127568844
136842628
146440944
156366652
166619180
177193120
188095908
199320212
210875704
222752400
234952952
247481780
260338884
273516776
287022580
300849588
315005184
329487756
344294496
359426600
374885316
390666536
406772600
423206472
439968464
Step3:Line/167752
1 1*1-0
3|||2*2-1
8 3*3-1
15 4*4-1
24 5*5-1
34 6*6-2
47 7*7-2
62 8*8-2
78 9*9-3
97 10*10-3
117 11*11-4
139 12*12-5
163 13*13-6
190 14*14-6
218 15*15-7
248 16*16-8
280 17*17-9
314 18*18-10
350 19*19-11
388 20*20-12
427 21*21-14
469 22*22-15
513 23*23-16
558 24*24-18
606 25*25-19
655 26*26-21
707 27*27-22
760 28*28-24
815 29*29-26
872 30*30-28
932 31*31-29
993 32*32-31
1056 33*33-33
1121 34*34-35
1188 35*35-37
1257 36*36-39
1400 38*38-44
1475 39*39-46
1551 40*40-49
1630 41*41-51
1710 42*42-54
1793 43*43-56
1877 44*44-59
1964 45*45-61
2052 46*46-64
2142 47*47-67
2234 48*48-70
2328 49*49-73
2424 50*50-76
2522 51*51-79
2622 52*52-82
20#Viigoss | 2014-09-28 16:52
求问:使用 .NET Reflector找到解密函数,怎么跟踪找到key。
21#Vigoss_Z | 2014-09-28 17:41
@Viigoss 有缘。
找调用的函数,追,肯定能找到key。
22#Viigoss | 2014-09-29 10:59
@Vigoss_Z 一般都是DES的,找到key就能解密了。关键是追不到key。加密解密的函数是写在dll里的,但是key是不是也写在dll里的?知道不?。.net的不好找,java的好找。用Reflector能追么?求方法。
23#Vigoss_Z | 2014-09-29 11:20
@Viigoss Reflector可以追啊。DES对称加密。加密解密要用到同一个key,加解密函数都可以追到key。
细心点肯定能找到。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫