前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

【.NET小科普之一】数据库信息在哪儿 - 低调求发展的日志 - 网易博客 网易 新闻 微博 邮箱 相册 阅读 有道 摄影 爱拍 优惠券 云笔记 闪电邮 手机邮 印像派 网易识字 更多 博客 手机博客 博客搬家 博客VIP服务 LiveWriter写博 word写博 邮件写博 短信写博 群博客 博客油菜地 博客话题 博客热点 博客圈子 找朋友 发现 小组 风格 手机博客 网易真人搭配社区iStyle 下载最文艺的手机博客APP> 下载最文艺的手机博客APP> 下载最文艺的手机博客APP> 创建博客 登录 加关注 显示下一条 | 关闭 温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》 | 关闭 Minghacker 凡你醉处 你说过 皆非他乡 导航 首页 日志 相册 音乐 收藏 博友 关于我 日志 【.NET小科普之一】数据库信息在哪儿 2014-03-04 21:09:12| 分类: 安全攻防/Securit | 标签: |举报 |字号大中小 订阅 From:http://drops.wooyun.org/tips/975 0x00 前言最近有人问到ASP.NET里面的数据库连接信息一般去哪里找。这里我简单总结一下我遇到过的一些情况,和大家分享一些简单的方法去找ASP.NET的数据库连接信息或数据库文件。0x01 寻找方式先说一般的数据库连接信息。第一种一般在web.config,如某套OA就是将连接字符串存放在该文件内,如下图:第二种有的ASP.NET程序功能较多,会自定义其它config文件,所以可能会存在多个config,而数据库连接信息就存放在其它config文件中,比如逐浪CMS(你们懂的)就有多个config文件,如下图:但数据库相关连接信息存放在Config\ConnectionStrings.config里:第三种也有更标新立异的压根不存放在config中,比如信游(你们也懂的)的免费版,也有一个config文件夹,里面的文件大致如下:数据库连接信息存放在server.apb中:第四种有一些比较奇葩的,直接写在代码中。这种情况下如果没有源码cs文件,就只能反编译bin目录下的dll文件了,必须扩展开来说,这是后话了。数据库文件那如果是access或者SQLite的情况又会有什么变化呢?他们的数据库会存放在什么位置?现在大多CMS为了避免直接下载MDB或相关格式的问题,在.NET中采取了其它手段去防下载,比如50cms将SQLite的数据库存放在根目录的App_Data文件夹中:2013就是50cms的数据库:另外还有直接将access数据库存放在App_Code文件夹中的,保存为.cs后缀,由于App_Code和App_Data是无法直接通过post和get来直接访问的(你有任意文件下载的话谁都拦不住你),所以在一定程度上保证了网站的安全性,比如下面的2013.cs实际就是网站的数据库:当然了,上面说的也是较为常见的,凡事总会有奇葩的,结合实际情况以不变应万变吧!总结一下,数据库或者数据库相关信息会在哪里:1. web.config 2. 其它config文件 3. 某些有特征的文件夹下的某个文件(如上面信游的那个) 4. 源码中,去dll翻翻吧 5. App_Code或App_Data 6. 其它各种奇葩情况…… 下面重点说说第四种寻找方式。0x02 反编译.NET程序1 .NET的程序是怎样的?我们这说的.NET不是什么www.caoliu.net,都指的是微软的开发语言。下文对.NET的分析主要是我个人的总结,并非官方语言。那常见的.NET程序其简单构成是咋样的呢?第一种,我们常见的桌面应用,可以是winform和console类型,比如常见的winform应用其可编译的项目源文件结构大概如下(以VS2008为例):Bin目录是编译后的两种类型的可执行文件:Debug编译后的程序会带有一些相关的调试信息,体积会大一点,release是发布版本的相对没带有那么多调试信息,体积会小一些。第二种,就是我们要重点熟知的asp.net应用程序,一个很简单的asp.net应用程序的源码目录结构如下:一般来说,我们的关注点更多不在aspx文件中,因为VS2005之后都主要是将相关的代码分离到了cs文件中。所以我们更多要关注的是.cs后缀的文件,但是在发布版的网站中,是不包含cs文件的,此时我们要关注的就是bin目录了,bin目录中有相关的dll。比如上面的小网站的bin目录只有一个dll文件:2. 用什么反编译.NET的程序目前相对比较有名的.NET反编译程序主要有两款:Reflector ILSpy Reflector是一个比较早出现而且功能也比较强大的反编译软件(在这略微提醒一下,是反编译不是反汇编),支持自定义插件和代码调试的功能,支持将源码反编译为IL语言、VB.NET、C#、Delphi.NET、F#和MC++等并可选择.NET框架的相关版本(不同版本有不同的语言特性),目前最新版已经是8.0,7.3版的截图如下:选定某个dll后,可以在File菜单中选择导出源码:ILSpy是一个开源且免费的反编译程序,主要功能还是反编译,不支持插件,可以翻译成的语言主要是C#、VB.NET和IL。最新版截图如下:选中某个dll后,可以在File菜单中导出源码:3. 反编译的简单实例在这以简单免费的ILSPY做演示。先来一个找源码中数据库连接信息的例子,示例是用我们上面提到的一个小网站。先打开ILSpy,拖动相关的dll到左边的边栏中:点击+号,展开相关的信息:这里没有做混淆(这是后后后话了),所以反编译出来的类比较容易从名词中看出其作用。既然要找数据库连接信息,那要先考虑一点,什么时候会进行数据库的连接?很简单!登录的时候吗,所以一般来说,都是先围绕登录点相关的类和函数进行。点击上面的login:此时右边的分栏可以看到该login类的源码了。里面主要有两个方法:Page_Load和Button1_Click。其中Page_Load是页面加载时一定会调用的方法,Button1_Click是按钮点击事件的方法(简单说就是点击登录按钮时调用的方法)。点击左边的+号展开两个方法,会发现Page_Load是空的,Button1_Click是包含有源代码的:所以只能从按钮点击那下手了。看上图标蓝色的地方,很明显就是数据库连接信息,把数据库连接信息写入到源码中,不是很利于后期的维护。另外一篇例子,可以参考我发布在zone里的http://zone.wooyun.org/content/3469寻找正方教务系统数据库连接解密方法的一篇文章。再展示下,如果没混淆和加密的.NET程序,我们可以做到什么。比如下面这个大牛写的程序:确定就退出了,只要稍加修改马上可以去掉相关的代码,任意用了:最后就不总结什么了,祝大家0day多多! 评论这张 转发至微博 转发至微博 阅读(12)| 评论(0) | 分享到: 喜欢 推荐 0人 | 转载 历史上的今天 最近读者 热度 评论 this.p={ m:2, b:2, id:'fks_087071085081080069082080082068072087080065085083081074081080', blogTitle:'【.NET小科普之一】数据库信息在哪儿', blogAbstract:'From:http://drops.wooyun.org/tips/975 0x00 前言', blogTag:'', blogUrl:'blog/static/1121579562014249912590', isPublished:1, istop:false, type:1, modifyTime:1393938689657, publishTime:1393938552590, permalink:'blog/static/1121579562014249912590', commentCount:0, mainCommentCount:0, recommendCount:0, bsrk:-100, publisherId:0, recomBlogHome:false, currentRecomBlog:false, attachmentsFileIds:[], vote:{}, groupInfo:{}, friendstatus:'none', followstatus:'unFollow', pubSucc:'', visitorProvince:'', visitorCity:'', visitorNewUser:false, postAddInfo:{}, mset:'000', mcon:'', srk:-100, remindgoodnightblog:false, isBlackVisitor:false, isShowYodaoAd:false, hostIntro:'一个在当地较为英俊的人。一堆好人卡,已经有一株鲜花绑定好了,是小北的小太阳臭螃蟹。爱好写词摄影和美女。专注编程和安全。略懂,略懂 CSS+Js+jquery+php+python+perl+Yii+SSH+Flex+as3+asp.net。略懂C++/C#/WPF/Java/Delphi/VB/Asm/Qt。', hmcon:'1', selfRecomBlogCount:'0', lofter_single:'' } {list a as x} {if !!x} {if x.visitorName==visitor.userName} {else} {/if} {if x.moveFrom=='wap'} {elseif x.moveFrom=='iphone'} {elseif x.moveFrom=='android'} {elseif x.moveFrom=='mobile'} {/if} ${fn(x.visitorNickname,8)|escape} {/if} {/list} {if !!a} ${fn(a.nickname,8)|escape} ${a.selfIntro|escape}{if great260}${suplement}{/if} {/if} {list a as x} {if !!x} ${fn(x.title,26)|escape} {/if} {/list} 推荐过这篇日志的人: {list a as x} {if !!x} ${fn(x.recommenderNickname,6)|escape} {/if} {/list} {if !!b&&b.length>0} 他们还推荐了: {list b as y} {if !!y} ·${y.recommendBlogTitle|escape} {/if} {/list} {/if} 转载记录: {list d as x} · ${x.referBlogTitle|escape} ${x.referUserName|escape} {/list} {list a as x} {if !!x} ${x.title|default:""|escape} {/if} {/list} {list a as x} {if !!x} ${x.title|default:""|escape} {/if} {/list} {list a as x} {if !!x} ${x.blogTile|default:""|escape} {/if} {/list} {list a as x} {if x_index>4}{break}{/if} {if !!x} ${fn1(x.title,60)|escape}${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')} {/if} {/list} {list a as x} {if !!x} ${fn(x.title,26)|escape} {/if} {/list} {if !!(blogDetail.preBlogPermalink)} ${blogDetail.preBlogTitle|escape} {/if} {if !!(blogDetail.nextBlogPermalink)} ${blogDetail.nextBlogTitle|escape} {/if} {list a as x} {if !!x} {if x.publisherUsername==visitor.userName} {else} {/if} ${fn(x.publisherNickname,8)|escape} {/if} {/list} 被推荐日志 最新日志 该作者的其他文章 博主推荐 随机阅读 首页推荐 更多>> {list a as x} {if !!x} ${x.nickName|escape} 投票给 {var first_option = true;} {list x.voteDetailList as voteToOption} {if voteToOption==1} {if first_option==false},{/if} “${b[voteToOption_index]}” {/if} {/list} {if (x.role!="-1") },“我是${c[x.role]}” {/if} ${fn1(x.voteTime)} {if x.userName==''}{/if} {/if} {/list} 页脚 公司简介 - 联系方法 - 招聘信息 - 客户服务 - 隐私政策 - 博客风格 - 手机博客 - VIP博客 - 订阅此博客 网易公司版权所有 ©1997-2014 帮助 ${u} {list wl as x} ${x.g} {list x.l as y} ${y.n} {/list} {/list} {if defined('wl')} {list wl as x}${x.n}{/list} {/if}