74CMS 3.0 SQL注入漏洞前台

一、 启动环境

1.双击运行桌面phpstudy.exe软件
在这里插入图片描述
2.点击启动按钮,启动服务器环境

二、代码审计

1.双击启动桌面Seay源代码审计系统软件
在这里插入图片描述
2.因为74CMS3.0源代码编辑使用GBK编辑,所以首先需要先将编码改成GBK
在这里插入图片描述
3.点击新建项目按钮,弹出对画框中选择(C:\phpStudy\WWW\74cms),点击确定

漏洞分析

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

elseif ($act=='userprofile')
{
	$smarty->assign('user',$user);
	$smarty->assign('title','个人资料 - 会员中心 - '.$_CFG['site_name']);
	$smarty->assign('userprofile',get_userprofile($_SESSION['uid']));	
	$smarty->display('member_personal/personal_userprofile.htm');
}
elseif ($act=='userprofile_save')
{
	$setsqlarr['realname']=trim($_POST['realname'])?trim($_POST['realname']):showmsg('请填写真实姓名!',1);
	$setsqlarr['sex']=trim($_POST['sex']);
	$setsqlarr['birthday']=trim($_POST['birthday']);
	$setsqlarr['addresses']=trim($_POST['addresses'])?trim($_POST['addresses']):showmsg('请填写通讯地址',1);
	$setsqlarr['mobile']=trim($_POST['mobile']);
	$setsqlarr['phone']=trim($_POST['phone']);
	$setsqlarr['qq']=trim($_POST['qq']);
	$setsqlarr['msn']=trim($_POST['msn']);
	$setsqlarr['profile']=trim($_POST['profile']);
	if (get_userprofile($_SESSION['uid']))
	{
	$wheresql=" uid='".intval($_SESSION['uid'])."'";
	!updatetable(table('members_info'),$setsqlarr,$wheresql)?showmsg("修改失败!",0):showmsg("修改成功!",2);
	}
	else
	{
	$setsqlarr['uid']=intval($_SESSION['uid']);
	!inserttable(table('members_info'),$setsqlarr)?showmsg("修改失败!",0):showmsg("修改成功!",2);
	}
}

2.当传入的参数act==’userprofile_save’,然后将POST接收到数据进行更新或者插入,在被代码块中除了头部整体使用过addslashes函数以外,并没有其他的过滤。 6.其中get_userprofile()函数会根据用户的UID进入数据库中进行查询,如果返回数据则进行更新数据,如果没有返回数据,则进行插入数据。 7.假设用户已经填写过个人资料,更新资料会进入updatetable函数,函数在/include/common.fun.php

function updatetable($tablename, $setsqlarr, $wheresqlarr, $silent=0) {
	global $db;
	$setsql = $comma = '';
	foreach ($setsqlarr as $set_key => $set_value) {
		if(is_array($set_value)) {
			$setsql .= $comma.'`'.$set_key.'`'.'='.$set_value[0];
		} else {
			$setsql .= $comma.'`'.$set_key.'`'.'=\''.$set_value.'\'';
		}
		$comma = ', ';
	}
	$where = $comma = '';
	if(empty($wheresqlarr)) {
		$where = '1';
	} elseif(is_array($wheresqlarr)) {
		foreach ($wheresqlarr as $key => $value) {
			$where .= $comma.'`'.$key.'`'.'=\''.$value.'\'';
			$comma = ' AND ';
		}
	} else {
		$where = $wheresqlarr;
	}
	return $db->query("UPDATE ".($tablename)." SET ".$setsql." WHERE ".$where, $silent?"SILENT":"");
}

函数中间并没有进行过滤,直接进行遍历传输过来的数组,然后拼接成插入语句进行数据查询。 8.所以,可以在插入数据的时候插入SQL语句,获取管理员Hash。

漏洞利用

1.双击桌面BurpSuite软件,自定义设置浏览器能让BurpSuite软件拦截
2.登录用户,点击“账户管理”—>“个人资料”,输入攻击payload,msn字段主要闭合前边语句,个人简介字段真正的攻击SQL语句
在这里插入图片描述
点击保存
在这里插入图片描述

在这里插入图片描述

需要将msn字段中编码的数据恢复回来 然后点击forwad
在这里插入图片描述
再次查看个人资料,发现已经攻击成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值