首页
论坛
课程
招聘
看雪论坛辞旧迎新Exploit Me挑战赛_挑战赛发榜
2008-1-19 00:16 77155

看雪论坛辞旧迎新Exploit Me挑战赛_挑战赛发榜

2008-1-19 00:16
77155
To be the apostrophe which changed "Impossible" into "I'm possible"!

公司事情太多,发榜的时间稍微晚了几天,大家见谅。

这次挑战赛提交贴共57个

其中3人两道题一起提交:黑色猎鹰,GYGY,netwind
一个测试帖,看雪发
一个超时贴,最后一个
一个水贴!
一个弃权帖。

A题有效提交共32个
B题有效提交共24个

A题是我在《0day安全:软件漏洞分析技术》中为了介绍Metasploit编程而设计的一个很简单的例子。这种漏洞代表了一大类漏洞利用场景:服务器漏洞。

IIS解析HTTP请求的时候,RPC服务的函数参数,FTP服务器解析畸形命令时都有可能发生这类漏洞。应该说服务器类漏洞的影响最严重,能够引起主动入侵。

在出题的时候,和看雪反复商量过关于难度的问题,最后我们把挑战赛定位在让初学者体会漏洞分析的层次上,希望有更多的朋友在读过教程后,能自己动手独立完成一次POC的构造。开始的时候曾经想过加点简单的协议进去,让大家fuzz一下,增加点漏洞定位的难度,后来干脆把A题当作热身的送分题目了。

A的源代码如下:

/*****************************************************************************
      To be the apostrophe which changed "Impossible" into "I'm possible"!
               
POC code of chapter 10.6 in book "Vulnerability Exploit and Analysis Technique"

file name        : target_server.cpp
author                : failwest  
date                : 2007.4.4
description        : TCP server which got a stack overflow bug for exploit practice
Noticed                : Complied with VC 6.0 and build into release version are recommend
version                : 1.0
E-mail                : failwest@gmail.com
               
        Only for educational purposes    enjoy the fun from exploiting :)
******************************************************************************/
#include<iostream.h>
#include<winsock2.h>
#pragma comment(lib, "ws2_32.lib")
void msg_display(char * buf)
{
        char msg[200];
        strcpy(msg,buf);// overflow here, copy 0x200 to 200
        cout<<"********************"<<endl;
        cout<<"received:"<<endl;
        cout<<msg<<endl;
}
void main()
{
        int sock,msgsock,lenth,receive_len;
        struct sockaddr_in sock_server,sock_client;
        char buf[0x200]; //noticed it is 0x200
       
        WSADATA wsa;
        WSAStartup(MAKEWORD(1,1),&wsa);
        if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
        {
                cout<<sock<<"socket creating error!"<<endl;
                exit(1);
        }
        sock_server.sin_family=AF_INET;
        sock_server.sin_port=htons(7777);
        sock_server.sin_addr.s_addr=htonl(INADDR_ANY);
        if(bind(sock,(struct sockaddr*)&sock_server,sizeof(sock_server)))
        {
                cout<<"binding stream socket error!"<<endl;
        }
        cout<<"**************************************"<<endl;
        cout<<"     exploit target server 1.0           "<<endl;
        cout<<"**************************************"<<endl;
        listen(sock,4);
        lenth=sizeof(struct sockaddr);
        do{
                msgsock=accept(sock,(struct sockaddr*)&sock_client,(int*)&lenth);
                if(msgsock==-1)
                {
                        cout<<"accept error!"<<endl;
                        break;
                }
                else
                        do
                        {
                                memset(buf,0,sizeof(buf));
                                if((receive_len=recv(msgsock,buf,sizeof(buf),0))<0)
                                {
                                        cout<<"reading stream message erro!"<<endl;
                                        receive_len=0;
                                }
                                msg_display(buf);//trigged the overflow
                        }while(receive_len);
                        closesocket(msgsock);
        }while(1);
        WSACleanup();
}

实在太简单了,不用多说。开了200字节,使用了0x200字节是问题的根源。最快的提交是在题目公布后40分钟左右交上来的。

好几个朋友用了python脚本,大多数用了C语言写了个简单的soket发送程序。没有见到写成MSF模块的。

比赛主要评判的标准是分析报告。A题首先要把缓冲区大小是多少说清楚吧。

稳定性来源于两个方面,定位shellcode和shellcode本身

大多数朋友使用了我给出的那段动态定位API的shellcode,把显示的名字改了一下
也有朋友使用Metasploit生成shellcode

不管怎样,shellcode都是比较稳定的。所以在我的环境下没有通过的exploit大多数是因为跳板地址选的不够通用。

跳板地址需要根据具体情况来定。针对这个A题,即便不用跳板,其实也应该是比较稳定的。

如果选的话,A又没有版本之分,如果能在A自身代码区找个跳板出来,当然万无一失了。

在往后就是用比较通用的4G进程空间里的其他跳板。我要说user32.dll,kernel32.dll,ntdll都不是好的选择。《网络渗透技术》中曾经提到过跳板选择标准,语言区的往往比较稳定。在提交答卷中,有一些跳板选的就很好。

考虑到大家在自己机器上调通就应该给予肯定,所以运行截图的分数被我调高了,虚拟机验证部分存在一定偶然性,我降低了一些分值。

B题是shineast同学自己挖出来的一个0day,哪个0day大家应该已经知道了。比赛前我和看雪已经正式通知了该公司。

我们在PE里做了一些修改,但是忘了CLSID这回事,不少朋友在研究的过程中已经发现了网上的exploit。

我们并不排斥参考网上exploit的朋友,因为想到搜索一下本身就值得加分,Google hacking现在不是很火么:)但我们主要看得是分析报告,是思路。而且这个ActiveX中不止一个溢出漏洞,网上给出的只是其中一个的利用。

shineast在《黑客防线》上曾经写过这个0day的分析,但是那篇文章是在网上搜不到的(至少我们没有搜到)。如果你恰巧买了那期杂志,而且精读过练习过,那可就占了点便宜,好像考试的时候最后一道大题恰巧在某本习题集上被撞到一样。

这个因素我们也考虑过。我认为如果你真的很关注这些东西,那么这便宜也是你应得的。

当然如果您是完全凭自己独立完成的B题,也不要委屈。因为你刚刚独立的挖掘出了属于自己的0day!这种喜悦和自豪感才是这个比赛给您的最好的奖品。

虽然我的教程里没有讲到HeapSpray,但是B题里边普遍采用了这种方法,看来大家对浏览器漏洞利用并不陌生。

HeapSpray在《0day安全》中有比较详细的介绍。2007的black hat 阿姆斯特丹上,一个叫亚历山大的逆向工程师提出了一种叫“heap 风水”的技术,在heapspray的基础上又做了很多深入研究。由于feedback和火,他在几个月后的LV black hat上再次被邀请演讲,当时我和两个趋势的研究员慕名去听,窃窃的发现这个老外和好莱坞一个明星暴像,而且竟然赫然的用中文汉字标注着“风水”两个字,不过是繁体:)。听完之后觉得风水这个词来形容这种技术真的很贴切。

稍后我会把那次演讲的white paper和Slides发上来,看哪位朋友给大家做点贡献翻一下,大家一起学习,一起进步。

也有不少朋友使用了传统栈溢出的方法。相信大家发现shellcode要滤掉一些字节才能完整的塞进去,需要对shellcode变形。想到什么了,给shellcode加壳与脱壳?呵呵,我说的吧,crack和hack的技术本是一家啊。

详细的评分见附件,如有异议请在一周内发信给我们。另外注明exploit验证部分存在一定随机因素,恕不复查。

谢谢大家的积极参与,相信所有提交的朋友都获得了一些东西,不管是鼠标还是挖出0day的自豪,这是我们组织这个比赛的初衷。

最后顺便提一下,我的书名做了一些调整,新名字叫《0day安全:软件漏洞分析技术》,电子工业出版社,出版日期看来得稍微推后几天了,要等到2月底3月初的样子才能出来,谢谢那些写信给我的朋友对这本书的关注,谢谢。

获奖名单

一等奖(1名)
nop

二等奖(2名)
somuch
toplcj


三等奖(5名)
hahar
pcasa
xfmaple
netwind
xPLK


[招聘] 欢迎你加入看雪团队!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (58)
雪    币: 5535
活跃值: 活跃值 (26)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
forgot 活跃值 26 2008-1-19 01:01
2
0
很好很黄很强大很和谐很暴力
雪    币: 218
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
htsf110 活跃值 2008-1-19 01:28
3
0
夜猫,顶顶顶顶顶顶顶顶顶顶顶
书什么时候出????
雪    币: 210
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
黑色猎鹰 活跃值 2008-1-19 03:06
4
0
做第一排学习!!!
雪    币: 215
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
frip 活跃值 2008-1-19 08:48
5
0
期待楼主的书
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iupek 活跃值 2008-1-19 09:26
6
0
牛人们太强了
继续努力
好好学习,天天向上
雪    币: 3145
活跃值: 活跃值 (2435)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2008-1-19 09:48
7
0
奖项设置

一等奖(1名)
微软(Microsoft)光学银光鲨IE3.0复刻版 1只 (http://www.360buy.com/wareshow.asp?wid=108912)
2008看雪新书:《加密与解密》第三版 1本
2008看雪新书:《0day安全:软件漏洞分析技术》 1本


二等奖(2名)
朗科(Netac)U200超高速闪存盘1G 1只(http://www.360buy.com/wareshow.asp?wid=118206)
2008看雪新书 :《加密与解密》第三版 1本
2008看雪新书:《0day安全:软件漏洞分析技术》 1本


三等奖(5名)
2008看雪新书:《加密与解密》第三版 或 《0day安全:软件漏洞分析技术》任选一本。

  
同时,一、二、三等奖将获得论坛勋章一枚。

看雪软件安全论坛
2008.1.19
雪    币: 621
活跃值: 活跃值 (47)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
elance 活跃值 6 2008-1-19 10:54
8
0
强大啊,膜拜。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qandzjl 活跃值 2008-1-19 11:43
9
0
出了书就拿下,多钱都买
雪    币: 820
活跃值: 活跃值 (111)
能力值: (RANK:500 )
在线值:
发帖
回帖
粉丝
humourkyo 活跃值 12 2008-1-19 12:00
10
0
奇怪  我 96分怎么算成76分   
抗议啊

另外我 SHELLCODE也是原创的    函数是 HASH查找法 字节数限制的那么少  竟然A  B都是0分  郁闷 !!!
雪    币: 3145
活跃值: 活跃值 (2435)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2008-1-19 12:03
11
0
还有机会,你和failwest联系一下。

雪    币: 820
活跃值: 活跃值 (111)
能力值: (RANK:500 )
在线值:
发帖
回帖
粉丝
humourkyo 活跃值 12 2008-1-19 12:10
12
0
评分 也就不说了
两个WORD文档  A  :31分   B:  65分   到了  XLS里面就变成了 31+45  郁闷!
雪    币: 1963
活跃值: 活跃值 (79)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
failwest 活跃值 8 2008-1-19 12:59
13
0
恩,刚查了一下,是我们抄错了,你的shellcode我们会重新考虑下的。

另外提交答案比较多,但不口否认还是存在一定的主观成分的,我们只能尽量做到用统一标准和尺度来判定,请大家见谅

还有哪位朋友对分数有异议,请尽快联系我们更正,正式的英雄榜将会在稍后发出
雪    币: 1963
活跃值: 活跃值 (79)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
failwest 活跃值 8 2008-1-19 13:16
14
0
处理如下:

我们向XLS腾抄的时候出现了笔误,分数以评分细则中计算出来为准,最终得分为96分

shellcode原创问题,我们重新查了A题和B题的报告,由于你在shellcode描述部分没有注明出shellcode的出处(答题卷中已经提示应注明),只是给出了16进制的代码,关键部分的实现没有提到,只有简略的功能描述,所以从判卷角度,我们无法判断是否原创或引用,固维持原判。

从技术和能力方面,我们绝对承认你的实力。但是作为比赛,我们需要有一个统一的衡量标准。题目做的漂亮但是由于分析写的太简略,得分受到影响的其实还有几位朋友,当时我们也是讨论过一下的,比如forgot同学提交的卷子基本上是白卷,但是问题解决的很好,而且比赛结束后发的分析也很精彩。

当然,这个比赛是让大家体会exploit技术的学习知识的,也不用太在意那只鼠标啦,所有提交了的朋友都应该获得了很多东西的
雪    币: 820
活跃值: 活跃值 (111)
能力值: (RANK:500 )
在线值:
发帖
回帖
粉丝
humourkyo 活跃值 12 2008-1-19 13:33
15
0
我只是写了出处是自己以前写的
好像没有提出要求给出相应的汇编代码,因此没有附上。

呵呵,只不过想 要本 加密解密3  :)
雪    币: 267
活跃值: 活跃值 (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liangyu 活跃值 2008-1-19 14:01
16
0
有奖竞猜,failwest说的那个高手“nop”是谁?
1.lion
2.void

猜中者获得0day一个,哈哈
雪    币: 820
活跃值: 活跃值 (111)
能力值: (RANK:500 )
在线值:
发帖
回帖
粉丝
humourkyo 活跃值 12 2008-1-19 14:29
17
0
我还以为是swan呢 可能swan不屑于参加这个吧
雪    币: 108
活跃值: 活跃值 (86)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
combojiang 活跃值 26 2008-1-19 15:16
18
0
呵呵,如果使用vc6 debug的话,代码应该是这样的。其中,ebp占了4个字节。再加上buff的196字节,正好是200字节。

#include "iostream.h"
#include "process.h"
#include "windows.h"
#include "Winsock2.h"
#pragma comment(lib,"Ws2_32.lib")

void pharseRecv(char * szRecv)
{
        char buff[196];
        strcpy(buff,szRecv);
        cout<<"********************"<<endl;
        cout<<"received:"<<endl;
        cout<<buff<<endl;
}
void main(int argc, char* argv[],char *envp[ ])
{
        WSADATA WSAData;
        int nRecv;
        char buffer[512];
        WSAStartup(0x0101,&WSAData);

        SOCKET        sockServer = socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
        if(sockServer == INVALID_SOCKET)
        {
            cout<<"socket creating error!"<<endl;
                exit(1);       
        }
       
        sockaddr_in addrName;
        addrName.sin_family = AF_INET;
        addrName.sin_port = ntohs(0x1E61);
        addrName.sin_addr.S_un.S_addr = htonl(0);
        if(bind(sockServer,(SOCKADDR * )&addrName,sizeof(addrName)))
        {
                cout<<"binding stream socket error!"<<endl;
        }
       
        cout<<"**************************************"<<endl;
        cout<<"     exploit target server 1.0\t   "<<endl;
        cout<<"**************************************"<<endl;
        listen(sockServer,4);

    sockaddr_in addrSock;
        int addrLen = sizeof(addrName);
        SOCKET sockC = accept(sockServer,(SOCKADDR *)&addrSock,&addrLen);
        if(sockC == INVALID_SOCKET)
        {
                goto QUIT;
        }

        do
        {
GOON:
                RtlZeroMemory(buffer,sizeof(buffer));
                nRecv = recv(sockC,buffer,512,0);
                if(nRecv < 0)
                {
                        cout<<"reading stream message erro!"<<endl;
                }
                pharseRecv(buffer);
        }while(nRecv != 0);

        closesocket(sockC);
        sockC = accept(sockServer,(SOCKADDR *)&addrSock,&addrLen);
        if(sockC != INVALID_SOCKET)
                goto GOON;
       
QUIT:
        cout<<"accept error!"<<endl;
        WSACleanup();
        return;
}
雪    币: 0
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
fqucuo 活跃值 4 2008-1-19 15:39
19
0
呵呵,公布了啊

引用
    当然,这个比赛是让大家体会exploit技术的学习知识的,也不用太在意那只鼠标啦,所有提交了的朋友都应该获得了很多东西的

首先感谢failwest Sir精彩的入门教程和举办的这次比赛,个人是感觉受益匪浅,学到了很多新知识,尤其是在B题中,让我了解到很多新的技术。

评分问题:其实这个问题轮不到我来说,只是在名次上看来humourkyo和本人有所冲突,所以就啰嗦两句,个人对比赛名次的好坏从不关心,因为如上所说,我觉得我已经收获了比名次更重要的东西——知识,同时也希望看雪官方能够实事求是打分。

还是我赛前的那句话:友谊第一,技术第二,比赛第三

有奖竞猜,failwest说的那个高手“nop”是谁?
我猜是1.lion (纯属瞎猜,因为两位我一个都没听过。。。二位大哥(大姐)别扔鸡蛋啊)
说不定混本0Day呢。(*^__^*) 嘻嘻……
雪    币: 324
活跃值: 活跃值 (17)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
likunkun 活跃值 1 2008-1-19 16:06
20
0
试题评价A中:"代码在我这边没build过,没有附带可运行文件用于验证"。这一句感觉不怎么舒服,有点说不过去(一点小小的异议)^_^
雪    币: 210
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
黑色猎鹰 活跃值 2008-1-19 18:26
21
0
肯定是lion啊~~~~~
雪    币: 1963
活跃值: 活跃值 (79)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
failwest 活跃值 8 2008-1-19 18:36
22
0
给个链接作为竞猜的参考 http://www.xsec.org/
雪    币: 3474
活跃值: 活跃值 (27)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
vessial(xee) 活跃值 10 2008-1-19 18:55
23
0
无缘解密3啊,可惜
雪    币: 1045
活跃值: 活跃值 (444)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
netwind 活跃值 13 2008-1-19 19:02
24
0
不用猜了,void  牛
lion不知道有没在论坛
雪    币: 91
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
pcasa 活跃值 2 2008-1-19 19:12
25
0
问一下评委:我的A题程序有没有崩溃?另外,服务程序和攻击程序在同一台机器,声音是从音箱中发出的嘟声而不是PC的喇叭。

最后想问一句:
2008看雪新书:《加密与解密》第三版 和 《0day安全:软件漏洞分析技术》
哪本书贵?
游客
登录 | 注册 方可回帖
返回