有一段时间没碰Web了,感觉都快忘完了。。。又到周末,既然要坚持2周审一个CMS,那就在周末再审一个CMS了。还是简单的CMS,慢慢熟悉各种CMS的构造,慢慢学习审计和测试和思路。
本来以为这个CMS的SQL防护能好一点。。。结果感觉和屎一样。。。看个最简单的吧,后台登录:/admin/?r=login
:
0防护。。。直接union联合注入,即可进入后台:
user='union select 1,2,3,'c4ca4238a0b923820dcc509a6f75849b',5,6,7,8%23&password=1&login=yes
看一下:
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不写了。
此外,admin的管理里面还剩下一堆的sql注入,就不一一列了,这个CMS感觉SQL注入的防护做的还是太差了。。。。
很多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("");
}
$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。
只要Cookie的user值不为空就能登录成功。。。。处理的真tm敷衍。。。。。
这CMS就是一堆无过滤的SQL注入,但是拿不到shell,有点伤。算了再去找一套CMS审一下。。。感觉审这样的CMS属实难受。。。还是能拿shell的CMS快乐。