BugkuCTF_Web
web2
直接在URL前加“view-source:”,查看源代码,发现flag
计算器
(1)打开网址,是计算两个数的和,但结果只能输入一位数字。
(2)查看源代码
(3)指出了字符串的最大长度为1,直接修改这个最大长度,只要改为比结果的位数大就行
(4)然后计算出正确的结果就能得到flag
web基础$_GET
用get方法输入一个参数,参数名为“what”,值为“flag”
?用来间隔URL和请求参数,若要输入多个参数,用&间隔。
web基础$_POST
用post方法输入一个参数,借助hackbar工具,传一个what参数,值为flag
矛盾
(1)一串php代码
(2)用get方法传入一个num参数,其不能为数字,但又要等于1。这里涉及php代码弱类型比较,数字和字符混合的字符串转换为整数后只保留数字部分。所以num可以构造为1xiaosong,字符部分随便。
#
web3
(1)打开网址,一直是重复的页面
(2)用view-source:查看源代码,在最下面发现一串unicode编码
(3)用在线工具转为ASCII码得到flag ( http://tool.chinaz.com/tools/unicode.aspx)
域名解析
(1)根据题目的意思,将域名flag.baidu.com指向到IP地址123.206.87.240
windows平台在C:\Windows\System32\drivers\etc\host中最后一行加入120.24.86.145 flag.bugku.com (这里用notepad++打开host文件,修改后保存)
(2)修改完后,打开浏览器访问flag.baidu.com,得到flag
#如果是linux平台,则在/etc/host中加入123.206.87.240 flag.baidu.com
你必须让他停下
(1)打开网址,页面一直刷新,用burp抓包
(2)发送到Repeater,点击发送,每发送一次,图片都会来一次变化,这是随机的,不断地发送,在出现10.jpg的时候发现了flag
变量1
(1)打开网址,发现一段php代码
(2)对代码的解释:
<?php
error_reporting(0); //关闭php错误显示
include "flag1.php"; //引入flag1.php文件代码
highlight_file(__file__);
if(isset($_GET['args'])){ //通过get方式传递 args变量才能执行if里面的代码
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){ //正则表达式的意思是匹配任意[A-Z,a-z,0-9,_]的字符,就是任意大小写字母和0-9以及下划线组成
die("args error!");
}
eval("var_dump($$args);");
}
?>
(3)可变变量(https://www.php.net/manual/zh/language.variables.variable.php)
#一个变量的变量名可以动态的设置和使用。一个普通的变量通过声明来设置,例如:
<?php
$a = 'hello';
?>
#一个可变变量获取了一个普通变量的值作为这个可变变量的变量名。例如:
<?php
$$a = 'world';
?>
#这时,两个变量都被定义了:$a 的内容是“hello”并且 $hello 的内容是“world”。因此,以下语句:
<?php
echo "$a ${$a}";
?>
与以下语句输出完全相同的结果,都会输出hello world:
<?php
echo "$a $hello";
?>
#要将可变变量用于数组,必须解决一个模棱两可的问题。这就是当写下$$a[1] 时,解析器需要知道是想要 $a[1] 作为一个变量呢,还是想要 $$a 作为一个变量并取出该变量中索引为 [1] 的值。解决此问题的语法是,对第一种情况用 ${$a[1]},对第二种情况用 ${$a}[1]。
#在 PHP 的函数和类的方法中,超全局变量不能用作可变变量。$this 变量也是一个特殊变量,不能被动态引用。
(4)超全局变量是在全部作用域中始终可用的内置变量
这些超全局变量是:
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
(5)所以只需给变量传入一个全局变量就可以了,将其变量名传入。构造参数:?args=GLOBALS,就能得到flag。
web5
(1)查看网页源代码,发现一串特殊的字符
(2)根据题目的提示,JSFuck是用6个字符 [ ] ( ) ! +来编写JavaScript程序。将源代码中的特殊字符放到浏览器的console控制台上进行解密。粘贴到控制台后按回车即可。
(3)注意提交格式,要求大写。CTF{WHATFK}
#Jother是一种运用于javascript语言中利用少量字符构造精简的匿名函数方法对于字符串进行的编码方式。其中8个少量字符包括:[ ] ( ) ! + { } 只用这些字符就能完成对任意字符串的编码。(可以在浏览器的console控制台上直接解密)