考点:
sql联合注入
dirsearch目录扫描
反序列化
代码审计
解题过程:
初始页面
点击join注册一个账号
点进刚注册的账号,发现php?no=1,可能存在sql注入。
尝试手动注入,order by 4
union select被过滤
百度很多过滤方法,我这里使用:union/**/select,有回显。(注:no=-1)
获取字段,得到一段序列化值。这时候需要我们构造源码。
根据其他师傅提示,我们用dirsearch扫描目录。扫出一个robots.txt文件和flag.php文件
robots.txt里有一个user.php.bak
访问url,下载该文件
代码审计,查看源码
<?php class UserInfo { public $name = ""; public $age = 0; public $blog = ""; public function __construct($name, $age, $blog) { $this->name = $name; $this->age = (int)$age; $this->blog = $blog; } function get($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if($httpCode == 404) { return 404; } curl_close($ch); return $output; } public function getBlogContents () { return $this->get($this->blog); } public function isValidBlog () { $blog = $this->blog; return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog); } }
看到其中有curl_exec(),函数使用不当就会造成ssrf漏洞,到这里思路大概就出来了,flag.php可能处于内网无法直接访问,如果ssrf访问flag.php
在反序列化中构造file文件协议,利用服务端请求伪造漏洞访问服务器上的flag.php文件。
构造payload:
'O:8:"UserInfo":3:{s:4:"name";s:6:"xrjl11";s:3:"age";i:18;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'
查看网页源代码,发现一个链接
直接点开,获取flag!
flag{5743e676-a674-4488-8c98-c7181fb3235f}
总结:
看来每次还是要先用dirsearch扫描一下,flag代码审计和反序列化还是懵懂,抓不住重点,晚上抽时间认真学一学。
标签:php,序列化,blog,flag,ch,2018,curl,网鼎杯,Fakebook From: https://www.cnblogs.com/xrjl11sec/p/16796740.html