基本上我正在利用的功能是这样的:
int getbufn()
{
char buf[512];
Gets(buf);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
当我运行主程序时,该函数执行5次,每次buf的位置改变,%ebp的位置也改变.我应该做的是将一个特定的十六进制值,比如0xFFFFFFFF,放入一个变量中,主程序每次都会检查该变量是否存在.如果它再次执行,直到完成所有5次并且程序安静地退出.
我遇到的问题是,在检查十六进制值之前,检查另一个常量值,比如说0x12345678.如果我已经损坏了0x12345678并且它不在那里,程序就会爆炸.
我已经发现0x12345678存储在-0x10(%ebp)中,所以我知道它基于%ebp并且我每次都知道%ebp的地址但我只能在第一次使用该漏洞利用.我这样做基本上是用了496个字节,而且这个机器代码是用字节格式的:
mov 0xFFFFFFFF, %eax
movl address old ebp, %ebp
push correct return adress in function main
ret
Run Code Online (Sandbox Code Playgroud)
最后是5个字和一个返回长的字节,我填充0x313131使其长6个字.此时我的漏洞利用字符串长度为520字节,这正好是缓冲区低于%ebp的数量,因此我添加旧ebp的地址和我的nopsled中的某个地址覆盖%ebp处的当前值以及返回值getbufn的地址.
问题是当程序执行第二次时%ebp的地址0x10低于其先前的地址,所以我的方式不会破坏%ebp不起作用,并且主检测到0x12345678不在-0x10(%ebp).如何解除%ebp的损坏?
我有一个特点
trait Foo<T> : Iterator<Item=T> {
fn bar(&mut self) -> f64;
}
Run Code Online (Sandbox Code Playgroud)
我想一旦实现这种特质的类型T(在我的情况下f64在其所有引用类型() f64,&'a f64和&'a mut f64),因为在逻辑上也没关系.
我现在有
impl<T: Iterator<Item = f64>> Foo<f64> for T {
fn bar(&mut self) -> f64 {
// duplicated code
}
}
impl<'a, T: Iterator<Item = &'a f64>> Foo<&'a f64> for T {
fn bar(&mut self) -> f64 {
// duplicated code
}
}
impl<'a, T: Iterator<Item = &'a mut f64>> Foo<&'a mut f64> for T …Run Code Online (Sandbox Code Playgroud) 我试图扩展特征的功能Iterator.
我的statistics/iter_statistics.rs:
mod iter_statistics {
pub trait IterStatistics: Iterator<Item = f64> {
fn foo(&mut self) -> f64 {
0.0
}
}
impl IterStatistics for Iterator<Item = f64> {}
}
Run Code Online (Sandbox Code Playgroud)
而且statistics/mod.rs:
pub use self::iter_statistics::*;
mod iter_statistics;
Run Code Online (Sandbox Code Playgroud)
最后在我的测试代码中
use statistics::IterStatistics;
fn main() {
let z: Vec<f64> = vec![0.0, 3.0, -2.0];
assert_eq!(z.into_iter().foo(), 0.0);
}
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,我得到:
error: no method name `foo` found for type `std::vec::IntoIter<f64>` in the current scope
assert_eq!(z.into_iter().foo(), 0.0);
^~~
Run Code Online (Sandbox Code Playgroud)
这是奇怪,我因为文档的IntoIter<T>说,它实现Iterator<Item=T> …