提交代码过滤与服务器入侵

最近做了点木用的


ICE Bug 跳转后的页面
ICE Bug 跳转后的页面

做计算机导论的作业,要求在ice.buaa.edu.cn这个站点寻找Bug提交意见,于是研究了半天,从意见建议页面的提交框入手,先试着提交了一个HTML注释开头<!–,结果没有任何提交框过滤直接输出到HTML了,导致页面的后半部分全成了注释。但显然这还是不够的,于是提交了这么一个程序

ICE的代码提交框Bug

ICE的提交框Bug

很显然,只是一个很简单的页面跳转,跳转到了我在网站上放的小静态页(就是本文开头的那张图片)

这个网站是ASP写的,后来我又试着提交了ASP脚本,但没能成功在服务器运行,否则就是一个不小的Bug了

等到上课,评选10个优秀建议,结果选上了

最宽容奖

还好不是最黑客奖

 

后来,刷C语言的作业,发现了更严重的漏洞。我刷完作业闲来无事研究C语言的shell调用,随手提交了一个reboot上去。结果服务器真的重启了!


system("reboot");

原来提交的C代码没有禁止调用stdlib.h头文件,更没有过滤掉system函数,于是接下来的事情就很河蟹了

先试了试运行ls等简单的命令,确定是Linux服务器,然后用uname -a和lsb_release -a确定是Red Hat Enterprise Linux AS系统

#uname -a
Linux localhost.localdomain 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44 EST 2007 x86_64 x86_64 x86_64 GNU/Linux

#lsb_release -a
LSB Version:    :core-3.0-amd64:core-3.0-ia32:core-3.0-noarch:graphics-3.0-amd64:graphics-3.0-ia32:graphics-3.0-noarch
Distributor ID: RedHatEnterpriseAS
Description:    Red Hat Enterprise Linux AS release 4 (Nahant Update 6)
Release:        4
Codename:       NahantUpdate6

最不可思议的是,运行提交的程序竟然是用的root账户,于是果断开始做root才能做的事

由于是提交程序通过错误输出看运行结果,每次只能看到两行,而且运行命令也只能一次运行一行,由于我Linux经验非常不足,做了大量的无用功。起先尝试找网站的页面存放目录,结果找了半天没找到(后来发现网站的备份竟然有二三十份,难怪找不到),找Tomcat的安装目录也没找到,发现装了vsftp但更不好配置,没办法转向SSH。

RedHat是默认安装OpenSSH的,但没有开启,于是费了点事改配置文件(要现在本地用虚拟机配置好了再把配置文件用C程序一行行输出到目标文件啊),开启sshd,然后悲剧了

Disabling protocol version 2. Could not load host key

百度一下发现是没有生成密匙,需要运行ssh-keygen生成,结果卡在这了。

ssh-keygen的设置需要输入一个y加两个回车,可用system调用系统命令的方法没有办法实现(也许是我知道的太少了不会用),一直没成功

既然是密匙的问题,那装个不需要密匙的Telnet服务器呗,结果发现这个服务器根本没连外网,我也没法上传安装包,又失败了

俗话说得好,车道山前必有路,有路必有猛虎= =

不如自己写一个远程终端!

想法很好,但无奈我学C时间太短,刷题都经常CE,更别说写网络程序了。后来在百度上搜了半天终于找到一个别人练手用的C语言远程终端

稍做修改然后提交到网站上,我设置的是无参运行不开启服务,于是调用cp把程序本身copy到/etc下,然后带参数–shell运行,开始运行远程终端服务,这里用到了Linux Shell的一个技巧,使用 (命令 &) 可以新开一个shell在后台运行。而C语言作业的网站评测程序在结束进程上考虑并不周全,所以我可以在后台不限时运行服务器

# (/etc/malash_shell --shell &)

然后用telnet连接到服务器,成功!果断用ssh-keygen生成密匙,并用passwd改掉了root密码,启动ssh,连接,成功!

剩下的事嘛,就不用我再说了,有了root权限,就没有什么干不了的了

root登录SSH

有一句话说得好:永远不要相信客户端提交的数据会符合你的意愿

一条评论

回复 贾亦真 取消回复