AKun Wallpaper 代码审计实战分析2

前言

在上一期我已经介绍了AKun Wallpaper的部署,分析了部分xss漏洞并且讲解了如何修复这些漏洞。如果还没有看过我上一期文章可以先回到上一期:https://blog.csdn.net/rpsate/article/details/122354690。在这一篇文章中我将继续分析xss漏洞,但是与上一期中类似的xss漏洞将会直接跳过。

漏洞分析1

注意下图中标红的 (Shared Sink) - [0/7],这说明有7个数据流共享一个数据输出点。也就是有7个位置接收数据,这7个不同的数据将会在同一个地方输出。我们在修复漏洞时,可以在数据流输入的位置处理数据也可以在输出的地方处理数据,所以我们在 alert($message, $redirect)函数中处理即可同时修复这几个漏洞。

在这里插入图片描述

当光标放在文件名上时,会提示文件的路径。用phpstorm打开这个文件进行修改,当然也可以在fortify上直接修改。

在这里插入图片描述

用转义函数处理这两个变量,将下列两行代码加入到 alert函数中。

$message = my_htmlspecialchars($message);
$redirect = my_htmlspecialchars($redirect);

在这里插入图片描述

然后选中刚修复的漏洞,右击鼠标并点击 Unsuppress Issues,然后就会在漏洞前面看到X状图标,这代表你忽略这个漏洞或处理完了这个漏洞。

在这里插入图片描述

如果点击Unsuppress Issues后发现漏洞不见了,可以在菜单栏依次点击 Options> Show Suppressed Issues

在这里插入图片描述

漏洞分析2

看到 index.php第22行,这里的数据是直接从cookie中获取。我们不能直接修改别人浏览器中的cookie,也就是这里不会存在xss漏洞。如果网站有跨域资源共享漏洞(CORS)就可以通过ajax请求修改受害者cookie,结合此处就代码就形成xss漏洞,所以最好在此处对特殊字符进行转义。

在这里插入图片描述

漏洞分析3

我们对 $_COOKIE['adminUser']处理后再仔细观察此处代码,发现程序首先会判断 $_SESSION['adminUser']是否存在,如果不存在就会获取 $_COOKIE['adminUser']的值。我们知道session是无法改变的,但是自己浏览器上的cookie是可以任意修改的。我们猜测判断登录的逻辑也和此处一样,如果一样则可以通过修改cookie来绕过登录。

在这里插入图片描述

在index.php的第3行有判断登录的函数,按住 ctrl同时用鼠标点击 checkLogin(),这样就跳转到了该函数定义的位置。

在这里插入图片描述

发现判断登录的函数的逻辑果然和上一处一样。程序会判断 $_SESSION['adminId']$_COOKIE['adminId']是否存在且不等于空,只要其中一个存在且不等于空则会认为用户已经登录。

在这里插入图片描述

漏洞复现

首先打开网站后台,发现无法访问。

在这里插入图片描述

在cookie中添加 adminId,其值为1。

在这里插入图片描述

再次访问后台,发现可以成功进入。

在这里插入图片描述

修复方法

禁止使用cookie值作为登录的标志,修改后代码如下图所示。但是这样修改后就无法保存登录状态,每次进入后台都要重新登录。

在这里插入图片描述

漏洞分析4

看到 page.func.php的第3行,这条数据流的来源 $_SERVER['PHP_SELF'],经过一系列处理后直接输出在页面,中间没有对特殊字符进行转义。其中 $_SERVER['PHP_SELF']是获取url中文件地址和文件名,例如访问 http://localhost/admin/index.php?id=1,该页面中的 $_SERVER['PHP_SELF']就等于 /admin/index.php。再例如访问 http://localhost/admin/index.php/<script>alert(1)</script>?id=1,该页面中的$_SERVER['PHP_SELF']就等于 /admin/index.php/<script>alert(1)</script>,这样就成功利用了xss漏洞。

在这里插入图片描述

漏洞复现

/indexpc.php中搜索图片,图片要大于1页才会显示页码。发现该网页文件名已经显示了在浏览器中。

可以在/indexpc.php中66,69行修改每页图片张数,默认是每页20张,如下图所示是修改为每页2张图片。

在这里插入图片描述

/indexpc.php加上恶意代码并访问: /indexpc.php/'><script>alert(1)</script>,发现成功弹出提示框。

注意浏览器中显示的是 ",但是实际上是 ',所以此处需要单引号来闭合标签。

在这里插入图片描述

其他xss漏洞也是以同样的方法修复,这里就不在赘述。下一期分析任意文件删除漏洞和sql注入漏洞。
最后感谢我的室友斧正。

posted @ 2022-01-08 23:23  rpsate  阅读(160)  评论(0编辑  收藏  举报