0x1 前言
Asp现在来说相对落后,也就是比较out了,但是在一些内网老系统还是经常可以看见的,Asp.net的话是我之前就打算学习的东西,因为这两个搭建起来的环境比较相似,所以把它这两者放在了这篇文章里面,这样方便查阅和学习。特别说明,本文主要是探讨mac环境如何上手 asp and asp.net审计,出发点是一个菜鸟无基础,所以一些大手子可以选择鄙视我并且x掉页面。
0x2 环境搭建
当前环境: MAC OS 使用PD虚拟机创建了win10
web服务器: iis
安装过程非常简单: 控制面板-> 程序与功能->window功能
然后选择如下设置即可:
这里我想谈下CGI和ISASPI
这里推荐两篇文章:
其实CGI ASP JSP PHP 都是常用的动态网页技术,与这篇文章没有太大关系,但可以去适当了解下。
0x3 创建一个asp测试站点
打开iis管理器->添加网站
查看下当前IP信息(这里采用的是共享网络)
以太网适配器 以太网:
连接特定的 DNS 后缀 . . . . . . . : localdomain
IPv6 地址 . . . . . . . . . . . . : fdb2:2c26:f4e4:0:a1e9:be2b:e47:4ace
临时 IPv6 地址. . . . . . . . . . : fdb2:2c26:f4e4:0:2517:1ae1:48bd:d9bb
本地链接 IPv6 地址. . . . . . . . : fe80::a1e9:be2b:e47:4ace%3
IPv4 地址 . . . . . . . . . . . . : 10.211.55.20
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : fe80::21c:42ff:fe00:18%3
10.211.55.1
在桌面创建一个存放网站内容的文件夹C:Usersxq17Desktopasptest (PD虚拟机 Mac可以直接访问到window文件夹)
创建一个index.asp在网站目录
<!DOCTYPE html>
<html>
<body>
<%
response.write("Hello World!")
%>
</body>
</html>
可以发现提示401访问权限错误。
HTTP 错误 401.3 – Unauthorized
由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面。
其实是文件夹权限问题,参考https://blog.csdn.net/wyz670083956/article/details/79092446配置个everyone用户即可,流程如下: 编辑权限->安全->添加->高级->立即查找->下方列出的对象选择Everyone即可。
下面操作都是在iis配置下。
我们需要设置下iis的默认文档添加个index.asp
为了调试方便,我们开启目录浏览功能
这个时候Mac访问发现失败,只需要关闭下window自带防火墙即可。
0x4 Asp代码审计初准备
代码审计最基本要求是掌握审计程序使用的语言的基本语法,这里推荐菜鸟教程ASP教程,方便上手
那么检验和巩固自己学习成功的最好是手段,是尝试自己去写一个漏洞网站,熟悉下开发的流程。因为asp不是很常用,所以这里只针对高危的审计点进行说明,后面如果在渗透过程遇到有意思的aspweb程序,我会补上这个系列。
0x4.1 编写基于Access的注入点测试网站
这样能让我们快速找到代码出错的原因。
1.利用office自带 Access创建个Access数据库:
Databasename:sql.mdg
tablename: sql
Column:id username password
然后保存的时候选择mdb格式
代码如下:
连接数据库方式: 有时候会有权限问题,具体查看网站报错内容
conn.asp
‘ DSN-less 连接
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/users/xq17/desktop/asptest/sql.mdb"
%>
‘ ODAC 连接 这个需要配置下数据源 有时候不对的时候要设置下iis中的应用程序->开启32位应用程序支持
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "sql"
%>
sql.asp
<!--#include file="conn.asp" -->
<%
set rs=Server.CreateObject("ADODB.recordset")
sqlc="select * from admin where username='" & Request.QueryString("username") & "' and password='" & Request.QueryString("password") & "'" '漏洞点
Response.Write("SQL:" & sqlc)
rs.Open sqlc,conn,1,1
username= rs("username")
Response.AddHeader "Content-Type","text/html; charset=UTF-8"
' if username="" then
' Response.Write("<br> 登陆失败")
' End if
if not rs.eof then
Response.Write("<br>当前登陆的信息为:<br>")
do until rs.EOF
for each x in rs.Fields
Response.Write(x.name)
Response.Write(" = ")
Response.Write(x.value & "<br>")
next
Response.Write("<br>")
rs.MoveNext
loop
End if
rs.close
%>
可以看到这里的直接通过Request.QueryString(“password”)获取然后拼接进入SQL语句,导致了注入
0x4.2 经典的双文件上传漏洞代码并且分析成因
其实我们平时遇到asp的源码,无非路子常见就只有3条
(1)越权
(2)注入
(3)上传
越权只要读下全局check_login就好了,所以这里主要分析下经典的双文件上传漏洞及其成因。
推荐一篇古老的文章: ASP上传漏洞
关于真实案例,只能等有机会再去审计一波了,asp的其实黑盒测试足矣,基本截断通杀。
程序没有filepath=replace(filepath,chr(0),””) 路径和文件名可控, 那么直接可以截断通杀
还有就是大小写的问题,过滤不言,黑名单不全等问题。
0x4.3 经典的命令执行木马
1.<%=Eval(Request(“xq17”))%>
2.<%eval request(“xq17”)%>
相应等价Eval的还有 Execute 、ExecuteGlobal(不输出结果)
审计的时候重点关注这些函数,如果参数可控直接getshell。
0x5 Aspx代码审计初准备
关于asp.net代码审计,其实最开始的思路就是要自己了解c#语言的基本语言结构,然后自己去尝试开发一个简单asp.net的项目,然后尝试逆向对比和源码的区别,从而做到心中有数。
0x5.1 IDE的选择
asp.net审计我觉得最好从一个项目的开发流程来走,快速生成项目模版和运行,所以我觉得visual studio值得选择。
所以可以选择在 win10 -> 安装visual studio社区版
这里推荐下,我是如何学习vs的使用的。
推荐这篇文章: 欢迎使用 Visual Studio IDE | C#
通过这篇文章你可以快速上手visual stdio的使用。
(1) 了解一些基础tips 转向函数定义 变量重命名 内联文档 (查阅官方高效性方面的常用功能)
(2)实战操作建立一个hello world的C#程序
(3)实战建立一个asp.net Web 项目
0x5.2 浅谈下C#的快速入门
快速入门C# 菜鸟教程
(0) 了解注释
C#语言中包含了三种注释符
(1).单行注释 //
(2).多行注释 /*要注释的内容*/ 注意:多行注释不能嵌套使用
(3).文档注释 /// 文档注释可以用来注释方法,也可以用来注释类.
(1) 了解程序最小结构
using System; //包含System命名空间
namespace HelloWorldApplication // 空间声明
{
class HelloWorld //类声明
{
static void Main(string[] args) //定义Main方法,C# 程序入口点
{
/* 我的第一个 C# 程序*/ //注释
Console.WriteLine("Hello World"); //system空间下Console类的放啊放
Console.ReadKey(); //等待按键然后结束
}
}
}
(2)学习顺序、选择、循环基本结构
(3)了解下异常处理
try
{
//自己的代码
}
catch(ExceptionName e1)
{
// 错误处理代码
}
catch(ExceptionName e2)
{
// 错误处理代码
}
finally
{
//要执行的语句
}
这些知识,可以让你基本读懂代码,后面就可以采取通过不断阅读各种代码的学习方式,加深对其他内容的学习。
0x5.3 尝试去建立一个hello world c# 程序
查看解决方案管理器,可以看到项目文件的构成。
可以看到执行成功,然后查看下目录生成的内容,对比进行了解一些编译连接过程产生的文件。
Main函数代码主要是如下(模版)
using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
0x5.4 建立一个asp.net Web 项目
参考链接: 创建web应用
后面深入学习的话尝试两种经典的设计模式MVC and Razor:
这里先直接介绍下流程
项目创建->项目部署->反编译查看
这里的解决方案模版是基于 Razor 页面设计模式,也是MVC架构,非常方便。
然后对比源码:
可以看到反编译DLL的结果其实也只是能大概了解逻辑而已,跟源码还是有一定差异的。
0x6 远程搭建调试环境思路
这里可以介绍下远程环境搭建思路(比如在阿里云安装了windowserver 2008),如何进行本地调试?
这里我们可以采取nfs远程共享文件夹的方式,在本地电脑挂载远程服务器的网站目录
下载 hane win nfs server (ps.我自己下载的是汉化版的。逃)
然后配置下输出选项下的内容
# exports example
C:\ftp -range 192.168.1.1 192.168.1.10
c:\public -public -readonly
c:\tools -readonly 192.168.1.4
c:\users\xq17\desktop\asp\test -public -name:asptest
然后开始->搜索重启所有服务 这样就可以成功挂载 参考这个文章: Windows10配置NFS服务端和客户端
然后MAC本机对这个目录进行远程挂载。
查看挂载的目录: showmount -e 10.211.55.20
Mac进行挂载:
sudo mount -o resvport 10.211.55.20:/asptest /tmp/test
卸载的话在Finder,mac的没有unmount 命令,如果有其他命令,希望师傅能告诉下我。
1.安装nfs服务器 sudo apt install nfs-kernel-server
2.配置/etc/exports 配置文件
/tmp *(rw,sync,no_subtree_check,no_root_squash)
3.重启服务
sudo service nfs-kernel-server restart
Mac进行挂载:
sudo mount -t nfs 47.101.46.x:/tmp /tmp/test 发现失败 Operation not permitted
sudo mount -o resvport 47.101.46.x:/tmp /tmp/test
可以看到挂载成功
linux下取消挂载
sudo unmount /tmp/test
但是mac好像没有这个命令,不过我们可以选择去finder 点击卸载。
0x7 总结和反思
本文主要记录了自己在探索Asp和Asp.net审计过程的摸索和尝试,基本是0基础出发的,所以文中可能会诸多纰漏或者低级错误,欢迎师傅指出和提供相关资料让我去学习。后面我会针对Asp.net的审计进行重点学习,对具体的开发流程和反编译原理进行深一步研究,从而寻找一种高效可行的Asp.net审计方案。