Vincent.Q 2012-01-16 22:53
强大,我正找这个类似的东东
南柯之石 2011-10-25 14:18
@海三十
不是一类问题,Background要求值是一个Brush,而你放的Image本来就不是Brush的一种,当然会出错。也应该出错。你这里应该用ImageBrush。
海三十 2011-10-24 14:29
木-叶,你试过background属性的设置没?
<Style x:Key="backgroundStyle0" TargetType="{x:Type Window}">
<Setter Property="Background">
<Setter.Value>
<Image Source="btu.jpg" />
</Setter.Value>
</Setter>
</Style>
这个为什么我在NET4.0还是出错呢?错误如你的文章中的提示, 1“System.Windows.Controls.Image”不是 Setter 上“System.Windows.Controls.Panel.Background”属性的有效值。
lixiong 2011-09-25 21:15
[quote]南柯之石:
@lixiong
注入空间倒不是问题,只是aslr比较棘手,期待你的迷底。:-)[/quote]
如果注入空间不是问题的话,就自己写一个CreateProcess好了~~
南柯之石 2011-09-25 17:04
@gbb21
嗯,开源的东西不给力啊。
gbb21 2011-09-25 14:00
windows 下面GCC无论是编译效率,还是编译出来的可执行文件的大小和执行效率都比VC差很多唉~
gbb21 2011-09-25 13:58
抛开DEP不说,只要你用VS 编译出来的程序, 即使DEP关闭,你也无法缓冲区攻击,因为他还有堆栈cookie保护~
ZKey 2011-09-25 12:58
[quote]南柯之石:
@ZKey
[quote]ZKey:
@南柯之石
内存区域存在READ WRITE EXEC权限的
栈只有RW 所以你的方法是通过溢出更改ret的返回值 来达到跳转到任意代码位置,这样没有问题。但是你跳转来回,并没有添加新的代码,(如果你坚信栈是可以执行的,那我无能为力)所以只是程序本身内跳转。并且你能操作的只有栈,如果ret返回栈来执行,由于没有exec权限,会有c0000005异常的。不知道你现在明白没有
类似执行WinExec这样的函数
方法是一样的,将本来的ret地址换成WinExec地址,栈中这样
lpCmdLine
uCmdShow
WinExec
不过字符串定位是...[/quote]
那就华丽丽的换掉把你带坏的编译器#109
南柯之石 2011-09-25 12:04
@ZKey
嗯,的确“Windows真是好欺负”这句是夸张了。
南柯之石 2011-09-25 12:01
@ZKey
[quote]ZKey:
@南柯之石
内存区域存在READ WRITE EXEC权限的
栈只有RW 所以你的方法是通过溢出更改ret的返回值 来达到跳转到任意代码位置,这样没有问题。但是你跳转来回,并没有添加新的代码,(如果你坚信栈是可以执行的,那我无能为力)所以只是程序本身内跳转。并且你能操作的只有栈,如果ret返回栈来执行,由于没有exec权限,会有c0000005异常的。不知道你现在明白没有
类似执行WinExec这样的函数
方法是一样的,将本来的ret地址换成WinExec地址,栈中这样
lpCmdLine
uCmdShow
WinExec
不过字符串定位是个问题,可以压入,却难定位,如果程序中...[/quote]
movl $0xdeadbeef, %eax
jmp 0x1724e8
这就是我注入的新代码呀……
栈能不能执行,也是要看DEP有没有开启。就像上面 ototsuyume 说的,GCC默认没有PE头中的IMAGE_DLLCHARACTERISTICS_NX_COMPAT标识,也就是说由GCC编译出来的程序,栈是可以执行的。
当然,现实中可能并不存在这么白痴的程序。这里只是为了给出《深入理解计算机系统》练习题3.38的一个参考答案。不是为了教大家如何黑掉现实中的哪个系统。所以,所做的假设可能并不合理。
的确如你所说,现实中的多数程序,栈是不可执行的。但是在这里,这个环境下。(GCC 4.6.1 + Window)它的确是可以执行的。
ZKey 2011-09-25 11:59
[quote]南柯之石:
[quote]ZKey:
strcpy_s windows建议
同时字符串有\0的截断
同时你的貌似没有太大意义,跳转来回都是程序本身的代码。[/quote]
我承认我注入的两行代码:
movl $0xdeadbeef, %eax
jmp 0x1724e8
做的事情不多,也不至于就这样被华丽的无视了吧。[/quote]
并没有华丽的无视你,实话.我并不会神马溢出攻击,只是最近有个自卸载内存,用了下这个 名字叫"溢出攻击"的原理.
只是觉得你这标题太大了.
ZKey 2011-09-25 11:49
[quote]南柯之石:
@ZKey
[quote]ZKey:
strcpy_s windows建议
同时你的貌似没有太大意义,跳转来回都是程序本身的代码。[/quote]
我无语了,你确定你看懂了吗?[/quote]
同时这个,如果是输入字符串,我想少不了要用到strcpy函数吧,最新的那个神马ISOxxxx标准提倡_s安全函数,新标准吗,实施的不好,接受的也少.
ZKey 2011-09-25 11:45
@南柯之石
内存区域存在READ WRITE EXEC权限的
栈只有RW 所以你的方法是通过溢出更改ret的返回值 来达到跳转到任意代码位置,这样没有问题。但是你跳转来回,并没有添加新的代码,(如果你坚信栈是可以执行的,那我无能为力)所以只是程序本身内跳转。并且你能操作的只有栈,如果ret返回栈来执行,由于没有exec权限,会有c0000005异常的。不知道你现在明白没有
类似执行WinExec这样的函数
方法是一样的,将本来的ret地址换成WinExec地址,栈中这样
lpCmdLine
uCmdShow
WinExec
不过字符串定位是个问题,可以压入,却难定位,如果程序中同时拷贝到另一个地址会容易些
ototsuyume 2011-09-25 09:19
[quote]南柯之石:
@ototsuyume
[quote]ototsuyume:实际上呢,在vs2005跟vs2008装了win7补丁后就可以设置关系栈的可执行属性,默认是打开的,也就是所谓的dep。而且呢,elf文件跟pe文件里面都有字段是表明堆栈段是否有可执行属性的,所以,你在sb窗口7里面用gcc去编译东西呢,人家不往那个位设置打开dep,栈段自然就是可执行的了,要是这样说sb窗口7好欺负,那实在是很冤枉微$的。自从vista引入了aslr跟dep后,安全性已经提高几个档次了,所以呢,不要认为sb窗口7好欺负了[/quote]
原来如此。看来是冤枉W7了。可我在Ubuntu下也是用GCC,这种...[/quote]
首先,dep跟ExecShield都是要先由os支持,像xp sp1跟之前的linux都不支持这样的功能。其次才轮到编译器在链接的时候去设置elf或pe相关的标志位。为什么windows上的gcc不默认开启这个编译选项,可能是它本身就不支持,又或者是出于其他考虑。不过我查了一下,似乎gcc是不支持的,要靠其他工具去实现,参考这里:http://www.ziki.com/fr/gcouprie+37899/post/enable-dep-and-aslr-with-mingw+10897502
南柯之石 2011-09-25 01:07
@lixiong
注入空间倒不是问题,只是aslr比较棘手,期待你的迷底。:-)
南柯之石 2011-09-25 01:05
@ototsuyume
[quote]ototsuyume:实际上呢,在vs2005跟vs2008装了win7补丁后就可以设置关系栈的可执行属性,默认是打开的,也就是所谓的dep。而且呢,elf文件跟pe文件里面都有字段是表明堆栈段是否有可执行属性的,所以,你在sb窗口7里面用gcc去编译东西呢,人家不往那个位设置打开dep,栈段自然就是可执行的了,要是这样说sb窗口7好欺负,那实在是很冤枉微$的。自从vista引入了aslr跟dep后,安全性已经提高几个档次了,所以呢,不要认为sb窗口7好欺负了[/quote]
原来如此。看来是冤枉W7了。可我在Ubuntu下也是用GCC,这种攻击就行不通。这是因为GCC歧视Windows故意的呢?还是Ubuntu的安全机制不依赖编译器呢?
南柯之石 2011-09-25 00:56
@通用权限组件源码
NetBeans呀
lixiong 2011-09-25 00:23
[quote]南柯之石:
@ZKey
[quote]ZKey:
strcpy_s windows建议
但是你都可以做这2个事情了,难道就不能直接开个远程线程?[/quote]
通过缓冲区溢出,已经可以执行任何注入的代码了,还开什么线程?[/quote]
抛弃什么DPE的不说,即便是可以执行任何注入的代码了,现在这个题目还有两个关键的问题,不知道楼主能否继续努力一下:
假设这个程序运行在管理员权限下。攻击者试图通过这个漏洞来创建一个管理员权限的cmd。换句话说,攻击者是否能通过注入,让这个程序运行
CreateProcess("cmd.exe"...);
目前的问题是:
1. 注入的空间有限,所以无法直接注入CreateProcess的调用代码。
2. 就算可以,在64位的系统上,操作系统默认对CreateProcess API的地址随机化了,注入的时候如何准确定位CreateProcess的地址。
楼主,有什么好办法么?
(我的谜底过一段时间后揭晓)
ototsuyume 2011-09-24 23:50
实际上呢,在vs2005跟vs2008装了win7补丁后就可以设置关系栈的可执行属性,默认是打开的,也就是所谓的dep。而且呢,elf文件跟pe文件里面都有字段是表明堆栈段是否有可执行属性的,所以,你在sb窗口7里面用gcc去编译东西呢,人家不往那个位设置打开dep,栈段自然就是可执行的了,要是这样说sb窗口7好欺负,那实在是很冤枉微$的。自从vista引入了aslr跟dep后,安全性已经提高几个档次了,所以呢,不要认为sb窗口7好欺负了
sm11e 2011-09-24 20:08
弱弱问下楼主,有什么作用呢。科普下:)
通用权限组件源码 2011-09-24 19:36
这个是什么编辑器?
南柯之石 2011-09-24 17:53
@yyww
这种漏洞可以执行任意代码,你觉得能提权限吗?
能用这东西做什么取决于你的想象力。
南柯之石 2011-09-24 17:41
@诺贝尔
呵呵,这是另一个问题。
本文介绍缓冲区溢出攻击的原理和方法。找到哪里有缓冲区溢出漏洞就不是一篇文章就可以讲明白的了。
yyww 2011-09-24 17:35
通过这个能提升权限吗。 如果不行话,有用吗
南柯之石 2011-09-24 17:34
@gbb21
没什么问题?安全问题?
诺贝尔 2011-09-24 15:22
问题你怎么知道要攻击的程序本身是什么构造的呢?
gbb21 2011-09-24 14:40
@南柯之石
DEP 默认只是开启保护系统核心程序,从来没有开启保护所有程序~
gbb21 2011-09-24 14:36
编译器土,谁也没办法,用VC就没问题了~
南柯之石 2011-09-24 11:11
@ZKey
[quote]ZKey:
strcpy_s windows建议
但是你都可以做这2个事情了,难道就不能直接开个远程线程?[/quote]
通过缓冲区溢出,已经可以执行任何注入的代码了,还开什么线程?
南柯之石 2011-09-24 10:56
@ZKey
[quote]ZKey:同时可以通过巧妙的设置,执行api如ShellExecute WinExec这些,启动一些程序.但是同样的都具备了这些条件,我想已经可以完全控制机器,根本不用再用什么缓冲区攻击了[/quote]
不知道您指的“通过妙的设置,执行api如ShellExecute WinExec这些”是如何实现的?求指教。
南柯之石 2011-09-24 10:48
[quote]ZKey:
strcpy_s windows建议
同时字符串有\0的截断
同时你的貌似没有太大意义,跳转来回都是程序本身的代码。[/quote]
我承认我注入的两行代码:
movl $0xdeadbeef, %eax
jmp 0x1724e8
做的事情不多,也不至于就这样被华丽的无视了吧。
南柯之石 2011-09-24 10:45
@ZKey
[quote]ZKey:
strcpy_s windows建议
同时你的貌似没有太大意义,跳转来回都是程序本身的代码。[/quote]
我无语了,你确定你看懂了吗?
ZKey 2011-09-24 10:44
同时可以通过巧妙的设置,执行api如ShellExecute WinExec这些,启动一些程序.但是同样的都具备了这些条件,我想已经可以完全控制机器,根本不用再用什么缓冲区攻击了
ZKey 2011-09-24 10:40
strcpy_s windows建议
同时字符串有\0的截断
同时你的貌似没有太大意义,跳转来回都是程序本身的代码。如果你想执行额外的代码,需要先写入,同时设置区段的内存属性。但是你都可以做这2个事情了,难道就不能直接开个远程线程?
另外对于缓冲区溢出,通常都是程序去搞定,操作系统只管权限就可以了.
南柯之石 2011-09-24 01:40
@周巍
It was. That option is enabled by default.
ini_always 2011-09-24 01:29
很久前试着玩过缓冲区溢出。。。
周巍 2011-09-24 01:29
Try to turn on DEP for all programs and services.
Virus-BeautyCode 2011-09-23 13:21
研究的不错
南柯之石 2011-09-23 13:15
@百分百好牛
嘿嘿,从Office里Copy出来给丢了。刚加上了。
安度 2011-09-23 12:11
满眼的浮云啊...这都是 神马,看不明白
百分百好牛 2011-09-23 11:12
楼主,你的“黄色高亮”的代码在哪里呀,俺看不到。:)
cxh116 2011-09-23 10:35
在局域网这个很危险,比如公共WIFI,其它的时候应该没多大事
一有新人 2011-08-22 17:14
@WILLPAN
下个抓包软件就行了,google一下,你就知道
WILLPAN 2011-08-22 15:45
楼主,可不可以教我怎么截取网络包。
BloodyAngel 2011-08-09 16:49
这个代码在后台用 C# 应该怎么写啊,博主?
南柯之石 2011-05-11 16:10
//可读性高很多
//分3段(AB, ABC..., ACD),每段内部再进行Ordianl比较(大写>小写)
ab
aB
Ab
AB
aBccccc
Abccccccc
Abd
我个人会比较期待,第一个字母相同,就排在一起。您不觉得这个“排序”结果,仅仅第一个字母,就一会大写,一会儿小写。很不和谐么?
_Mgen 2011-05-11 15:36
@南柯之石
我印象中C/C++的字符串比较都是小写>大写。你说大写>小写是属于其他函数库?
不过无所谓了,都类似于Ordinal比较(就是大写小写谁大谁小不一样),你的问题应该可以等于InvariantCulture相对Ordinal比较有什么意义呢?
我觉得(个人意见)InvariantCulture比较结果可读性更高,用在针对用户输出上比较好。
比如这几个字符串:"Ab", "aB", "AB", "ab", "Abccccccc", "aBccccc", "Abd"
排序结果:
===== Ordinal
//其实排序后肉眼看上去还很乱
AB
Ab
Abccccccc
Abd
aB
aBccccc
ab
===== InvariantCulture
//可读性高很多
//分3段(AB, ABC..., ACD),每段内部再进行Ordianl比较(大写>小写)
ab
aB
Ab
AB
aBccccc
Abccccccc
Abd
测试代码(C#)
[code=csharp]
string[] arr = { "Ab", "aB", "AB", "ab", "Abccccccc", "aBccccc", "Abd" };
Array.Sort<string>(arr, StringComparer.Ordinal);
Console.WriteLine(String.Join("\n", arr));
Console.WriteLine();
Array.Sort<string>(arr, StringComparer.InvariantCulture);
Console.WriteLine(String.Join("\n", arr));
[/code]
南柯之石 2011-05-09 16:04
@_Mgen
非常感谢您的解释。但这样的排放方式有什么实际的用途呢?您看C++的排序方式,就是字典的排序方式。很直观,很好理解。.NET这种会在什么情况下用到呢?
_Mgen 2011-05-06 21:52
[quote]String::Compare("ac", "Ab"): 1 // 这个是我最不能理解的。明明是区分大小写的比[/quote]
不用Ordinal的话,系统会用当前线程的CurrentCulture,而大多数CultureInfo和InvariantCulture比较方式一样:
如果字符不一样(不区分大小写) - 输出结果 (因此b>AB,B>abc)
否则
比较如果长度不一样 - 输出结果 (因此abc>AB>ab)
否则
进行大小写比较依次比较 (比如:AB>Ab>aB>ab)
所以ac比较Ab,第一位视为相等,第二位立刻比较出结果c>b
_Mgen 2011-05-06 21:41
我写过一篇关于InvariantCulture的文章,结尾有通过Ordinal,InvariantCulture和其他CultureInfo进行字符串比较的结果和简要解释,希望有所帮助。
地址:
http://www.cnblogs.com/mgen/archive/2011/05/05/2037603.html