作者: 空虚浪子心

  在很多商业程序中,程序员也许会出于某种目的,在程序中留下后门。我们不讨论这样做的目的是什么,只谈谈如何在程序中隐藏一个“终极后门”。首先给大家看一个例子,去年我写了一篇文章《对校园网的第二次安全检测,文中提到一个类似的后门:“…隐藏账户做后门!…如果不是我先拿到数据库,分析了一段时间以后才拿到程序,相信我也不会注意这个问题。某账户,在后台查询管理员账户的时候,他不出现,在管理员查询登陆和工作日志的时候,他自动消失…”。当时对JSP不了解,通过TOMCAT配置不正确漏洞下载了数据库,然后登陆后台,立刻就发现不对,知道有个后门,却不知道是什么原理,这次我们来把程序仔细“解剖”下。

  在很多商业程序中,程序员也许会出于某种目的,在程序中留下后门。我们不讨论这样做的目的是什么,只谈谈如何在程序中隐藏一个“终极后门”。

  首先给大家看一个例子,去年我写了一篇文章《对校园网的第二次安全检测,文中提到一个类似的后门:“…隐藏账户做后门!…如果不是我先拿到数据库,分析了一段时间以后才拿到程序,相信我也不会注意这个问题。某账户,在后台查询管理员账户的时候,他不出现,在管理员查询登陆和工作日志的时候,他自动消失…”。当时对JSP不了解,通过TOMCAT配置不正确漏洞下载了数据库,然后登陆后台,立刻就发现不对,知道有个后门,却不知道是什么原理,这次我们来把程序仔细“解剖”下。

  一般情况下,在页面上显示用户列表,是由页面去查询数据库的数据,然后返回给浏览器。查询出来的数据是一堆“结果集”,页面显示的时候会把它们一条一条遍历出来。打开存在漏洞的页面,manager.jsp文件代码找到显示用户列表的代码(我加上了注释):

发现有个重要的数组变量manager,看看它是怎么来的,往上找:

  可以看到代码中manager的值是通过调用managermgt的search方法返回的数组。JSP程序在服务器下运行,除了JSP文件本身,在 WEB-INF目录下的classes目录里,有一些“.class文件”,他们是已经写好的JAVA类,可以用来实例化对象。Managermgt对象是MgrMgt这个类实例化出来的,在manager.jsp里,一开始就导入了“speedcharge.controller.*”下的全部包。

  <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,speedcharge.entity.*,speedcharge.controller.*" errorPage="" %>

  “.class”文件存储的是java字节码,是由.JAVA文件编译而来的,并不是源代码。所以我们要反编译回去。使用“jad.exe”反编译,然后找到MgrMgt 类的search方法:

  ……Manager amanager[] = null;……//调用searchManager方法
  amanager = Manager.searchManager(s);……

  继续往下找,Manager 类的searchManager方法。

  看到了吧!这个程序从这条SQL语句上做了手脚,让客户在后台查询所有管理员时看不到'ilovethisgame'这个用户,记录日志的时候,也同样使用了类似的方法,导致系统日志忽略了该用户。而程序的其他地方,比如修改管理员、登陆,等地方不受影响。

  这个例子,总体上来说思想很有创意,但是手法上并不成熟,只要看到了代码,或者看到了数据库的数据,就会被我一层一层抓出来,甚至在我以前不懂JSP的情况下还把后门揪了出来。而且数据库里的管理员表里的数据也很明显,一旦客户使用mysqladmin一类的工具浏览数据库,不就曝光了?后门的“覆盖面”有点大,容易被客户的数据库管理员发现。

  MYSQL 5.0版本已经支持了存储过程,针对这个例子,应该把后门放到数据库的存储过程中,这样程序里就不会出现这么明显的痕迹。当客户查看代码时,只能看到一个返回结果集的存储过程,把这句"SELECT * FROM csmmanager WHERE managerid <> 'ilovethisgame'"封装到存储过程里。在登陆的时候也调用一个返回值是布尔的存储过程,判断如果用户是ilovethisgame时,直接通过。效果是一样的,却很隐蔽,代码简单,我就不写了,只提供个思路。

  总的来说,我们应该尽量减少代码里的后门痕迹,把侧重点扔到数据库上。有这么几大好处。

  1, 避免了后门覆盖面太大,降低被发现的风险。

  2, 代码开发管理员不必都知道有这么一个后门,等程序开发完成,就由某个特定的人把数据库的存储过程一改。

  3, 存储过程可以加密,又降低了风险。

  4, 即使暴露,可以解释为测试程序时遗留的小问题。利于推卸责任。

  5, 有一天需要清除后门,只需给数据库加个SQL文件补丁就可以了。

  可以想象,如果我给你个试用版,而你一直不买正版,我对你不满,随时可以在任何地方登陆你的后台,做出一些合法(程序上允许)而不合法(你不希望出现)的操作,系统上没有日志,然后告诉你这个“现象”属于试用版BUG…(黑…真黑…)

转载于:https://blog.51cto.com/linkboy/300541

在WEB程序中隐藏后门相关推荐

  1. 白话数字签名(3)——Web程序中的数字签名

    转自:http://www.cnblogs.com/1-2-3/archive/2007/10/08/colloquialism-digital-certificate-part3.html 摘要 阅 ...

  2. 白话数字签名(3)——Web程序中的数字签名【转】

    摘要 阅读本文并探索     - 如何突破Web程序无状态性这个让人抓狂的障碍实现自动显示签名结果和批量签名功能.     - 如何将签名功能封装到一个实现了IHttpHandler接口的类库中,使C ...

  3. 白话数字签名(3)—Web程序中的数字签名

    原文地址:http://www.cnblogs.com/1-2-3/archive/2007/10/08/colloquialism-digital-certificate-part3.html 作者 ...

  4. 白话数字签名(3)——Web程序中的数字签名 1

    2007年10月10日 06:47:00 来自:1-2-3.cnblogs.com 摘要 阅读本文并探索 - 如何突破Web程序无状态性这个让人抓狂的障碍实现自动显示签名结果和批量签名功能. - 如何 ...

  5. java怎么加定时器_JAVA WEB程序中添加定时器

    JAVA WEB程序中添加定时器 //这是我的定时器类,用来定时执行某段任务: package com.my.time; import java.text.ParseException; import ...

  6. Java web程序中备份oracle数据库

    Java web程序中备份oracle数据库 1.生成备份文件: public ActionForward createDmp(ActionMapping mapping, ActionForm fo ...

  7. 在控制台程序中隐藏控制台窗口

    在控制台程序中隐藏控制台窗口 大家都知道,当编写一个win32 console application时,当运行此类程序的时候 默认情况下会有一个类似DOS窗口的console窗口,但是有的时候我们只 ...

  8. json日期格式化 java_java_Java Web程序中利用Spring框架返回JSON格式的日期,返回Json时格式化日期Date 第一 - phpStudy...

    Java Web程序中利用Spring框架返回JSON格式的日期 返回Json时格式化日期Date第一步:创建CustomObjectMapper类 /** * 解决SpringMVC使用@Respo ...

  9. 慕课软件质量保证与测试(第九章.程序中隐藏错误数量估计)

    慕课金陵科技学院.软件质量保证与测试.第九章.软件质量与质量保证.程序中隐藏错误数量估计 0 目录 9 软件质量与质量保证 9.2 程序中隐藏错误数量估计 9.2.1 课堂重点 9.2.2 测试与作业 ...

最新文章

  1. C#中类的继承 override virtual new的作用以及代码分析
  2. django报错:django.db.utils.OperationalError: no such table:
  3. Modern CSV中文版
  4. How to custom RedHat DVD
  5. vue插槽面试题_关于前端Vue框架的面试题,面试官可能会问到哪些。?
  6. java consumer 使用_java.util.function.Consumer的用法
  7. python 示例_Python日历类| yeardatescalendar()方法与示例
  8. Git/Gitee创建仓库添加文件【1】
  9. VB.NET 通常用法使用笔记
  10. Matplotlib 基本用法
  11. 29.3. phpMyAdmin - MySQL web administration tool
  12. 在几何画板中如何制作圆柱的侧面展开动画_几何画板制作圆柱体的形成动画演示方法...
  13. 免费抖音视频解析网站_抖音规则解析:抖音视频为什么能火?推荐规则是什么?【揭秘】...
  14. 电力相关的中文期刊查找
  15. 附合导线坐标计算例题_附合导线坐标计算表和空白表格.doc
  16. Java中不同时区时间的转换
  17. antv/G6使用详细介绍,一篇文章说清antv G6如何使用
  18. c语言编程图形篮球,c语言程序设计 用高级语言实现篮球联赛个人技术数据处理系统...
  19. cad标注样式快捷键_CAD新手福利:不懂标注样式修改的请进来一看
  20. php图片点阵,HTML5边玩边学(八)-砖块贴图点阵字

热门文章

  1. 为 iOS 6 量身打造 Apps
  2. WCF中如何修改MaxItemsInObjectGraph的限制
  3. 销售99绝招 成功没商量
  4. CF915E Physical Education Lessons(珂朵莉树)
  5. Django Drops
  6. SparkSQL简介
  7. flask及扩展源码解读
  8. 数字三角形_递归_递推(动态规划)
  9. 批量注册windows下的动态库
  10. 如何防止远程程序与RDS PG连接中断