最近做了点木用的
做计算机导论的作业,要求在ice.buaa.edu.cn这个站点寻找Bug提交意见,于是研究了半天,从意见建议页面的提交框入手,先试着提交了一个HTML注释开头<!–,结果没有任何提交框过滤直接输出到HTML了,导致页面的后半部分全成了注释。但显然这还是不够的,于是提交了这么一个程序
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权限,就没有什么干不了的了
有一句话说得好:永远不要相信客户端提交的数据会符合你的意愿
原来这就是你跟我说的传奇经历啊。。。。太牛逼了。。。。大神之路也不是那么容易的啊。。。
原来是我航的大牛,膜拜
你的Ipv6地址暴露了你我同是仰望星空大学的哈
好博客