存档

文章标签 ‘ShellCode’

Exploit-Exercises Fusion Level00

2014年11月24日 没有评论

开始玩Exploit-Exercises的Fusion,这里面引入了一些保护机制的绕过,可以系统的做一下。Fusion Level00算是warmup,是一个简单的栈溢出场景,realpath函数的原型为char *realpath(const char *path, char *resolved_path),其将path中保存的路径字符串展开之后复制到resolved_path之中,这里由于resolved数组只有128个字节,而path有1000多个字节,因此这里会发生栈溢出。
Fusion[......]

继续阅读

[XDCTF]Shellcode DIY

2013年10月7日 4 条评论

国庆参加了XDCTF,被虐的相当惨,不过时间安排确实不怎么好,时间安排在前六天,先提交且通过的得分高,越往后交分数越低,偏偏还要搞在1号0:00开始,相当的操蛋的安排。另外就是这是组队赛,大家很难把假期全部贡献在比赛上,以至于很多题目都没时间做了。不过玩玩就好,参加一下总是涨了点知识,写点笔记。(这次比赛许多大牛都出来厮杀了,场面相当激烈)
溢出部分有一个编写Shellcode的题目,要求ShellCode运行后能够监听4444端口,并且能够执行从控制端传输过来的其他ShellCode。现成的当[......]

继续阅读

Linux使用ROP进行栈溢出攻击

2013年6月25日 6 条评论

通过Protostar stack6演示Linux下ROP的简单使用,ROP就是所谓的Return Orientated Programming,早期也叫ret2libc,关于ROP的介绍可以看早期的文章《CVE2012-1889 Exploit编写(三)》,思路是一样的,只是平台换到了Linux下而已。
0×01. __builtin_return_address函数
先介绍下__builtin_return_address这个函数,这个函数接收一个参数,可以是0,1,2等。__bu[......]

继续阅读

分类: CTF, Linux安全 标签: , , , ,

[译]各种IE版本下的堆喷射技术

2012年11月30日 3 条评论

最近我在学习为一些古老的漏洞编写exploit,以使得它们能够在Windows 7 + IE9下正常运行。之前在利用漏洞的时候我的PoC都一直是在Windows XP + IE6下测试的,仅仅是为了确定它们确实可以正常工作,而不用担心在以后的版本中的问题。在这篇文章中我仅仅是分享一些基本信息,这对第一次编写/理解exploit的人来说应该非常有帮助,同时尽可能使得这些信息简单易懂并且不考虑性能和精确性。在之前的exploit中,当在IE6下测试的时候我使用了如下的Heap Spray(堆喷射)代[......]

继续阅读

ShellCode常用的GetPC方法

2012年11月24日 1 条评论

GetPC,也即Get Program Counter,取得程序计数器的值,在x86下就是GetEIP了,其作用是在进程的内存空间中得到当前的EIP的值,通常用于需要对代码自身进行操作的场合下,比如自解码和自修改代码(更一般的来说常见于病毒、溢出攻击代码等,也称之为代码重定位技术)。因为在x86下无法直接操作EIP寄存器,所以需要一些特殊的方法来获取EIP寄存器的值。
1. CALL GetPC
最简单的GetPC方法是使用call指令,之前的文章有提到过(http://www.programl[......]

继续阅读

一个字节毁掉一段ShellCode

2012年11月20日 6 条评论

暂时告别了一段忙碌的生活,博客还是得打理一下……今天在测试一个FTP服务器程序时,发现仅仅一位一个特殊的字节而破坏了整段ShellCode,调了好久才找到原因,就想写篇博客记录下,顺便感慨下调试的不易。

场景:已经写好了一个Exploit针对此FTP服务器程序并成功绑定一个TCP Shell,现在需要替换为download_exec(下载并执行)ShellCode,于是使用Metasploit生成了一段download_exec的ShellCode,URL为http://localhost/test.exe,可是测试的时候被测程序总是悄然退出,用Ollydbg附加、在0x7FFA4512(jmp esp 是我用来做跳转的)处下硬件执行短点,再次出发溢出条件,发现ShellCode全然面目全非了:[......]

Win32 bind port shellcode(4444 tcp) 399 bytes

2012年10月27日 5 条评论

Win32 bind port shellcode(4444 tcp) 399 bytes,验证可用,执行后通过telnet到目标机器4444端口即可。以下代码请谨慎执行,测试完注意关闭端口!!!

另外,对于一些需要网络发送数据的场景,可能要求数据中不得函数NULL字符(0×00),下面的代码是NULL Free的,其中的代码重定位(GetPC)使用了浮点指令集:

00C67000 D9 EE fldz
00C67002 D9 74 24 F4 fnstenv [esp-0Ch]
00C67006 5B pop ebx
测试漏洞利用的时候,总是不成功,调试发现fldz/fnstenv指令会破坏栈顶数据,所以建议在ShellCode前填充适当的NOP指令。[......]

Conficker/Kido ShellCode

2012年9月14日 8 条评论

考虑到这个学期有门课有个缓冲区溢出的大实验,所以还是决定认认真真的翻一翻《0Day安全 软件漏洞分析技术》上面的相关章节,快速阅读前三章,基本是讲解基本栈溢出的利用以及ShellCode的编写,因为以前也简单的玩过,所以也没什么问题。结合前段时间从Conficker.B中提取出来的ShellCode,简单做点笔记。
Conficker.B内的ShellCode的基本特点是:
1. 代码混淆:开头的两条指令共用了一个字节,干扰反汇编指令
2. 代码重定位:call/pop获取当前某个字节的虚拟地址[......]

继续阅读

ShellCode测试代码

2011年7月5日 5 条评论

ShellCode弄好不知道有没有效?简单测一下吧(只能简单测试,不能保证成功利用漏洞,因为有些ShellCode加入被利用程序只会就会改变)
可以先把Shellcode的偏移地址存入EAX寄存器,这个通过lea指令实现,然后pop之后ret就OK了。(call eax也可以吧)

#include <stdio.h>
 
unsigned char shellcode[] = {
// Windows 2000, Windows 2003, W[......]

继续阅读

分类: 缓冲区溢出 标签: ,