[GXYCTF2019]BabysqliV3.0

[GXYCTF2019]BabysqliV3.0

考点

  • 弱口令admin/password

  • 文件包含配合伪协议读取文件

  • PHP代码审计

wp

账号是admin,弱口令试出来密码是password

进去之后是个文件上传,URL是http://379cd025-c636-43ae-bec1-60fab63cfa8b.node4.buuoj.cn:81/home.php?file=upload

试试文件读取home.php?file=php://filter/read=convert.base64-encode/resource=home

只能获取home和upload结尾的文件

home.php

<?php
session_start();
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> <title>Home</title>";
error_reporting(0);
if(isset($_SESSION['user'])){
	if(isset($_GET['file'])){
		if(preg_match("/.?f.?l.?a.?g.?/i", $_GET['file'])){
			die("hacker!");
		}
		else{
			if(preg_match("/home$/i", $_GET['file']) or preg_match("/upload$/i", $_GET['file'])){
				$file = $_GET['file'].".php";
			}
			else{
				$file = $_GET['file'].".fxxkyou!";
			}
			echo "当前引用的是 ".$file;
			require $file;
		}
		
	}
	else{
		die("no permission!");
	}
}
?>

upload.php

在上传这里文件名是完全可控的,并且没有对文件内容进行检测,那就可以直接传shell进去了

用burp抓一下包,加个name参数

在bp里面抓包改包send两次就可以了,send两次是为了看返回的位置,实际上send一次就可以了,没有返回是因为file_get_contents那里报错。

小结

  1. 代码审计要理清代码的逻辑

最后更新于