首页
社区
课程
招聘
这篇讲述堆喷射的教程,里面所用的exploit有点地方想不明白
发表于: 2017-2-21 21:02 3800

这篇讲述堆喷射的教程,里面所用的exploit有点地方想不明白

2017-2-21 21:02
3800

就是这篇以前又看雪的大神翻译的文章,以下是连接


http://bbs.pediy.com/thread-151381.htm


其中第37页,列举出一段在exploit-db上找到的,对ie6,ie7在xp下可用的脚本


<script >

var shellcode = unescape('%u\4141%u\4141');

var bigblock = unescape('%u\9090%u\9090');

var headersize = 20;

var slackspace = headersize + shellcode.length;

while (bigblock.length < slackspace) bigblock += bigblock;

var fillblock = bigblock.substring(0,slackspace);

var block = bigblock.substring(0,bigblock.length - slackspace);

while (block.length + slackspace < 0x40000) block = block + block + fillblock;

var memory = new Array();

for (i = 0; i < 500; i++){ memory[i] = block + shellcode }

</script>

</html>


其实我看不明白这里的具体过程,换一种简单的写法,如

<script>
   var shellcode = unescape('%u\4141%u\4141');
   var bigblock = unescape('%u\9090%u\9090');
   while(bigblock.length<0x40000)bigblock+=bigblock;
   var memory = new Array();
   for (i = 0; i < 500; i++){ memory[i] = block + shellcode }
</script>


这样写行不行呢?exploit-db的这段脚本,我看不明白其中的逻辑,希望大神指点一下


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 30
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
对于exploit-db的那段脚本,我说一下我的理解。slackspace的值是22吧,然后再执行完下一行的循环后,bigblock的length就是22,实际有44字节的“0x90",再往下一行,fillblock的length是11,实际有22字节的”0x90",然后再往下一行,block不就是什么都没有的吗,只有0个字符的字符串?然后再往下也不知怎么理解了,求指点
2017-2-21 21:17
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
3
自由的翅膀 对于exploit-db的那段脚本,我说一下我的理解。slackspace的值是22吧,然后再执行完下一行的循环后,bigblock的length就是22,实际有44字节的“0x90&quot ...
简单看了一下
1.  unescape('%u\4141%u\4141')  ~  最好确认一下里面有没有'\',有的话长度是10,没有长度是2,后面按照长度是2来算
2.  bigblock长度是32。
3.  fillblock长度是22。
4.  block的长度是10。
5.  至于你说的能不能换一种写法,要根据实际漏洞判断。关键点应该是shellcode长度会变化,引起内存布局要相对应的进行调整,写攻击代码的时候,要考虑到shellcode长度变化时内存布局依旧有效。所以前面计算的数字,只是辅助理解,不是说实际使用的时候,就是就是这样的。
2017-2-22 11:54
0
雪    币: 30
活跃值: (216)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
QEver 简单看了一下 1. unescape('%u\4141%u\4141') ~ 最好确认一下里面有没有'\',有的话长度是10,没有长度是2,后面按照长度是2来算 2. bigblock长度是32。 ...
我又看了一下,在执行完while(bigblock.length  <  slackspace)  bigblock+=bigblock那行之后,slackspace的值应该是22,那么这里循环应该执行10次,每执行一次bigblock应该增加4字节,而其length属性则增加2,那么执行完循环之后bigblock的长度好像应该是22,但实际上有44字节的'0x90'?
另外unescape('%u\4141%u\4141')这里,有'\'的话长度是10是怎么回事?我看这片教程中说unescape函数中字符串是'%u\'后接16进制数,就不会把这字符串转为unicode,而会原样存储,但是这样的字符串用.length属性访问其长度,返回值是实际结果的一半。所以,有'\'的话长度是10是怎么回事呢?
2017-2-22 16:59
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
5
自由的翅膀 我又看了一下,在执行完while(bigblock.length < slackspace) bigblock+=bigblock那行之后,slackspace的值应该是22,那么这里循环应该执 ...
while循环每次执行不是bigblock+2,而是bigblock*2
%u4141是一个unicode字符。%u\4141里面多了'\',打断了原本的表达方式,变成了%和u分别是一个字符,\41是一个八进制表示的字符!,后面的4和1是两个字符。一共5个字符。

建议你好好打打基础吧。
2017-2-22 17:50
0
游客
登录 | 注册 方可回帖
返回
//