本文主要是介绍CTF刷题记录Buuctf-N1BOOK-SSRF,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
**
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)
这篇关于CTF刷题记录Buuctf-N1BOOK-SSRF的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!