PHP漏洞挖掘-SQL注入漏洞(二)
适合读者:入侵爱好者前置知识:PHP、Linux
PHP漏洞挖掘之旅——
(二)SQL注入漏洞
文/图 cnbird[H.U.C]河北泊头杨宁
大家好,我是cnbird,很高兴又可以在挖掘PHP漏洞系列中和大家见面,不知看了前两期以后感觉如何啊?是不是已经挖掘到了属于自己的PHP漏洞呢?如果发现了什么好漏洞,记得告诉我一声哦,让我也能分享大家的快乐。
废话不多说,下面开始我们的挖掘之旅,继续讲
解PHP漏洞系列中最重要的部分——SQL注入。上期
我们讲的是普通变量没有过滤的,本次我们将提高一个层次,重点说说$_SERVER变量的注入。
前期基础知识
在介绍$_SERVER注入之前,我们还要重复的唠叨一下GPC的设置问题,因为这是SQL注入的关键所
在。magic_quotes_gpc选项是PHP中的一个重要安全设置,当该选项为ON,也就是打开的时候,所有从Get、Post、Cookie传递过来的数据中的“'”“、"”“、\”,以及NULL等元字符都会被自动的加上“\”实现转义。这个选项使得SQL注入、插入代码以及XSS中引入字符串或者改变程序流程变得困难。但是在PHP5中,一些特殊变量的存在使得在某些情况下,还是会被恶意用户引入元字符到数据库以及程序中。
PHP中的变量除了来源于$_GET、$_POST、$_Cookie的提交之外,还来源于$_SERVER、$_ENV、$_SESSION等,其中$_ENV和$_SESSION我们不能很方便地控制和自由提交,所以只剩下一个$_SERVER变量了。而$_SERVER变量包括的内容除了来自服务器本身外,还有很大一部分来源于用户提交的HTTP请求,比如下面的代码。
如上的变量在PHP5.0以下是受magic_quotes_gpc选项影响的,当magic_quotes_gpc选项为ON时,该数组中的元字符等内容就会做转义处理;为OFF时,用户的提交就会不做任何处理,直接送到数组中。现在的大部分稍安全一点的程序都已经注意到$_GET、$_POST以及$_Cookie的危险性。以下的内容摘自Discuz!的变量初始化时的代码。
很好,已经注意到来自$_GET、$_POST、$_FILES以及$_Cookie的变量的安全性,但是$_SERVER变量呢?尽管在magic_quotes_gpc为ON的情况下,这些变量可能受到保护。但是很明显,忽视$_SERVER的结果就是安全隐患的增加,你就可以去寻找程序取得$_SERVER的地方,很可能就是脆弱点了!
所以,我们要注意任何的从客户端输入的变量,
因为所有的输入都是有害的。
PH
PBB这方面做得很好,
如图1所示,
在PHPBB的common.php中的第100~161
行,把所有的输入,不管是$_GET、$_POST、$_SERVER等变量都做了过滤处理。
现在,防止SQL注入,大家普遍使用的方式是用
addslashes()函数和intval()函数,下面我就简单介绍一下这两个函数。
addslashes()的函数原形是string addslashes(stringstr),返回字符串,该字符串为了数据库查询语句等的需要,而在某些字符前加上了反斜杠。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL字符)。
一个使用addslashes()的例子是当你要往数据库中输入数据时。例如,将名字O'reilly插入到数据库中,这就需要对其进行转义。大多数据库使用“\”作为转义符:O\'reilly,这样就可以将数据放入数据库中,而不会插入额外的“\”。当PHP指令magic_quotes_sybase被设置成ON时,意味着插入“'” 时将使用“'\”进行转义。
默认情况下,PHP 指令magic_quotes_gpc为ON,它主要是对所有的Get、Post和Cookie数据自动运行addslashes()。不要对已经被magic_quotes_gpc转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时,我们可以使用函数get_magic_quotes_gpc()进行检测。
intval()的函数原形为int intval(mixed var, int[base]);,可将变量转成整数类型。可省略的参数base是转换的基底,默认值为10。转换的变量var可以为数组或类之外的任何类型的变量。
以上就是我们详细记录的基础知识了,下面我们结合一个漏洞程序来详细地讲解$_SERVER[]注入漏洞。
图1
详细分析$_SERVER注入
今天的程序主角是MyBulletinBoard,也就是MyBB,一套基于PHP+MySQL搭建的功能强大高效的开源论
坛系统。在国外使用的比较多,在Google搜索大概有150多万个网站采用这套程序。如图2所示是其界面,
很简洁,但是功能非常全面。
图2
下面我们就来具体分析一下MyBB的漏洞。按照以前我们在Linux下挖掘PHP漏洞的步骤,先下载源代码并安装好,之后输入“grep –n –r ‘\$_POST’ *”,如图3所示。结果很多,仔细看了一下,发现有几个提交的变量,如fid、tid、pid、uid、eid。用“grep -n -r '\$_POST' * | grep pid”查找了几个,没有发现明显的漏洞;再看一下$_GET和$_COOKIE等变量,
也没有明
显的漏洞。
忽然眼睛一亮,
在MyBB主目录下的inc/functions.php的1219处出现了传说中的HTTP_X_FORWARDED_FOR,
如图4所示,
这里或许我们可以进行注
入的。
图3
图4
尽管在magic_quotes_gpc为ON的情况下,这些变量可能受到保护,但是很明显,忽视$_SERVER的结果
就是安全隐患的增加,就可以去寻找程序取得$_SE
RVER的地方,很可能就是脆弱点了!由于很多程序本身就疏于对$_SERVER变量的防范,所以我们只要绕过PHP本身对“'”的转义就可以了。在PHP4中,如果magic_quotes_gpc为OFF的话就不用管了,但是如果magic_quotes_gpc为ON的话,我们几乎就无法再操作下去了!但这种情况在PHP5中获得了彻底的改观,在测试中我发现,PHP5中无论magic_quotes_gpc是ON还是OFF,对$_SERVER变量都不会做转义处理的。这意味着我们可以很轻松地带进程序“'”“、"”和NULL字
符,这对于那些变量过滤不严格的程序来说是致命的!
我们继续分析代码,用vi打开inc/functions.php文
件,
输入Esc,
然后点1219就来到了第1219行,
其主要
作用是得到客户的IP地址。
继续往下看,
到了1292行,
我们找到了一个getip()函数,
如下所示。
在Fedora的命令中输入“grep –n
–r
‘getip’
*”
,我们看看都什么地方用到了这个函数。结果如图5所示。
图5
我们一个一个地看,结果在inc/class_session.php文件中发现了问题,存在问题的代码如下。
大家仔细看最后一句代码“$query = $db->query("SELECT sid,uid FROM ".TABLE_PREFIX."sessions
WHERE sid='".$this->sid."' AND ip='".$this->ipaddress."'");”,这里把我们从客户端得到的IP地址未经过任何过滤(其实人家做了检测了,只不过检测的是IP地址是否合法而已,与没过滤一个样)就带入MySQL查询了!呵呵,比普通注入更高级的注入漏洞就这样出现了。我们接下来要做的事,就是上传类似如下的代码。
上面的POST代码是该漏洞利用程序的一部分,
已由rgod在上公布出来了。我们利用代码下载后实际测试一下漏洞,看看效果如何。
实践漏洞测试
我们把利用代码保存在Fedora机器上,如图6所示,然后我们找一个目标,Google一下后找到了一个地址http://121.16.39.90。
利用rgod的利用程序,
我
们输入
“php mybb.php 121.16.39.90 /mybb/ -
相关推荐:
- [实用文档]李践-有效提升销售的12大黄金法则8-大
- [实用文档]党支部换届工作方案
- [实用文档]2013年下期电子商务专业部宣传工作计划
- [实用文档]方庄一矿通风、钻探绩效工资考核管理办
- [实用文档]项目一 认识企业物流认识企业物流
- [实用文档]MBI_Display_产品蓝图规画
- [实用文档]北京市建筑业劳务作业人员普法维权培训
- [实用文档]锅炉燃烧调整与运行优化
- [实用文档]4支付结算业务的核算
- [实用文档]米什金_货币金融学_第9版各章学习指导
- [实用文档]水泥混凝土路面硬化工程施工组织设计
- [实用文档]钢筋工程安全技术交底书
- [实用文档]关于公布华中师范大学本科毕业论文
- [实用文档]太原市园林绿化施工合同范本 2
- [实用文档]周日辅导 初中英语分类复习单项选择题(
- [实用文档]第四章 文化经纪人的管理形式 第二节
- [实用文档]学宪法讲宪法竞赛题库
- [实用文档]《数值计算方法》期末考试模拟试题二
- [实用文档]爱词霸学英语:每日一句( 十月)
- [实用文档]2014年国家公务员面试:无领导小组讨论
- 新课程主要理念和教学案例分析汇编(24
- 英国人的快乐源于幸福的家庭生活
- 七年级上册第一次月考模拟数学试卷
- 真丝及仿真丝的种类有哪些?
- 【最新】华师大版八年级数学下册第十六
- 高中英语3500个必背单词
- 我可以接受失败,但我不能接受放弃!
- 最近更新沪科版八年级物理上册期末试卷
- 绿化工作先进乡镇事迹材料
- 鲁教版九年级上册思想品德教学计划
- 英语音标的分类
- 地下室底板无梁楼盖与普通梁板结构形式
- 美容师黄金销售话术
- 雅思写作满分作文备考方法
- 血清甲状腺激素测定与高频彩色多普勒超
- 1度浅析装修对室内空气品质的影响
- 2017-2022年中国汞矿行业深度分析与投
- 计算机二级VB公共基础知识
- (何勇)秸秆禁烧_重在寻找出路
- 内外墙抹灰工程分包施工合同1




