摘要: 文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

1.1前言

文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

1.2代码审计实例:zzcms8.2

前言

代码审计,最重要的就是多读代码,对用户与网站交互的地方要特别注意。在进行审计时,我们也可以使用一些审计工具来辅助我们进行工作,从而提高效率。下面,笔者将分享审计zzcms8.2的过程,与大家一起学习。这里,笔者,使用seay源代码审计系统软件进行辅助工作。

1.2.1审计流程

首先,笔者打开seay源代码审计系统软件,将要审计的网站源码导入项目,然后点击自动审计。当审计完成时,我们需要根据自动审计的结果,进行逐一验证。当然,我们不需要真的每个文件都打开看过去,可以根据扫描报告中的漏洞详细信息来判断是否可能存在漏洞,如果你觉得某个地方可能存在,这时,你再打开具体文件查看。图片64.png

如果你想查询某个变量或者函数在代码中的具体位置,你也可以使用全局定位搜索,该软件会快速地定位找出具体文件,这一功能大大加快了我们审计的速度。对于来自用户的数据以及后端对数据库的操作,我们要特别注意。下面笔者介绍zzcms8.2的审计过程。图片65.png

1.2.2实战zzcms8.2

1.2.2.1 sql 注入漏洞

首先, “/user/del.php”开头两行包含了两个文件  ” /inc/conn.php”、”/user/check.php”,而”/inc/conn.php”又包含了一些文件,其中要关注的是” /inc/function.php”和” /inc/stopsqlin.php”。其中” /inc/function.php”提供了一些关键的功能函数,而” /inc/stopsqlin.php”则是防止sql注入的包含。

image.png

“/inc/stopsqlin.php”文件,则会对REQUEST的数据进行过滤,具体代码如下

image.png

我们来看一下”/user/check.php”函数是否存在可利用的地方,这个文件中有 5  处 SQL  语句查询,第一处,无法利用,因为首先参数经过”/inc/stopsqlin.php”消毒处理,且被单引号包裹,无法闭合。

image.png

剩下4处SQL语句要想执行,就必须要先进行注册账号。先来看第二处的sql语句。我们再看getip()函数时,可以发现这里的ip可以伪造,而且代码未经任何过滤,仅仅只是用单引号包裹拼接。

image.png

那么我们直接用sqlmap跑一下,这里我事先注册好了test用户密码为test,zzcms将用户的密码经md5加密后存在数据库中,结果如下:图片66.png

那么最后剩下的3处sql语句都无法利用,继续往下看。

image.png

在130多行处,我们发现有一个sql语句直接将$tablename变量直接进行拼接了,而这个$tablename 变量可直接从 post  方式获取,代码未经任何过滤直接拼接,从而引发了sql注入。

image.png

但是这并不是一个通用 payload,因为如果 zzcms_answer  是一个空表,则该 payload 无法利用,所以我们改进一下,payload  改成如下即可,这里注意不能使用大于号、小于号,因为    post  上来的数据被 

image.png图片67.png

在”/user/logincheck.php”、”/admin/logincheck.php”中也存在多处由ip导致的sql注入,这里就不一一列举了。

1.2.2.2  任意文件删除漏洞


该漏洞发生在80多行处的变量,该变量直接由与oldimg拼接而得,并未过滤.和/字符,导致跨目录删除文件。所以按照代码逻辑,我们只要让不等于oldimg,且$action等于”modify”即可。

image.png

payload如下:

image.png

图片68.png

同样的漏洞发生在”/user/licence_save.php”30多行处

image.png

payload如下:

image.png

该 漏 洞 还 存 在 于 “/user/manage.php” 、 “/user/ppsave.php”  、”/user/zssave.php”、等文件中。

1.2.2.3  网站重装漏洞

来看一下”/install/index.php”文件的代码流程,发现这里并没有检测”/install/install.lock”文件是否存在,那应该是在其他文件中。

image.png

然 而 发 现 , 只 有 “/install/step_1.php” 文 件 在 开 头 有 检 测”/install/install.lock”文件是否存在(存在表示已经安装过),其他”/install/step_2.php”、”/install/step_3.php”、”/install/step_4.php”、”/install/step_5.php”、”/install/step_6.php”都少了该判断导致该漏洞的发生。

image.png

所以我们可以跳过第一步的检测,直接访问”/install/step_2.php”文件,payload如下:

image.png

图片69.png

1.2.2.4 反射型 XSS

该漏洞出现在”/inc/top.php”文件中,需要用户登录方可利用。之前的大部分文件都会在开头包含” /inc/conn.php”文件,对 REQUEST  数据进行消毒处理,而这个文件没有,从而导致漏洞的发生。我们只需要将标签闭合即可实现反射型xss。

image.png

图片70.png

同样的漏洞还出现在”/uploadimg_form.php”文件66-67行处,这里不赘述。

1.2.2.5  文件上传漏洞

“/uploadimg_form.php”文件提供了一个文件上传的功能,然而这里没有过滤好,导致可以上传webshell。我们可以来看一下后端代码是如何进行验证的。

image.png

首先,先判断文件是否存在,再检查文件是否超过限制,接着检查文件类型,这里可以用GIF89a绕过检查,最后使用黑名单机制检查文件后缀,问题就出在这里,黑名单少过滤了phtml,而apache会将phtml文件按照php文件来解析。所以我们可以构造payload如下,当然,使用copy命令生成的图片木马也可以绕过图片71.png图片72.png


1.2.2.6  结束语

当然,大家也可以使用其他的审计工具进行辅助,只要适合自己,有利于审计即可。

原文地址:https://www.freebuf.com/column/230282.html


上一篇:Webshell免杀
下一篇:CTF中的命令执行绕过