Training-WWW-Robots

一眼敏感文件robots.txt,不过保险起见还是先dirsearch扫了一下(然而在扫完之前就搞到flag了)。访问\robots.txt,有如下字段:

1
2
3
4
5
6
User-agent: *
Disallow: /fl0g.php


User-agent: Yandex
Disallow: *

遂访问/fl0g.php,获得flag:cyberpeace{5b170fa7b000de9419b5fac2c32b6744}

PHP2

网页内容:

1
Can you anthenticate to this website? 

结果anthenticate这个词查都查不到…

老样子顺便dirsearch扫一扫,发现index.phps文件。访问,F12查看页面源代码,可拼出如下代码块(我顺便整理了一下格式):

1
2
3
4
5
6
7
8
9
10
<?php
if ("admin" === $_GET[id]) {
echo ("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if ($_GET[id] == "admin") {
echo "Access granted!";
echo "Key: xxxxxxx";
} ?> Can you anthenticate to this website?

所以需要用get传个id=admin进去,并且需要绕过第一个if的检测。可利用urldecode,因此对“admin”进行二次url编码,构造payload:?id=%2561%2564%256D%2596%256E,然后寄了。于是尝试了一下,“adm”编码没问题,“admi”编码就有问题,怪事。获得flag:cyberpeace{d9911500b5677649709d5cd0bfda3bb2}

unserialize3

网页内容:

1
2
3
4
5
6
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
?code=

看起来是get传个序列给code。简单撸个代码出来:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
class xctf
{
public $flag;
public function __construct($flag)
{
$this->flag = $flag;
}
}

$a = new xctf('111');
$b = serialize($a);

但是还有一个问题,unserialize时会调用__wakeup(),因此还需要绕一下。根据查资料的结果,对象数量大于实际数量将不会执行。所以多一步字符替换:

1
echo $b = str_replace(":1:", ":2:", $b);

构造payload:O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;},获得flag:cyberpeace{510db54086e1f9d22cccce24fa91e5b8}

ics-06

当初做的时候一脸懵逼无从下手,看了一眼别人的wp才做出来的,因此对这题蛮有印象。

进入网页眼花缭乱,实际上能点击跳转的仅有右侧“报表中心”。注意到url:“index.php?id=1”,尝试对id下手。打开burpsuite快乐爆破,根据length排序,爆破出id=2333,获得flag:cyberpeace{7b32c01493d4f8027bb3947b97b518aa}

view_source

好棒的题目,我好喜欢,F12打开控制台就能看到html藏的flag了,好评!flag: cyberpeace{594b32ee9f4bc49cbb689e6cbf77e401}

get_post

网页内容:“请用GET方式提交一个名为a,值为1的变量”,于是“?a=1”。网页内容更新:“请再以POST方式随便提交一个名为b,值为2的变量”,于是用hackbar post了一个“b=2”。获得flag:cyberpeace{0a5851e12d1364dd0d679f9d99e82564}

robots

根据题目描述,直接访问/robots.txt,有如下内容:

1
2
3
User-agent: *
Disallow:
Disallow: f1ag_1s_h3re.php

遂访问/f1ag_1s_h3re.php,获得flag:cyberpeace{c55ed62e1c68a01e4285c2c05acb25a7}

backup

网页内容:“你知道index.php的备份文件名吗?”,保险起见还是后台来个dirsearch先扫一扫。但是作为做过的题目再等dirsearch扫完就不礼貌了,于是直接访问/index.php.bak。瞎猫碰上死耗子,成了。更改一下文件拓展名打开,获得flag:Cyberpeace{855A1C4B3401294CB6604CCC98BDE334}

网页内容:“你知道什么是cookie吗?”。根据提示F12打开控制台,在“存储”中的“cookie”看到一条“look-here”,提示访问cookie.php。访问后网页显示“See the http response”。在控制台找到“网络”中的“cookie.php”查看消息头,在响应头中找到flag:cyberpeace{045181aa4ebe881a045e8b35f3fce88c}

disabled_button

打开网页发现一个不能按的“flag”按钮。查看网页源代码,发现一行

1
<input class="btn btn-default" disabled="" style="height:50px;width:200px;" type="submit" value="flag" name="auth" />

遂删去“disabled=“””,点击按钮获得flag:cyberpeace{0cd8d48e5963b8152841290155a75a7f}

weak_auth

根据题目描述的提示,应该是几个经典的弱密码试试就行。usr:admin+pwd:admin失败,usr:admin+pwd:123456成功,得到flag: cyberpeace{f1c8fa2ef24e30ac93d6f58e1b365dc5}

simple_php

网页内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
echo $flag1;
}
if(is_numeric($b)){
exit();
}
if($b>1234){
echo $flag2;
}
?>

分析一下:用get方式传入a、b。其中a的值需要为0但又不能被判断为“否”,b的值需要大于1234但又不能是一个纯数字。对于传给a的值,第一个反应是a=/0,居然一次做对。后面又简单尝试了一下,似乎可以在0的前后输入大多数字符,都能保证第一个if执行。对于传给b的值,查了一下is_numeric的绕过,于是b=1235%00解决。获得flag:Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}

baby_web

进入网页,默认页面为/1.php。根据题目描述的提示:“想想初始页面是哪个”,第一反应index.php,结果跳转回1.php。想到在跳转回1.php前拦截下index.php,于是用burpsuite抓了个包,用repeater发出去。访问显示“Flag is hidden!”,于是尝试在hex中找找东西,发现flag:flag{very_baby_web}