在针对ASP.NET开发的程序进行代码审计的时候,asp.net可以用C# ,VB.NET ,Jscript.net等等来开发,但是通常首选都是C#和VB.NET进行开发
审计ASP.NET的时候,首先得弄明白他的结构
一般来说,在asp.net应用中,需要进行观察的文件有:.aspx,.cs,.ashx,dll文件
.aspx是页面后的代码,aspx负责显示,服务器端的动作就是在.cs定义的
.cs是类文件,公共类神马的就是这个了
.ashx是一般处理程序,主要用于写web handler,可以理解成不会显示的aspx页面
.dll就是cs文件编译之后的程序集
ASP.NET中Inherits、CodeFile、CodeBehind 三个属性指向解析:
Inherits
msdn解释:定义供页继承的代码隐藏类。 它可以是从 Page 类派生的任何类。 此特性与 CodeFile 特性一起使用,后者包含指向代码隐藏类的源文件的路径。Inherits 特性在使用 C# 作为页面语言时区分大小写,而在使用 Visual Basic 作为页面语言时不区分大小写。
CodeFile
msdn解释:指定指向页引用的代码隐藏文件的路径。 此特性与 Inherits 特性一起使用,用于将代码隐藏源文件与网页相关联。 此特性仅对编译的页有效。
Codebehind
msdn解释:指定包含与页关联的类的已编译文件的名称。 该特性不能在运行时使用。此特性用于 Web 应用程序项目。
代码审计两种方法:
1.搜索关键字找敏感函数
2.根据目标功能点判断可能存在的漏洞
常见漏洞关键字:
SQL注入:
select insert update mysql_query mysqli
文件上传:
$_FILES,type="file",上传,move_uploaded_file()
XSS跨站:
print print_r echo sprintf die var_dump var_export
文件包含:
include include_once require require_once
代码执行:
evalassert preg_replace call_user_func call_user_func_array
命令执行:
systemexec shell_exec ` ` passthru pcntl_exec popen proc_open
变量覆盖:
extract()parse_str() import_request_variables() $$
反序列化:
serialize()unserialize() __construct __destruct
文件读取:
fopen file_get_contents fread fgets fgetss file fpassthru parse_ini_file readfile
文件删除:
unlink()remove()
文件下载:
download() download_file()
通用关键字:
$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER
审计工具
ILSpy
预编译的原理:
简单的来说,就是在网站发布时将aspx文件进行编译,转换成dll文件。因为.NET程序在运行时会优先加载bin目录下的程序集。
即index.aspx -> /bin/index.dll
在用户访问index.aspx时,则直接由index.dll进行处理。而不是index.aspx。一旦进行预编译后,相关程序会被转换为dll存储在bin目录下。这时候,程序的访问路径和相关逻辑,都被封装成了dll。无论根目录下是否存在index.aspx,都可以正常处理特定路由下的功能。
Notepad++
使用Ctrl + F打开查找框,并切换到“替换”标签。
小工具 #用来提取路径
ListFile
可以使用这个命令,dir /s /b *.aspx > md.txt
下面是处理完的结果
使用dirsearch对接口做扫描,快速的找出可未授权访问的页面。
sublime、一款轻量级的代码编辑器。将反编译后的源码直接拖入进去即可。
反混淆
de4dot、https://github.com/de4dot/de4dot
反混淆的工具有很多,其中de4dot是目前最主流的反混淆工具。
检测混淆器类型
de4dot.exe -d f:\bin\h1z1.dll
批量反混淆
de4dot.exe -r c:\input -ru -ro c:\output