飞道的博客

熊海CMS1.0 代码审计

307人阅读  评论(0)

前言

有一段时间没碰Web了,感觉都快忘完了。。。又到周末,既然要坚持2周审一个CMS,那就在周末再审一个CMS了。还是简单的CMS,慢慢熟悉各种CMS的构造,慢慢学习审计和测试和思路。

SQL注入(存在)

select注入(后台)

本来以为这个CMS的SQL防护能好一点。。。结果感觉和屎一样。。。看个最简单的吧,后台登录:/admin/?r=login

0防护。。。直接union联合注入,即可进入后台:

user='union select 1,2,3,'c4ca4238a0b923820dcc509a6f75849b',5,6,7,8%23&password=1&login=yes

update时间注入

Seay扫一下,报了这个:

看一下:

<?php 
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);

//浏览计数
$query = "UPDATE content SET hit = hit+1 WHERE id=$id";
@mysql_query($query) or die('修改错误:'.mysql_error());
?>

乍一看感觉$ud被addslashes给搞了没法注入,但是发现最后的update注入:

$query = "UPDATE content SET hit = hit+1 WHERE id=$id";

这里的where id=是没用单引号的,所以这里可以注入。但是因为下一行的mysql_query前面加了@,没法报错了,只能时间注入了。具体payload不写了。

同理,files/software.php里面也是这样的:

其他SQL注入

此外,admin的管理里面还剩下一堆的sql注入,就不一一列了,这个CMS感觉SQL注入的防护做的还是太差了。。。。

写配置(install的时候可以)

很多CMS的后台更改配置的时候,会把更改的配置写到php文件里,对于写入的配置如果没有进行一定的过滤的话,就会导致getshell。
但是这个CMS主要还是与数据库进行交互的,各种数据都存到了数据库里面,基本上没有把配置写到php文件里的操作,有也是在鸡肋的install/index.php里面:

无过滤,随便写就可以getshell,不过是install的时候才能写,没锤子用。

后台文件上传(失败)

看一下文件上传点:

抓个包尝试上传,还是限制了后缀不能是php。找了一下,也没找到可以修改后缀限制的配置。看一下代码,主要还是这里:

    function TODO()
    {
   //main 主类:设好参数,可以直接调用
        $pass = true;
        if (!$this->GetFileAttri()) {
   
            $pass = false;
        }
        if (!$this->CheckFileMIMEType()) {
   
            $pass = false;
            $this->error .= die("<script language=\"javascript\">alert('图片类型不正确,允许格式:jpg|jpeg|gif|bmp。');history.back()</script>");
        }

$this->CheckFileMIMEType()函数检查后缀:

    function CheckFileMIMEType()
    {
   
        $pass = false;
        $defineTypeList = strtolower($this->defineTypeList);
        $MIME = strtolower($this->GetFileMIME());
        if (!empty ($defineTypeList)) {
   
            if (!empty ($MIME)) {
   
                foreach (explode("|", $defineTypeList) as $tmp) {
   
                    if ($tmp == $MIME) {
   
                        $pass = true;
                    }
                }
            } else {
   
                return false;
            }
        } else {
   
            return false;
        }
        return $pass;
    }

$this->defineTypeList

    var $defineTypeList = "jpg|jpeg|gif|bmp|png";

改不了,其他的文件上传点也都进行了后缀的限制,因此这个CMS后台传不了马,GG。

后台登录绕过

看的别的师傅的,原来这CMS处理是否登录也贼有毒。。。。

只要Cookie的user值不为空就能登录成功。。。。处理的真tm敷衍。。。。。

总结

这CMS就是一堆无过滤的SQL注入,但是拿不到shell,有点伤。算了再去找一套CMS审一下。。。感觉审这样的CMS属实难受。。。还是能拿shell的CMS快乐。


转载:https://blog.csdn.net/rfrder/article/details/115793445
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场