我在bugku 的web入门
今日入门13题
bugku-ctf 第一题:web2
复制链接,打开http://123.206.87.240:8002/web2/
打开后是一个动图,看的我眩晕
对于一个小白来说,看到这个图真的是一脸懵。。。。。。
然后想到我前天分享的,ctf web常见解题思路:直接查看页面源代码,既可以找到flag。
F12,果然
flag :KEY{Web-2-bugKssNNikls9100}
bugku-ctf 第二题:计算器
依然是打开地址
是一个计算器,59+72,填写答案验证
填写答案时发现只能输入一个数字
查看页面源码,看前段限制。F12
限制长度,把数字1改大,我们改成10;
然后再填写59+73的答案
任何前端的限制都是不安全的
得到flag{CTF-bugku-0032}
bugku-ctf 第三题:web基础$_GET
依旧是访问连接
这个确实是基础,在get请求时,传入参数形式是在url后面加 ?参数=值。多个参数用 ?参数1=值1&参数2=值1……
源代码含义:
$what=$_GET['what'];//读取参数what,把值存到变量what里
echo$what; //输出
if($what=='flag')//如果值是flag
echo 'flag{****}';//打印flag
payload:
1 |
http://123.206.87.240:8002/get/?what=flag |
flag{bugku_get_su8kej2en}
bugku-ctf 第四题:web基础$_POST
这个题可以和上一个联系起来,上一个是get请求,这个是post请求。
POST请求没办法写在url里,需要用hackbar或者burp修改,格式就是在最下面Content里写 参数1=值&参数2=值
如果用hackbar就没这么麻烦了,直接在框里填就行。
flag{bugku_get_ssseint67se}
bugku-ctf 第五题:矛盾
http://123.206.87.240:8002/get/index1.php
依旧是打开连接
$num=$_GET['num']; //获取参数num
if(!is_numeric($num))// 如果num不是数字
{
echo $num;
if($num==1) //如果num是数字1
echo 'flag{**********}'; //打印flag
}
这个要求不是数字且为1,有点矛盾是不是?其实有绕过的办法。下面num==1的判定是两个等号,这是弱类型比较,如果等号两边类型不同,会转换成相同类型再比较。与之对应的是强类型比较,用的是三个等号===,如果类型不同就直接不相等了。在弱类型比较下,当一个字符串与数字比较时,会把字符串转换成数字,具体是保留字母前的数字。例如123ab7c会转成123,ab7c会转成0.(字母前没数字就是0)
所以payload:
http://123.206.87.240:8002/get/index1.php?num=1a
flag{bugku-789-ps-ssdf}
bugku-ctf 第六题:web3
依旧是打开连接
查看页面源代码发现有一串这样的字符串
KEY{J2sa42ahJK-HS11III}
#104;JK-HS11III}
复制出来粘贴到burp自带的decoder里,在decode as 选HTML,就能解码出flag
KEY{J2sa42ahJK-HS11III}
bugku-ctf 第七题:域名解析
域名解析是指把一个域名指向一个ip,就像通讯录把姓名指向一个电话一样,可以免去记数字的麻烦。
用ip访问,抓包,把host字段直接改成域名。
得到flag:KEY{DSAHDSJ82HDS2211}
bugku-ctf 第八题:你必须让他停下
访问域名http://123.206.87.240:8002/web12/
正常在浏览器里是没办法停的,但是可以在burp里达到单步执行的效果
抓包后发到repeater,每点一次Go就会刷新,等到右边相应<img src="10.jpg"时就可以显示flag了,多刷新几次就好了
但是我并没有抓取成功。
还有一个办法就是用Burpsuite看他的每个数据包:
flag{dummy_game_1s_s0_popular}
bugku-ctf 第九题:变量1
http://123.206.87.240:8004/index1.php
打开后得到代码如下
这是一个代码审计的题目
需要传入有个args参数,通过eval来执行var_dump来打印一些东西。但是它打印的是$$args而不是$args。
对‘$$args'的分析:
example:
1 <?php
2 $plan = 'Binary'; //变量plan的值为'Binary'的字符串
3 $Binary = 'handsome'; //再把变量plan的值设为一个变量的变量名,而这个变量的值为'handsome'
4 echo $$plan.'</br>'; //打印$$plan,其实就相当于打印$[$plan]=$[Binary]='handsome'
5 echo $Binary.'</br>'; //打印$Binary,其结果为'handsome'和上一行的打印结果一样
有了这个例子,就可以操作了。传入的是args参数,而传入的参数将会被当作一个变量名并打印它的变量值。比如传入一个x。则有$args=x,而执行var_dump($$args)时相当于执行var_dump($x),而此时程序里没有x这个变量,所以就会返回一个NULL值显示在浏览器上,这变量没有意义。所以传入的参数得是一个有意义的变量,PHP恰好有这类似的东西,如$GLOBALS,$_GET,$POST...,$GLOBALS这个变量存储了所有的变量。所以传入参数‘args=GLOBALS',var_dump()将打印$GLOBALS,flag就在返回的结果中。
http://123.206.87.240:8004/index1.php?args=GLOBALS
flag{92853051ab894a64f7865cf3c2128b34}
bugku-ctf 第十题:web5
访问http://123.206.87.240:8002/web5/
看一看源代码吧,有一行非常奇怪的由+[]()!组成的代码,查了一下,这种东西似乎叫做jspfuck(呼应题目)
JSFuck(或为了避讳脏话写作 JSF*ck )是一种深奥的 JavaScript编程风格。以这种风格写成的代码中仅使用 [
、]
、(
、)
、!
和 +
六种字符。此编程风格的名字派生自仅使用较少符号写代码的Brainfuck语言。与其他深奥的编程语言不同,以JSFuck风格写出的代码不需要另外的编译器或解释器来执行,无论浏览器或JavaScript引擎中的原生 JavaScript 解释器皆可直接运行。鉴于JavaScript 是弱类型语言,编写者可以用数量有限的字符重写 JavaScript 中的所有功能,且可以用这种方式执行任何类型的表达式。
简单地说,就是有人不想让自己的代码被别人认出来,用6种字符改造了自己的js代码,浏览器居然还能识别(惊了)
所以说直接把这段奇怪的代码扔进chrome控制台,就可以得到flag了(记得要全变成大写
ctf{whatfk}
字母大写:CTF{WHATFK}
bugku-ctf 第十一题:头等舱
访问http://123.206.87.240:9009/hd.php
打开链接,什么都没有,真的是什么都没有
查看源代码也是什么也没有
那就抓包看看
也没有,emm
再回去看看题目,头等舱,头等舱,头等舱,响应头???!!!
放到Repeater里面,Go以下,Response里面已经出来flag了
flag{Bugku_k8_23s_istra}
bugku-ctf 第十二题:网站被黑
http://123.206.87.240:8002/webshell/
打开链接是一个黑页,链接后面加index.php判断是PHP,而题目提示实战中经常遇到,那就开御剑扫描后台吧
扫描出shell.php,打开链接是一个webshell,尝试admin等弱密码无效后
开burp进行爆破,这里选择Simple list,字典选择burp自带的Passwords
成功爆破,密码就是hack啦
登录webshell,flag出现
flag{hack_bug_ku035}
bugku-ctf 第十三题:管理员系统
http://123.206.31.85:1003/
登陆界面
习惯性先看看页面源码吧,发现一段Base64,解码得test123
因为是管理员,账号必然是admin,密码解密test123.
登陆下提示ip已经被限制
看到ip被ban,就想在网上查一下怎样伪造ip地址,然后在网上查到了X-FORWARDED-FOR:127.0.0.1
输入账号密码admin test123,然后Burpsuite抓包
在数据包中加入X-Forwarded-For: 127.0.0.1,得到flag
85ff2ee4171396724bae20c0bd851f6
flag{85ff2ee4171396724bae20c0bd851f6b}
本文始发于微信公众号(LemonSec):【CTF web入门第三篇】我在bugku 的web入门
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论