CTF刷题day02

Posted by 404player on March 3, 2020

本来还有点想继续刷CTFHub,发现没啥其他web方面的题目,做真题吧?感觉没啥思路。还是想把思维先练起来,就换了个平台继续刷,这个网站叫Bugku,题目感觉还是比较全。

题目1:计算器

题目链接

http://123.206.87.240:8002/yanzhengma/

题目考点

  • 页面源代码的审计
  • 开发者工具的使用

解题思路

打开页面,是一条算式加一个提交表单。

一开始看到计算器这个题目的时候,本能以为是一个写脚本限时提交的题目。

尝试性地在输入框写入数字,发现只能填入一个数字,而算式的结果一般为两位数或者三位数。初步判定是输入框长度被限定,于是F12打开开发者工具,选择输入框,看到这样几行代码:

<span id="code" class="nocode">验证码</span> <input type="text" class="input" maxlength="1"/> 

这个maxlength就是输入框限制输入的长度,将参数改成``5`,计算后提交表单就可getflag。

FLAG

flag{CTF-bugku-0032}

题目2:web基础$_GET

题目链接

http://123.206.87.240:8002/get/

题目考点

  • http请求get方法
  • url中参数的提交

解题思路

打开页面以后发现这么一段字符:

$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

意思是让我们提交一个what参数,假如这个参数是flag的话,即可getflag

构造payload?what=flag,页面显示flag

FLAG

flag{bugku_get_su8kej2en}

题目3:web基础$_POST

题目链接

http://123.206.87.240:8002/post/

题目考点

  • http请求post方法
  • hackbar的使用

解题思路

打开页面以后发现这么一段字符:

$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';

这道题跟上一道题大同小异,主要考察的post方法参数的提交方法,我这里用的是FirefoxMax HackBar插件,用来提交post参数十分方便,提交后即可getflag。

hackbar

FLAG

flag{bugku_get_ssseint67se}

题目4:矛盾

题目链接

http://123.206.87.240:8002/get/index1.php

题目考点

  • php代码审计
  • is_numeric() 绕过方法

解题思路

打开页面以后发现这么一段说明:

$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

要求我们提交一个num参数,该参数用is_numeric()判断类型,要求num不能是数字,且num必须等于1.

这就造成一个矛盾,该怎么绕过is_numeric()呢?看看技术大牛怎么描述这个函数。

is_numeric函数判断变量是否为数字或数字字符串,不仅检查10进制,16进制是可以。

is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空格字符会跳过空格字符判断,接着后面的判断

通过这段描述很容易构造payload: ?num=1%00,即可getflag。

FLAG

flag{bugku-789-ps-ssdf}

题目5:web3

题目链接

http://123.206.87.240:8002/web3/

题目考点

  • 查看页面源代码
  • html解码

解题思路

打开页面后不断出现弹框,阻止弹框出现以后,查看一下页面源代码,源代码中用了大量的alert,拉到最下面,发现有一串以html编码的注释,进行html解码后,可以得到flag。

<!--&#75;&#69;&#89;&#123;&#74;&#50;&#115;&#97;&#52;&#50;&#97;&#104;&#74;&#75;&#45;&#72;&#83;&#49;&#49;&#73;&#73;&#73;&#125;-->

FLAG

KEY{J2sa42ahJK-HS11III}

题目6:域名解析

题目要求

听说把 flag.baidu.com 解析到123.206.87.240 就能拿到flag

题目考点

  • Linux命令的使用
  • 域名解析

解题思路

题目要求将域名flag.baidu.com解析到IP地址123.206.87.240

这个操作使用Ubuntu会方便很多,打开Ubuntu虚拟机,在终端中输入sudo gedit etc/hosts

将此文档改成这样 :

ubuntu

然后直接访问flag.baidu.com,就可以getflag

FLAG

KEY{DSAHDSJ82HDS2211}

今日总结

今天的题目不算太难,没有碰到昨天一样卡很久的题目,有些题目很简单就不写writeup了。

所幸就是今天的题目涉及的知识面还是比较广,总结下来,就有getpost参数的提交,PhP代码审计及函数的绕过,html编码的识别,还有用ubuntu进行的域名解析。算是学到了不少的东西。

今天还看了百度开的一个基于paddlepaddle框架的深度学习入门课,可惜我一没有深度学习基础,二对python语言还不甚熟悉,听得一头雾水,一脸懵逼。这几天学习下来,感觉要学的东西越来越多,而且前路还是有一点迷茫,不知道自己能不能安排好多方面的学习。不过想那么多终究还是没什么用,还是走一步看一步吧。

最近疫情情况已经逐渐好转,我想上学都有点想疯了。2020年的开年属实有点艰难呐,希望接下来越来越好。武汉加油! 中国加油!