首页
社区
课程
招聘
[原创]GoAhead框架中的ASP文件提取
发表于: 2020-9-8 12:38 12671

[原创]GoAhead框架中的ASP文件提取

2020-9-8 12:38
12671

前言

GoAhead是开源的web框架,由于其高性能,高可用性,在嵌入式系统中广泛使用。传统基于GoAhead框架开发的服务端会大量使用ASP脚本语言编写动态页面,并使用C/C++语言编写功能函数注册到脚本层中供ASP脚本调用。为了更全面的进行安全审计,我们不仅要关注功能函数的实现,同时也要分析ASP脚本的处理过程。本篇文章以某个工业交换机固件(eCOS系统,不带符号表)来作为例子,讲解如何从固件提取ASP文件。

GoAhead版本
在分析带有GoAhead的固件之前,需要先知道该框架的版本,这样除了能知道历史漏洞(CVE编号)外,还能对着该版本的源码进行分析,快速定位到关键点。

获取版本
简单搜索字符串“GoAhead”可以非常快地定位到版本号,可以看到下面的版本号为2.1.5。
图片描述

下载源码
由于GoAhead源码已经不在GitHub上维护了,官网的历史版本又只对企业用户开放,所以没法从官方渠道获取源码。
图片描述
不过可以从之前网友共享的资源入手,来获取到这部分源码,最后在CSDN上下载了一个相近的版本2.1.8。

图片描述
ASP文件
GoAhead Webserver支持类ASP的服务器端脚本语言,该脚本的语法和微软的ASP Active Server Page)语法基本相同,通过使用ASP脚本可以非常高效得开发动态页面。如下就是一个非常典型的ASP代码,可以看到ASP代码是嵌入” “<%...%>”之间的部分,其中的testasp函数的实现是在C/C++层中。
图片描述

GoAhead为了更加方便的移植到不同嵌入系统上,其对文件的存储提供了非常灵活的方式,对于Linux这类系统,可以选择将文件存放在文件系统中,或者对于eCOS这类系统可以将文件直接以数组的形式直接固化到固件中,从而不必增加文件系统这部分模块。源码中的“WEBS_PAGE_ROM”宏就是控制不同的ASP文件存放方式。当定义了WEBS_PAGE_ROM意味着将文件以数组的形式存放在固件中。
图片描述
下面分两种情况来讨论ASP文件提取:
1.对于存放到文件系统的ASP脚本文件,可以直接用binwalk提取,然后分析其代码逻辑。
2.对于固化到固件中的ASP脚本文件,binwalk往往提取不了,或者说提取不完全,这就需要自己手动提取这类文件。
由于目标固件是第二种情况,就需要通过手动的方法来提取ASP文件。

存放格式
为了了解ASP文件的存放格式,首先得知道如何将文件传成数组:

定位索引表
一、特征定位
回到GoAhead源码,为了在目标固件定位websRomPageIndex全局表,需要找到调用它的地方,websRomPageReadData函数使用了这个表,该函数负责将文件数据拷贝到指定的缓冲区。
图片描述
继续查看调用websRomPageReadData函数的地方,直到找到特征字符串(用于定位函数),最后找到了一个函数websAspRequest,非常适合定位。通过”Can’t read %s”字符串可以快速在固件中找到这个函数。
图片描述

二、定位流程
最后简单总结了下定位流程:
图片描述

动手实践
一、固件中定位表
通过字符串”Can’t read %s”定位到websPageReadData函数,如下框起来的就是该函数:
图片描述
继续进入函数分析,找到websRomPageIndex全局表:
图片描述

二、编写脚本
通过在上面的分析已经在固件中定位到websRomPageIndex全局表的位置,根据websRomPageIndexType结构体的定义编写如下脚本提取文件数据:

提取的文件如下所示:
图片描述
提取ASP文件后,通过查看其源码,就能定位到一些存在于ASP脚本中的安全缺陷。在实际审计的过程中,本人发现了该工业交换机web服务端的若干安全问题。

总结
本篇主要介绍了提取ASP文件的一些思路,可以看到,提取方法虽然谈不上有多少技术含量,但是一些分析的思路和技巧我希望和大家进行分享,希望大家喜欢。

 
 
 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 4
支持
分享
最新回复 (5)
雪    币: 29187
活跃值: (63432)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
感谢分享!前排!
2020-9-8 15:37
0
雪    币: 1037
活跃值: (1780)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习了,期待更多精彩内容
2020-9-8 15:38
0
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享
2020-9-9 07:57
0
雪    币: 38
活跃值: (185)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2020-9-9 10:39
0
雪    币: 420
活跃值: (700)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
给后续看到本文的师傅提一下,gitee还可以下载到GoAhead源码
https://gitee.com/mirrors/GoAhead
2023-8-23 14:16
0
游客
登录 | 注册 方可回帖
返回
//