一、 启动环境

1.双击运行桌面phpstudy.exe软件



2.点击启动按钮,启动服务器环境

二、代码审计

1.双击启动桌面Seay源代码审计系统软件



2.因为74CMS3.0源代码编辑使用GBK编辑,所以首先需要先将编码改成GBK



3.点击新建项目按钮,弹出对画框中选择(C:\phpStudy\WWW\74cms),点击确定

漏洞分析

1.点击展开左侧link目录,弹出的下拉列表中双击add_link.php文件,右侧页面可以看到相关代码。

elseif ($act=="save")
{
if ($_CFG['app_link']<>"1")
{
showmsg('已停止自助申请链接,请联系网站管理员!',1);
}
else
{
$setsqlarr['link_name']=trim($_POST['link_name'])?trim($_POST['link_name']):showmsg('您没有填写标题!',1);
$setsqlarr['link_url']=trim($_POST['link_url'])?trim($_POST['link_url']):showmsg('您没有填写链接地址!',1);
$setsqlarr['link_logo']=trim($_POST['link_logo']);
$setsqlarr['app_notes']=trim($_POST['app_notes']);
$setsqlarr['alias']=trim($_POST['alias']);
$setsqlarr['display']=2;
$setsqlarr['type_id']=2;
$link[0]['text'] = "返回网站首页";
$link[0]['href'] =$_CFG['site_dir'];
!inserttable(table('link'),$setsqlarr)?showmsg("添加失败!",0):showmsg("添加成功,请等待管理员审核!",2,$link);
}
}

2.程序首先检测网站是否开启自助申请链接,如果没有,将阻止用户申请。 紧接着网站将获取到链接名字、URL、logo、说明等赋值到setsqlarr数组,最后将数据插入到数据库中。 文件开始程序依然包含了公共文件/include/common.inc.php,程序内部使用了str_tags去除HTML和PHP标签,所以,凡是带有尖括号的一律会被过滤掉。

3. 后台/admin/admin_link.php负责管理申请的友情链接

if($act == 'list')
{
check_permissions($_SESSION['admin_purview'],"link_show");
require_once(QISHI_ROOT_PATH.'include/page.class.php');
$oederbysql=" order BY l.show_order DESC";
$key=isset($_GET['key'])?trim($_GET['key']):"";
$key_type=isset($_GET['key_type'])?intval($_GET['key_type']):"";
if ($key && $key_type>0)
{ if ($key_type===1)$wheresql=" WHERE l.link_name like '%{$key}%'";
elseif ($key_type===2)$wheresql=" WHERE l.link_url like '%{$key}%'";
}
else
{
!empty($_GET['alias'])? $wheresqlarr['l.alias']=trim($_GET['alias']):'';
!empty($_GET['type_id'])? $wheresqlarr['l.type_id']=intval($_GET['type_id']):'';
if (is_array($wheresqlarr)) $wheresql=wheresql($wheresqlarr);
}
$joinsql=" LEFT JOIN ".table('link_category')." AS c ON l.alias=c.c_alias ";
$total_sql="SELECT COUNT(*) AS num FROM ".table('link')." AS l ".$joinsql.$wheresql;
$page = new page(array('total'=>get_total($total_sql), 'perpage'=>$perpage));
$currenpage=$page->nowindex;
$offset=($currenpage-1)*$perpage;
$link = get_links($offset, $perpage,$joinsql.$wheresql.$oederbysql);
$smarty->assign('link',$link);
$smarty->assign('page',$page->show(3));
$smarty->assign('upfiles_dir',$upfiles_dir);
$smarty->assign('get_link_category',get_link_category());
$smarty->display('link/admin_link.htm');
}

4.程序首先检查管理员权限,然后获取前端页面传过来进行拼接SQL语句,最后进入到get_links函数内部进行数据库查询查询

function get_links($offset, $perpage, $get_sql= '')
{
global $db;
$row_arr = array();
$limit=" LIMIT ".$offset.','.$perpage;
$result = $db->query("SELECT l.*,c.categoryname FROM ".table('link')." AS l ".$get_sql.$limit);
while($row = $db->fetch_array($result))
{
$row_arr[] = $row;
}
return $row_arr;
}

5.查询完成以后将获得结果传入到/link/admin_link.htm文件中

<tr>
<td class="admin_list admin_list_first">
<input name="id[]" type="checkbox" value="{#$list.link_id#}" />
<a href="{#$list.link_url#}" target="_blank" {#if $list.display<>"1"#}style="color:#CCCCCC"{#/if#}>{#$list.link_name#}</a>
{#if $list.Notes<>""#}
<img src="data:images/comment_alert.gif" border="0" class="vtip" title="{#$list.Notes#}" />
{#/if#}
{#if $list.link_logo<>""#}
<span style="color:#FF6600" title="<img src={#$list.link_logo#} border=0/>" class="vtip">[logo]</span>
{#/if#}
{#if $list.display<>"1"#}
<span style="color: #999999">[不显示]</span>
{#/if#}
</td>

6.模板文件中显示logo直接使用数据库传入过来的link_logo参数,并将作为img图像 src的参数,并且src参数用户可控,所以构成存储型XSS。

漏洞利用

1.首先点击网站底部的申请友情连接



2.弹出的页面中,输入如下参数,然后点击提交



其中Logo地址处为真正的攻击payload,x为了使img图像报错,然后调用onerror参数弹出对话框。 3.登录后台,依次点击广告->友情链接,将鼠标移动到LOGO位置,页面立刻弹出对话框

74CMS 3.0 存储型XSS漏洞的更多相关文章

  1. 74CMS3.0储存型XSS漏洞代码审计

    发现一个总结了乌云以前代码审计案例的宝藏网站:https://php.mengsec.com/ 希望自己能成为那个认真复现和学习前辈们思路的那个人,然后准备慢慢开始审计一些新的小型cms了 骑士cms ...

  2. Java Web开发 - 持久型/存储型XSS漏洞

    Java Web开发 - 持久型/存储型XSS漏洞 1.什么是XSS漏洞攻击? XSS是跨站脚本攻击(Cross Site Scripting)的简称,之所以叫XSS而不是CSS相比大家都能明白了吧, ...

  3. 【代码审计】eduaskcms_v1.0.7前台存储型XSS漏洞分析

      0x00 环境准备 eduaskcms官网:https://www.eduaskcms.xin 网站源码版本:eduaskcms-1.0.7 程序源码下载:https://www.eduaskcm ...

  4. 【代码审计】iZhanCMS_v2.1 前台存储型XSS漏洞分析

      0x00 环境准备 iZhanCMS官网:http://www.izhancms.com 网站源码版本:爱站CMS(zend6.0) V2.1 程序源码下载:http://www.izhancms ...

  5. 【代码审计】大米CMS_V5.5.3 后台多处存储型XSS漏洞分析

      0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...

  6. Phpwind v9.0 存储型xss跨站漏洞

    漏洞版本: Phpwind v9.0 漏洞描述: Phpwind专注于中小网站应用的整合和价值的发掘,我们认为,以社区为网站的基础,可以提供丰富的应用,满足人们获取信息.交流.娱乐.消费等生活需求.获 ...

  7. 存储型XSS靶场作业

    首先进入靶场:http://59.63.200.79:8082/index.php xss平台使用:xss8c 发现CMS版本号,搜索是否此版本号存在可利用漏洞: 找到存储型xss漏洞,在xss平台生 ...

  8. DVWA之Stored XSS(存储型XSS)

    目录 Low Medium High Impossible Low 源代码: <?php if( isset( $_POST[ 'btnSign' ] ) ) { // Get input $m ...

  9. 【代码审计】QYKCMS_v4.3.2 前台存储型XSS跨站脚本漏洞分析

      0x00 环境准备 QYKCMS官网:http://www.qykcms.com/ 网站源码版本:QYKCMS_v4.3.2(企业站主题) 程序源码下载:http://bbs.qingyunke. ...

随机推荐

  1. 从服务间的一次调用分析整个springcloud的调用过程(一)

    首先我们知道springcloud是一个微服务框架,按照官方文档的说法,springcloud提供了一些开箱即用的功能: 1 分布式/版本化配置 2 服务的注册与发现 3 路由 4 服务到服务之间调用 ...

  2. 4、前端--浮动、定位、是否脱离文档流、溢出属性、z-index、透明度、JavaScript简介

    浮动 # ps:html代码时没有缩进一说的 全部写在一行也可以 """浮动主要就是用于页面布局的!!!""" # 浮动带来的负面影响 &q ...

  3. Solution -「CF 855G」Harry Vs Voldemort

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树和 \(q\) 次加边操作.求出每次操作后,满足 \(u,v,w\) 互不相等,路径 \((u,w ...

  4. Spring Bean配置加载为BeanDefinition全过程(注解配置)

    生产中有很多形式的的配置方式,本文仅分析注解配置.对于其他形式的配置区别主观以为主要在配置文件的解析过程不同,不一一分析了.本文以利用Dubbo框架开发rpc服务端为例详细阐述配置类的解析.数据保存. ...

  5. 使用动态时间规整 (DTW) 解决时间序列相似性度量及河流上下游污染浓度相似性识别分析

    时间序列相似性度量方法 时间序列相似性度量常用方法为欧氏距离ED(Euclidean distance)和动态时间规整DTW(Dynamic Time Warping).总体被分为两类: 锁步度量(l ...

  6. [LeetCode]771. 宝石与石头

    给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符都是字母 ...

  7. 渗透测试之本地文件包含(LFI)

    一.本地文件包含 本地文件包含漏洞指的是包含本地的php文件,而通过PHP文件包含漏洞入侵网站,可以浏览同服务器所有文件,并获得webshell. 看见?page=标志性注入点,提示我们输入?=pag ...

  8. RENIX操作之XML报文模板说明——网络测试仪实操

    我们在网络测试仪的日常使用过程中,经常涉及到编辑和修改报文.利用RENIX软件,可以把当前编辑好的报文模板导出为XML文件,下次使用时可以直接导入使用,从而提升测试工作效率.本文以"添加UD ...

  9. C# 开始支持动态化编程

    在.NET 4.0的运行时进行动态编程时,我们引入了一个新功能:动态语言运行时.可以这样理解,CLR的目的是为静态类型的编程语言提供一个统一的框架或编程模型,而DLR便是在.NET平台上为动态语言提供 ...

  10. 接口java.util.Map的四个实现类HashMap Hashtable LinkedHashMap TreeMap

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别 :java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMa ...