黑客攻防:在WEB程序中隐藏后门
在很多商业程序中,程序员也许会出于某种目的,在程序中留下后门。我们不讨论这样做的目的是什么,只谈谈如何在程序中隐藏一个“终极后门”。
w%a7d_$Ny)]7225457IXPUB技术博客N'Qa ]V A6[)o%zc
首先给大家看一个例子,去年我写了一篇文章《对校园网的第二次安全检测,文中提到一个类似的后门:“…隐藏账户做后门!…如果不是我先拿到数据库,分析了一段时间以后才拿到程序,相信我也不会注意这个问题。某账户,在后台查询管理员账户的时候,他不出现,在管理员查询登陆和工作日志的时候,他自动消失…”。当时对JSP不了解,通过TOMCAT配置不正确漏洞下载了数据库,然后登陆后台,立刻就发现不对,知道有个后门,却不知道是什么原理,这次我们来把程序仔细“解剖”下。IXPUB技术博客r8j%C(lH7|
IXPUB技术博客9Y$U cLrv Q
一般情况下,在页面上显示用户列表,是由页面去查询数据库的数据,然后返回给浏览器。查询出来的数据是一堆“结果集”,页面显示的时候会把它们一条一条遍历出来。打开存在漏洞的页面,manager.jsp文件代码找到显示用户列表的代码(我加上了注释):
UFoO!z5K2g7225457
IXPUB技术博客QhAoL,i
IXPUB技术博客l}3j_t1DQ'{b
发现有个重要的数组变量manager,看看它是怎么来的,往上找:IXPUB技术博客+m;d _}5icj

my0}0dM7Pi7225457
#j.|BUB8H4H/q6B7225457 可以看到代码中manager的值是通过调用managermgt的search方法返回的数组。JSP程序在服务器下运行,除了JSP文件本身,在WEB-INF目录下的classes目录里,有一些“.class文件”,他们是已经写好的JAVA类,可以用来实例化对象。Managermgt对象是MgrMgt这个类实例化出来的,在manager.jsp里,一开始就导入了“speedcharge.controller.*”下的全部包。
qjU9|7] w ^!`7225457IXPUB技术博客C5WD X:?4Yg!Ii!U
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,speedcharge.entity.*,speedcharge.controller.*" errorPage="" %>IXPUB技术博客lg a*C%V[!S
IXPUB技术博客.^bmk2M J
“.class”文件存储的是java字节码,是由.JAVA文件编译而来的,并不是源代码。所以我们要反编译回去。使用“jad.exe”反编译,然后找到MgrMgt 类的search方法:IXPUB技术博客$g0f)_"FZ |b cS8Q
Wf;m ~5}p;|B7225457 ……Manager amanager[] = null;……//调用searchManager方法IXPUB技术博客 \9t$MZt{V
amanager = Manager.searchManager(s);……IXPUB技术博客!H1f6t0ei]J
IXPUB技术博客.B^.{P X2O
继续往下找,Manager 类的searchManager方法。IXPUB技术博客 vxG*\)K#d8S
IXPUB技术博客A&P
w%a7d_$Ny)]7225457IXPUB技术博客N'Qa ]V A6[)o%zc
首先给大家看一个例子,去年我写了一篇文章《对校园网的第二次安全检测,文中提到一个类似的后门:“…隐藏账户做后门!…如果不是我先拿到数据库,分析了一段时间以后才拿到程序,相信我也不会注意这个问题。某账户,在后台查询管理员账户的时候,他不出现,在管理员查询登陆和工作日志的时候,他自动消失…”。当时对JSP不了解,通过TOMCAT配置不正确漏洞下载了数据库,然后登陆后台,立刻就发现不对,知道有个后门,却不知道是什么原理,这次我们来把程序仔细“解剖”下。IXPUB技术博客r8j%C(lH7|
IXPUB技术博客9Y$U cLrv Q
一般情况下,在页面上显示用户列表,是由页面去查询数据库的数据,然后返回给浏览器。查询出来的数据是一堆“结果集”,页面显示的时候会把它们一条一条遍历出来。打开存在漏洞的页面,manager.jsp文件代码找到显示用户列表的代码(我加上了注释):
UFoO!z5K2g7225457

IXPUB技术博客l}3j_t1DQ'{b
发现有个重要的数组变量manager,看看它是怎么来的,往上找:IXPUB技术博客+m;d _}5icj

my0}0dM7Pi7225457
#j.|BUB8H4H/q6B7225457 可以看到代码中manager的值是通过调用managermgt的search方法返回的数组。JSP程序在服务器下运行,除了JSP文件本身,在WEB-INF目录下的classes目录里,有一些“.class文件”,他们是已经写好的JAVA类,可以用来实例化对象。Managermgt对象是MgrMgt这个类实例化出来的,在manager.jsp里,一开始就导入了“speedcharge.controller.*”下的全部包。
qjU9|7] w ^!`7225457IXPUB技术博客C5WD X:?4Yg!Ii!U
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,speedcharge.entity.*,speedcharge.controller.*" errorPage="" %>IXPUB技术博客lg a*C%V[!S
IXPUB技术博客.^bmk2M J
“.class”文件存储的是java字节码,是由.JAVA文件编译而来的,并不是源代码。所以我们要反编译回去。使用“jad.exe”反编译,然后找到MgrMgt 类的search方法:IXPUB技术博客$g0f)_"FZ |b cS8Q
Wf;m ~5}p;|B7225457 ……Manager amanager[] = null;……//调用searchManager方法IXPUB技术博客 \9t$MZt{V
amanager = Manager.searchManager(s);……IXPUB技术博客!H1f6t0ei]J
IXPUB技术博客.B^.{P X2O
继续往下找,Manager 类的searchManager方法。IXPUB技术博客 vxG*\)K#d8S
IXPUB技术博客A&P