【Web】Ctfshow SSRF刷题记录1

核心代码解读

    curl_init():初始curl会话
    curl_setopt():会话设置
    curl_exec():执行curl会话,获取内容
    curl_close():会话关闭
 

①web351

【Web】Ctfshow SSRF刷题记录1_第1张图片

post:

url=http://127.0.0.1/flag.php

或者

url=file:///var/www/html/flag.php

查看源码

【Web】Ctfshow SSRF刷题记录1_第2张图片

 

②web352-353

【Web】Ctfshow SSRF刷题记录1_第3张图片

 【Web】Ctfshow SSRF刷题记录1_第4张图片

前置知识:

127.1会被解析成127.0.0.1,也就意味着为零可缺省
在Linux中,0也会被解析成127.0.0.1
127.0.0.0/8是一个环回地址网段,从127.0.0.1 ~ 127.255.255.254都表示localhost
ip地址还可以通过表示成其他进制的形式访问,IP地址二进制、十进制、十六进制互换

post:

url=http://0/flag.php

url=http://127.1/flag.php 

url=http://0x7f.0.0.1/flag.php

url=http://0x7F000001/flag.php

③web354

【Web】Ctfshow SSRF刷题记录1_第5张图片

一些公共域名,但是解析到127.0.0.1 

post:

 url=http://ecd.tencent.com/flag.php

(当我们访问域名时会把我们引入设置的A记录,这里就是127.0.0.1,感觉就像给域名重起了个名字)

⑤web355-356

 【Web】Ctfshow SSRF刷题记录1_第6张图片

 【Web】Ctfshow SSRF刷题记录1_第7张图片

也就是长度限制

post:

url=http://0/flag.php

⑥web357

【Web】Ctfshow SSRF刷题记录1_第8张图片

FILTER_FLAG_IPV4 - 要求值是合法的 IPv4 IP
FILTER_FLAG_IPV6 - 要求值是合法的 IPv6 IP
FILTER_FLAG_NO_PRIV_RANGE - 要求值是 RFC 指定的私域 IP (比如 192.168.0.1)
FILTER_FLAG_NO_RES_RANGE - 要求值不在保留的 IP 范围内。该标志接受 IPV4 和 IPV6 值。
 

 因为代码中使用了 gethostbyname 获取了真实 IP 地址,所以域名指向方法不能再使用,可以使用 302 跳转方法 和 dns rebinding 方法。

DNS rebinding(DNS重新绑定攻击)

攻击重点在于DNS服务能够在两次DNS查询中返回不同的IP地址,第一次是真正的IP,第二次是攻击目标IP地址,甚至可以通过这种攻击方法绕过同源策略。
 

回到题目,在题目代码中一共对域名进行了两次请求,第一次是 gethostbyname 方法,第二次则是 file_get_contents 文件读取,可以通过 DNS重绑定 来实现攻击。

去CEYE 注册账号,在个人信息页面,点击下面的+ New DNS,添加127.0.0.1和124.222.136.33(随便一个可用的ip)。

翻阅ceye的DNS Rebinding页面的介绍,有这么一句话:

    If your identifier is abcdef.ceye.io, then your DNS rebinding host is r.abcdef.ceye.io.

所以要使用DNS重定向,我们要在域名前面加上r.

多试几次即可(每次都是随机返回一个设置的IP,所以可能大概率碰运气)

 

⑦web358

【Web】Ctfshow SSRF刷题记录1_第9张图片

正则,必须要以http://ctf.开头,以show结尾

parse_url()解析到邮箱时:@前是user

file_get_contents()会访问host:port/path,与user无关

post:

url=http://[email protected]/flag.php#show

还有两题后续专门总结

 

你可能感兴趣的:(前端,CTF,WEB,安全,笔记)