资讯专栏INFORMATION COLUMN

Java代码审计连载之—添油加醋

dunizb / 1936人阅读

摘要:在代码审计中,按业务流程审计当然是必须的,人工的流程审计的优点是能够更加全面的发现漏洞,但是缺点是查找漏洞效率低下。代码审计学习之旅总有人问我代码审计该怎么学习,该从哪学习,现在统一回复,表示我也不知道。。。

在代码审计中,按业务流程审计当然是必须的,人工的流程审计的优点是能够更加全面的发现漏洞,但是缺点是查找漏洞效率低下。如果要定向的查找漏洞,逆向跟踪变量技术就显得更加突出,如查找XSS、SQL注入、命令执行……等等,逆向查找变量能够快速定位漏洞是否存在,本次已SQL注入为例。

本文作者:黑客小平哥,i春秋首发

前言

本篇文章原本是个PPT,但是一直放着没有分享,想着闲着也是闲着,那就改成文章发布吧。其实本篇重点在于两个知识点,一个是代码审计的逆向思维,另一个是二次攻击漏洞,其他的我都省略了,就写几个重要的吧。对于二次攻击我也是最近才研究的,研究了点皮毛,错误之处还请广大圈友指正,谢谢。

代码审计学习之旅

总有人问我代码审计该怎么学习,该从哪学习,现在统一回复,表示我也不知道。。。

但是对于个人的学习路线来说,路程是漫长而艰辛的,建议学习如下(直接截图了):

上面我写的是“熟悉”,这只是对刚入行的同学说的,作为代码审计来说,熟练编写代码程序是必须的,要想深度化发展,精通一门语言是必经之路。

知识一-变量逆向跟踪

在代码审计中,按业务流程审计当然是必须的,人工的流程审计的优点是能够更加全面的发现漏洞,但是缺点是查找漏洞效率低下。如果要定向的查找漏洞,逆向跟踪变量技术就显得更加突出,如查找XSS、SQL注入、命令执行……等等,逆向查找变量能够快速定位漏洞是否存在,本次已SQL注入为例。

什么是逆向跟踪 顾名思义,逆向跟踪就是对变量的逆向查找,开始全局查找出可能存在漏洞的触发点,然后回溯参数到前端,查看参数来源已经参数传递过程中的处理过程。

逆向跟踪流程 怎样才能快速定位呢?下面我们一起看下流程。

1、 查看全局文件web.xml

Web.xml主要是配置web项目启动时加载的信息,比如配置你的监听器,配置过滤器,配置你的servlet实现。我们主要查看全局过滤器是否过滤特殊字符已经过滤哪些字符,显然没有。

2、 寻找漏洞触发点

本次以SQL注入为例,SQL注入我就不说了,相关文档一堆。当我们看到如下形势的SQL语句,就可能存在SQL注入:

因为安全的写法是这样的:

那么,参数“word”可能存在SQL注入漏洞,那我们就回溯“word”参数,看看“word”值到底是怎么传进来的,回溯到控制层,发现该“word”参数:

追踪到控制层基本可以确定漏洞存在,并且没有做相应的过滤,但是为防止“search”方法只是内部调用,继续回溯“searchword”值,查看是否从前端页面传入的:

发现该“searchword”是从前端页面传入,因此可以确定漏洞存在,SQLmap截图如下:

以上就是简单的逆向跟踪变量小技巧,什么?太low?没办法,就这水平。
方面的资料网上很少,我自己研究了一阵子,发现二次攻击形势有很多,也没明白多少,这次就谈谈容易明白的二次命令攻击漏洞,不喜勿喷。

二次漏洞定义:

攻击者提交的恶意的代码不是直接通过一个变量提交漏洞函数而是通过变量转化或者中转,最终提交到漏洞函数。

二次漏洞特点:

1、常常存在漏洞类型的转换。

2、常常存在变量中转。

二次漏洞类型:

1、通过SQL注射漏洞转化。

2、通过编码/解码中转变量。

3、其它方式。

二次命令攻击

二次注入漏洞是一种在Web应用程序中广泛存在的安全漏洞形式。相对于一次注入漏洞而言,二次注入漏洞更难以被发现,但是它却具有与一次注入攻击漏洞相同的攻击威力。

基本流程如下:

1、 构造参数

在数据库正常的插入、更新等操作中,构造特殊的命令,存储在数据库中:

此处只是方便展示漏洞原理,真实代码中的情况可能复杂的多,此处构造了“cmd”参数为“ipconfig”存储在数据库中。

2、 提取变量

当系统内部某处主动调用该参数时,经过了相对应的命令执行参数,就会产生命令攻击。

经过Runtime函数,执行命令执行:

看到这里肯定有人一脸懵逼,精明的小伙伴就看出问题了,这二次攻击不是和存储型跨站一样么,没啥区别啊?

然而严格来说存储型跨站并不属于二次攻击漏洞,存储型跨站虽然也是以数据库作为中转,但是它执行的方式还是靠人为去点击才能生效,但是二次攻击是存储后主动攻击,这就是根本的区别。
结论

上面两点纯属个人理解,有什么错误的地方请多多指教。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67561.html

相关文章

  • java 基础 - 收藏集 - 掘金

    摘要:基础知识复习后端掘金的作用表示静态修饰符,使用修饰的变量,在中分配内存后一直存在,直到程序退出才释放空间。将对象编码为字节流称之为序列化,反之将字节流重建成对象称之为反序列化。 Java 学习过程|完整思维导图 - 后端 - 掘金JVM 1. 内存模型( 内存分为几部分? 堆溢出、栈溢出原因及实例?线上如何排查?) 2. 类加载机制 3. 垃圾回收 Java基础 什么是接口?什么是抽象...

    makeFoxPlay 评论0 收藏0
  • Java编程思想学习录(连载:内部类)

    摘要:非内部类通过一个特殊的链接到其外围类的对象,而类型的内部类无此引用。 showImg(https://segmentfault.com/img/remote/1460000012925199); 用thinkpad打字确实很爽啊! Thinking in java系列博文目录: Java编程思想学习录(连载之:一切都是对象) Java编程思想学习录(连载之:初始化与清理) Java...

    Meils 评论0 收藏0
  • Java编程思想学习录(连载:异常)

    摘要:系列博文目录编程思想学习录连载之一切都是对象编程思想学习录连载之初始化与清理编程思想学习录连载之内部类编程思想学习录连载之异常本篇文章将讲述关于异常的相关知识注本文首发于公众号,可长按或扫描下面的小心心来订阅基本概念使用异常来提供一致性的错 showImg(https://segmentfault.com/img/remote/1460000013228854); Thinking ...

    pkhope 评论0 收藏0
  • 面试题思考:try 代码块中含 return 语句时,代码执行顺序

    摘要:刷面试题偶然看到这类问题中含有时的执行顺序,觉得挺有意思于是小小的研究了一下,希望经过我添油加醋天马行空之后,能给你带来一定的帮助原题里有一个语句,那么紧跟在这个后的里的代码会不会被执行什么时候被执行在前还是后乍一看题目很简单嘛,规范都说了 刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经过我添油加醋天马...

    chunquedong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<