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打开文件夹。
见面就有一个漏洞,典型的文件包含漏洞
这里有一个addslashes对r参数进行了过滤,实际上一点用都没有,addslashes函数只有对"有用。
然后展开利用。在当前文件上传创建一个文件
<?phpphpinfo();?>
我当时测试的时候是还有一个sql注入的,到时候来一个组合应用。
1.2 修复
这里对该漏洞进行修复,想法是进行白名单操作,将所有可能调用的都写在一个数组里。然后封装成一个函数。
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 "别试了,我已经被修复了"; }
然后就是一个简单的调用。
我们来测试一下效果。
修复get。
2.越权漏洞
2.1 审计
之前听大佬说过,一般inc文件夹多半就会有问题。
看到这里,发现这里有一个对cookie的判断。
简单的分析一下就是如果user不为空的话,那么就可以进行操作。
这里是调用的位置。
我们来进行利用
首先需要找到用户名。
cookie添加user
然后爆破一下
这里找到admin
然后进行绕过测试
成功登入后台
2.2 修复
这里直接添加
if(!defined('IN_SYS')) { exit('不好意思,越权已经被我干掉了~'); }
就可以防止url直接访问啦。
我们来进行一下测试
3. 资料处存储型XSS
3.1 审计
我们在这里进行存储型xss的测试。
成功
看一下源码
发现在存储的时候没有任何的过滤。
emmmm
找一下输出的地方。
也没有过滤,那么有xss也说的过去了。
3.2 修复
使用htmlentities进行修复
修复效果
4.登录存在post sql注入
4.1 审计
bp转包,保存为txt
sqlmap -r 跑一下
成功注入。
我们来看一下源码
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函数来进行修复
效果:
5. 前台的存储型xss
5.1 审计
这里发现了一个文章评论的地方,在内容的地方没有xss,但是在昵称的这个地方有xss
payload:<img src=1 onerror=alert(/du/)>
来看一下源码
<?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。
这里直接插入了,没有进行过滤,所以有xss,也是应该的。。。。
再看看前台页面的输入吧。
页面打印的时候也么有进行过滤。
然后来看一下content字段,为什么没有xss。
5.2 修复
这里我们使用htmlentities()来修复一下。
也可以在页面输出的位置进行过滤。
效果
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进行查询,而且有没有过滤,典型的注入。
顺手修好。
7.前台的一个报错get型sql注入
7.1 审计
在文章加载这里有一个cid。
尝试进行注入
注入成功。
查看一下相对应的源码吧。
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添加单引号的时候。
发现报错了。
因为之前遇到过,所以这里直接使用payload。
反射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代码审计与漏洞修复
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论