fakebook wp /ssrf/php伪协议
前言
- 快速完成fakeboook题目的2中方法
- ssrf+注入+php伪协议做题知识积累
2种方法快速做题
前提:目录扫描dirmap扫出web目录。如下:

一、sqlmap直接获取flag
1、Join界面是post提交方法,保存,用sqlmap跑一下,别人的想法是查数据,我是想直接上shell(笑哭);代码及报错如下:


去文件夹下查看

二、MySQL数据库函数load_file()读文件(看评论的方法,tpl)
在view界面中有参数no,测试下其安全性
no =1 and 1=1 //正常显示页面
no =1 and 1=2 //页面显示错误;有注入
这时候呢就可以用MySQL中的load_file()函数来读取内容了
no=-1 /*!union*/ /*!select*/ 1,load_file('/var/www/html/flag.php'),3,4#

ssrf+注入+php伪协议
思路:后台代码对输入的blog参数,进行了正则过滤,否则的话直接在blog中输入file:///var/www/html/flag.php,就能得到flag文件;但是我们可以结合上面的注入漏洞,讲file协议存入数据库中,从而绕过正则。
介绍
file://:用于访问本地文件系统,并且不受allow_url_fopen,allow_url_include影响,file://还经常和curl函数(SSRF)结合在一起;当代码没有对url进行过滤时,我们传入 file伪协议 payload:/index.php?action=album&pid=file:///var/www/html/flag.php,可以直接读取服务器内容, SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统.
1 <?php
2 //创建一个新cURL资源
3 $ ch = curl_init ();
4
5 //设置URL和相应的选项
6 curl_setopt ($ ch ,CURLOPT_URL ,$_GET['url'] ); //不安全带代码
7 curl_setopt ($ ch ,CURLOPT_HEADER ,false );
8
9 //抓取URL并把它传递给浏览器
10 curl_exec ($ ch );
11
12 //关闭cURL资源,并释放系统资源
13 curl_close ($ ch ); ?>
上手
robots.txt下/user.php.bak代码,分析
1 <?php 2 3 4 class UserInfo 5 { 6 public $name = ""; 7 public $age = 0; 8 public $blog = ""; 9 10 public function __construct($name, $age, $blog) 11 { 12 $this->name = $name; 13 $this->age = (int)$age; 14 $this->blog = $blog; 15 } 16 17 function get($url) //$url未进行任何过滤 18 { 19 $ch = curl_init(); //初始化一个新的会话,返回一个cURL句柄,供curl_setopt(),curl_exec()和curl_close()函数使用。 20 21 //设置URL和相应的选项 22 curl_setopt($ch, CURLOPT_URL, $url); 23 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 24 25 //抓取URL并把它传递给浏览器 26 $output = curl_exec($ch); 27 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 28 if($httpCode == 404) { 29 return 404; 30 } 31 curl_close($ch); 32 33 return $output; 34 } 35 36 public function getBlogContents () 37 { 38 return $this->get($this->blog); 39 } 40 41 public function isValidBlog () 42 { 43 $blog = $this->blog; 44 //对博客格式进行正则限制 45 return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog); 46 } 47 48 }
sqlmap跑出数据库中存储格式;(具体的不写了,常规操作)先后得到数据库fakebook,表users

思路分析过程:我们得知数据库中存的是我们输入的username,passwd,age,blog,的序列内容,我们要拿到flag,就要通过文件读取来拿,也就是blog这个位置,此时我们知道在blog这个位置写入能帮助我们拿到flag的代码,将其序列化即可;上文介绍PHP伪协议中file://协议可以读取服务器本地文件,所以payload只要在blog写入file:///var/www/html/flag.php
序列化代码如下:

序列化如下:

payload如下:
拿到flag
总结
- 清楚的了解了ssrf的原理及应用(以前还半知半解)
- 各种漏洞的联合利用
- PHP伪协议的大用处(准备积累一篇PHP伪协议的文章)

浙公网安备 33010602011771号