**
N1BOOK-SSRF
**
一、解题思路
1.查看页面源代码,发现了challenge.php
2.在进行ssrf攻击之前,先进行一波代码审计
3.根据题目要求,访问本机的flag.php,本道题是用了白名单的方式,通过parse_url()后分解出来的IP不能为白名单内的IP,所以我们主要需要绕过parse_url(),在线php调试
4.构造的payload为:http://fghkk@127.0.0.1:80@baidu.com/flag.php
5.当我使用get传参的方式时,发现没有任何的回显,那使用POST的传参试试
6.成功得到flag。
7.另外的一种方式,直接使用POST的方式,直接得到flag.
二、知识点
1.SSRF(Server-side Request Forge,服务端请求伪造)。
2.用攻击者构造的攻击链接穿个服务端执行造成的漏洞,一般用来在外网探测或攻击内网服务。
3.正则匹配
KaTeX parse error: Undefined control sequence: \/ at position 42: …^(http|https)?:\̲/̲\/.*(\/)?.*/’,
u
r
l
)
;
/
/
判
断
返
回
的
url); //判断返回的
url);//判断返回的url值是0次(不匹配)或是1
//^从头开始匹配
//?匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的
//()标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,使用(和)
//.匹配除换行符\n之外的任何单字符。要匹配.,请使用.
//匹配前面的子表达式零次或多次。要匹配字符,请使用*
//$:从字符串末尾进行匹配
h
o
s
t
n
a
m
e
=
hostname=
hostname=url_parse[‘host’];
//hostname为主机名
i
p
=
g
e
t
h
o
s
t
b
y
n
a
m
e
(
ip=gethostbyname(
ip=gethostbyname(hostname);
//通过域名获取IP地址
i
n
t
i
p
=
i
p
2
l
o
n
g
(
int_ip=ip2long(
intip=ip2long(ip);
//ip2long:将IPV4的ip地址(以小数点分隔形式)转换为int
参考链接:https://www.icode9.com/content-4-874272.html
[https://www.jb51.net/shouce/php5/zh/function.ip2long.html](https://www.jb51.net/shouce/php5/zh/function.ip2long.html)