payload:
使用file伪协议看到的flag.php源码如下:
要求是 http 或者 https 协议,以及过滤了 localhost 和 127.0.0.1 。
额为什么 preg_match() 里面没有指定对谁匹配,所以上一题的payload中的http协议的是可以使用的,file伪协议的过不了第一层判断。
不过如果的确做了有效的正则匹配,那么可以127.0.1 、127.1或者转成16进制或者8进制绕过,payload如下:
使用进制转换或者127.1绕过:
把1和0都ban了,可以修改自己域名的A记录为127.0.0.1
A(Address)记录是地址记录,用来指定主机名(或域名)对应的IP地址记录,通过A记录,可以设置不同域名指向不同的IP。
payload如下:
也可以搭一个302跳转,不过也是要有域名的 参考 :
要求host的长度小于等于5,使用如下payload:
还可找一个域名长度不大于5的域名 A 记录解析到127.0.0.1。
要求host长度小于等于3,使用如下payload:
gethostbyname 返回主机名对应的 IPv4地址。
filter_var() 过滤器要求解析出来的ip地址是有效ip,并且不是私有ip或者不是保留ip,所以之前把自己域名的A记录设置为127.0.0.1就不可行了,解析出来的ip是保留ip。
可以使用302重定向,vps搭一个:
payload如下:
还有一个方法是DNS重绑定漏洞,参考:
浅谈DNS重绑定漏洞
具体 *** 作如下:访问 http://ceye.io/ 并注册用户,在这儿进行DNS重绑定:
多访问几次即可。
要求解析完的url以 http://ctf. 开头,以 show 结尾,payload如下:
这样 parse_url() 真正解析出来的host是127.0.0.1, ctf. 变为了user字段,可以尝试本地解析一下:
结果如下:
可以参考: https://ctf-wiki.org/web/ssrf/#_3
提示是打无密码的mysql,抓包发现ssrf漏洞应该在check.php中:
输入用户名和想要执行的sql命令:
get方法的url参数,利用ssrf打redis,同上:
然后访问网站根目录下的shell.php即可。
一、绝对路径(_SERVER[“SCRIPT_FILENAME”])这个是最常用,也是最有效的一个办法,找到phpinfo()页面可以直接找到网站的绝对路径,对于写shell和信息搜集是必不可少的。
二、支持的程序
可以通过phpinfo()查看一些特殊的程序服务,比如redis、memcache、mysql、SMTP、curl等等如果服务器装了redis或者memcache可以通过ssrf来getshell了,在discuz中都出现过此类问题。如果确定装了redis或memcache的话,在没有思路的情况下,可以着重找一下ssrf
三、泄漏真实ip(_SERVER[“SERVER_ADDR”]或SERVER_ADDR)
有时候通过phpinfo()泄漏的ip可以查查旁站、c段什么的,直接无视cdn,百事不灵。
四、GOPHER
也算是ssrf一部分吧,或者说主要靠ssrf利用起来,如果支持gopher,ssrf便没有压力咯
五、fastcgi
查看是否开启fastcgi和fastcgi的版本,可能导致解析漏洞、远程命令执行、任意文件读取等问题
六、泄漏缓存文件地址(_FILES[“file1”])
向phpinfo() post一个shell可以在_FILES[“file1”]中看到上传的临时文件,如果有个lfi,便可以直接getshell了。
七、一些敏感配置
allow_url_include、allow_url_fopen、disable_functions、open_basedir、short_open_tag等等
比如allow_url_include可用来远程文件包含、disable_functions用来查看禁用函数,绕过执行、查看是否开启open_basedir,用p牛的绕过open_basedir的方法有可能能读一些没权限的目录等等。
此外还能获取一些环境信息,比如Environment中的path、log等
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)