熊海CMS代码审计与漏洞修复

admin 2021年12月1日08:26:22代码审计评论70 views3827字阅读12分45秒阅读模式

熊海CMS代码审计与漏洞修复

0x00 前言


最近学习代码审计,找到一个小型cms审计一下,然后再尝试进行修复。


0x01 漏洞总结


id 漏洞 修复
1 文件包含漏洞
2 越权漏洞,登录绕过
3 资料处存储型XSS
4 登录存在post sql注入
5 前台的评论处存储型型xss
6 意外发现的一枚post注入
7 前台的一个报错get型sql注入
8 sql注入报错伴随的反射型xss


0x02 漏洞审计

1.文件包含漏洞

1.1 审计

sublime打开文件夹。
见面就有一个漏洞,典型的文件包含漏洞


熊海CMS代码审计与漏洞修复


这里有一个addslashes对r参数进行了过滤,实际上一点用都没有,addslashes函数只有对"有用。


然后展开利用。在当前文件上传创建一个文件


<?phpphpinfo();?>


熊海CMS代码审计与漏洞修复


我当时测试的时候是还有一个sql注入的,到时候来一个组合应用。

1.2 修复

这里对该漏洞进行修复,想法是进行白名单操作,将所有可能调用的都写在一个数组里。然后封装成一个函数。


熊海CMS代码审计与漏洞修复

function protect($r){     $key=0;     $cars=array("about","contact","content","download","downloads","index","list","pages","software","submit");     for ($i=0;$i<count($cars);$i++){         if($r==$cars[$i])             $key=1;     }     return $key; }


这个就是封装的函数,代码质量不高。。。大佬们可自行调整。


if (protect($action)==1){     include('files/'.$action.'.php'); //载入相应文件}else{     echo "别试了,我已经被修复了"; }


然后就是一个简单的调用。

我们来测试一下效果。


熊海CMS代码审计与漏洞修复


修复get。

2.越权漏洞

2.1 审计

之前听大佬说过,一般inc文件夹多半就会有问题。


熊海CMS代码审计与漏洞修复


看到这里,发现这里有一个对cookie的判断。
简单的分析一下就是如果user不为空的话,那么就可以进行操作。


熊海CMS代码审计与漏洞修复


这里是调用的位置。

我们来进行利用
首先需要找到用户名。
cookie添加user


熊海CMS代码审计与漏洞修复


然后爆破一下


熊海CMS代码审计与漏洞修复


这里找到admin
然后进行绕过测试


熊海CMS代码审计与漏洞修复


成功登入后台


熊海CMS代码审计与漏洞修复


2.2 修复


熊海CMS代码审计与漏洞修复


这里直接添加

if(!defined('IN_SYS')) {  exit('不好意思,越权已经被我干掉了~');  }

就可以防止url直接访问啦。
我们来进行一下测试


熊海CMS代码审计与漏洞修复


3. 资料处存储型XSS

3.1 审计


熊海CMS代码审计与漏洞修复


我们在这里进行存储型xss的测试。


熊海CMS代码审计与漏洞修复


成功

看一下源码


熊海CMS代码审计与漏洞修复


发现在存储的时候没有任何的过滤。

emmmm

找一下输出的地方。


熊海CMS代码审计与漏洞修复


也没有过滤,那么有xss也说的过去了。

3.2 修复

使用htmlentities进行修复


熊海CMS代码审计与漏洞修复


修复效果


熊海CMS代码审计与漏洞修复


4.登录存在post sql注入

4.1 审计

熊海CMS代码审计与漏洞修复


bp转包,保存为txt


熊海CMS代码审计与漏洞修复


sqlmap -r 跑一下


熊海CMS代码审计与漏洞修复


成功注入。

我们来看一下源码

if ($login<>""){$query = "SELECT * FROM manage WHERE user='$user'";$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());$users = mysql_fetch_array($result);if (!mysql_num_rows($result)) {  echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";exit; }else{$passwords=$users['password'];if(md5($password)<>$passwords){echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";exit;        }//写入登录信息并记住30天if ($checkbox==1){ setcookie('user',$user,time()+3600*24*30,'/'); }else{ setcookie('user',$user,0,'/'); }echo "<script>this.location='?r=index'</script>";exit; }exit; ob_end_flush(); }


这里很清楚的看到使用的是直接拼接,所以必然存在sql注入。

4.2 修复

使用mysql_real_escape_string函数来进行修复


熊海CMS代码审计与漏洞修复


效果:


熊海CMS代码审计与漏洞修复


5. 前台的存储型xss

5.1 审计

这里发现了一个文章评论的地方,在内容的地方没有xss,但是在昵称的这个地方有xss


熊海CMS代码审计与漏洞修复


payload:<img src=1 onerror=alert(/du/)>


熊海CMS代码审计与漏洞修复


来看一下源码


<?phpsession_start();require 'inc/conn.php';$type=addslashes($_GET['type']);$name=$_POST['name'];$mail=$_POST['mail'];$url=$_POST['url'];$content=$_POST['content'];$cid=$_POST['cid'];$ip=$_SERVER["REMOTE_ADDR"];$tz=$_POST['tz'];if ($tz==""){$tz=0;}$jz=$_POST['jz'];


这里是获取到了name等字段的变量。我们的主要目的就是了解为什么昵称存在xss,内容不存在xss。


熊海CMS代码审计与漏洞修复


这里直接插入了,没有进行过滤,所以有xss,也是应该的。。。。
再看看前台页面的输入吧。


熊海CMS代码审计与漏洞修复


页面打印的时候也么有进行过滤。

然后来看一下content字段,为什么没有xss。


熊海CMS代码审计与漏洞修复


5.2 修复


熊海CMS代码审计与漏洞修复


这里我们使用htmlentities()来修复一下。
也可以在页面输出的位置进行过滤。


熊海CMS代码审计与漏洞修复


效果


熊海CMS代码审计与漏洞修复


6. 意外发现的一枚 post 注入

在看上面的xss的时候,突然发现这里还有一枚post注入。


//查询用户头像数据$query = "SELECT * FROM interaction WHERE( mail = '$mail')";$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());$tx = mysql_fetch_array($result);if (!mysql_num_rows($result)){  $touxiang = mt_rand(1,100); }else{$touxiang = $tx['touxiang']; }

直接使用mail进行查询,而且有没有过滤,典型的注入。

顺手修好。


熊海CMS代码审计与漏洞修复


7.前台的一个报错get型sql注入

7.1 审计


熊海CMS代码审计与漏洞修复


在文章加载这里有一个cid。
尝试进行注入


熊海CMS代码审计与漏洞修复


注入成功。
查看一下相对应的源码吧。


require 'inc/conn.php';require 'inc/time.class.php';$query = "SELECT * FROM settings";$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());$info = mysql_fetch_array($resul);$id=addslashes($_GET['cid']);$query = "SELECT * FROM content WHERE id='$id'";$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());$content = mysql_fetch_array($resul);$navid=$content['navclass'];$query = "SELECT * FROM navclass WHERE id='$navid'";$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());$navs = mysql_fetch_array($resul);

这里发现cid 使用addslashes进行过滤的,不过这明显是一个字符型的注入,addslashes没什么用,所以存在sql注入。


7.2 修复

使用mysql_real_escape_string。

之后发现有很多地方的cid都有这个操作,只要把所有的cid都是用mysql_real_escape_string过滤一下,就可以避免这种sql注入漏洞。

8.sql注入报错伴随的反射xss

8.1 审计

当我们对sql注入的url添加单引号的时候。


熊海CMS代码审计与漏洞修复


发现报错了。
因为之前遇到过,所以这里直接使用payload。


熊海CMS代码审计与漏洞修复


反射xss入手
看一下关键代码。

$id=mysql_real_escape_string($_GET['cid']);$query = "SELECT * FROM content WHERE id='$id'";$resul = mysql_query($query) or die('SQL语句有误:'.mysql_error());$content = mysql_fetch_array($resul);


这里会直接报错,而且会把错误的地方放出来。

8.2 修复

熊海CMS代码审计与漏洞修复


这个cms里全部都是洞 ,大家要是感兴趣的话可以自己搭建把所有的漏洞都找出来。这里就不多说啦~
祝大家心情愉快

熊海CMS代码审计与漏洞修复


本文始发于微信公众号(疯猫网络):熊海CMS代码审计与漏洞修复

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月1日08:26:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  熊海CMS代码审计与漏洞修复 http://cn-sec.com/archives/513261.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: