是一个登录界面,我们先注册一个试试:
用dirsearch扫描出来robots.txt,也发现了flag.php,并下载user.php.bak
源代码内容:
<?phpclass 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_init() 函数用于初始化一个新的 cURL 会话,//并返回一个 cURL 句柄(资源类型),后续的 cURL 操作都将基于这个句柄进行。curl_setopt($ch, CURLOPT_URL, $url);//将 CURLOPT_URL 选项设置为传入的 $url 参数,指定了要请求的目标 URLcurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// 将 CURLOPT_RETURNTRANSFER 选项设置为 1(布尔值 true),
//表示让 cURL 执行 curl_exec() 时返回响应内容,而不是直接输出。$output = curl_exec($ch);
//执行 cURL 会话,向指定的 URL 发送 HTTP GET 请求,并将响应内容赋值给变量 $output。
//如果请求失败,$output 将为 false$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
//获取服务器返回的 HTTP 响应状态码,并将其赋值给变量 $httpCode。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);}}
点进去后发现url中有get参数no,这里还有类似数据表的一个表,可能存在sql注入
正常回显,说明存在sql注入
order by 4成功,5报错,说明有4列
随后进行no=1 union select 1,2,3,4发现被过滤掉了,随机排列组合尝试发现是 union select 被过滤掉了,此时可以用 union/**/select 绕过
爆数据库名(这里只有第二个位置存在回显,所以一直在第二个位置上操作)
注意这里no不能等于1,因为它在sql里头本来就有等于1的行,此时如果no=1,将直接显示前一个select查询,像这样
爆列名
显示data的内容是个序列化以后的字符串
再结合前文源代码内容, 里面有
$output = curl_exec($ch);
//执行 cURL 会话,向指定的 URL 发送 HTTP GET 请求,并将响应内容赋值给变量 $output。
//如果请求失败,$output 将为 false
可以利用这个函数ssrf,用file协议读取flag.php文件
构造blog=file://var/www/html/flag.php
O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:18;s:4:"blog";s:29:"file:///var/www/html/flag.php";}
在url中提交:
?no=-1 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:18;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'#
放在第四个位置,方便直接注入到blog里面
注入成功,blog变成了读取flag.php的协议
在源代码中发现flag.php
点击在“来源”面板中显示
可以直接看见解码后的flag
补充一点iframe
IFRAME 即 Inline Frame,是文档中的文档,或者说浮动的框架。它会创建包含另外一个文档的内联框架,能在当前 HTML 文档中嵌入另一个文档,就像在网页中嵌入了一个内嵌的浏览器窗口。
如果将blog一栏填写为www.baidu.com则源代码会出现:
这个地方src="data:text/html;base64,xxxxxxx"是data流,在BUU23中做到过,再来看一遍吧BUU23 [ZJCTF 2019]NiZhuanSiWei1-CSDN博客
data URI
是一种特殊的 URL 格式,它允许在 URL 中直接嵌入数据,而不是引用外部资源。
意味着要在<iframe>
中显示的 HTML 内容是经过 Base64 编码后直接嵌入在 URL 中的。
在这里显示出百度页面被base64编码后的内容,如果右击选择查看来源的话,就会看见百度页面