继上一篇总结:
CTF web题型解题技巧-第四课 web总结
之后是我在bugku练习的解题过程。
以下内容大多是我在Bugku自己操作练习,有部分来源于网络,我只是在前人的基础上,对CET WEB进行一个总结;
-----------------------------------------------------------------------
-----------------------------------------------------------------------
今日入门13题
复制链接,打开http://123.206.87.240:8002/web2/
打开后是一个动图,看的我眩晕
对于一个小白来说,看到这个图真的是一脸懵。。。。。。
然后想到我前天分享的,ctf web常见解题思路:直接查看页面源代码,既可以找到flag。
F12,果然
flag :KEY{Web-2-bugKssNNikls9100}
依然是打开地址
是一个计算器,59+72,填写答案验证
填写答案时发现只能输入一个数字
查看页面源码,看前段限制。F12
限制长度,把数字1改大,我们改成10;
然后再填写59+73的答案
任何前端的限制都是不安全的
得到flag{CTF-bugku-0032}
依旧是访问连接
这个确实是基础,在get请求时,传入参数形式是在url后面加 ?参数=值。多个参数用 ?参数1=值1&参数2=值1……
源代码含义:
$what=$_GET['what'];//读取参数what,把值存到变量what里
echo$what; //输出
if($what=='flag')//如果值是flag
echo 'flag{****}';//打印flag
payload:
flag{bugku_get_su8kej2en}
这个题可以和上一个联系起来,上一个是get请求,这个是post请求。
POST请求没办法写在url里,需要用hackbar或者burp修改,格式就是在最下面Content里写 参数1=值&参数2=值
如果用hackbar就没这么麻烦了,直接在框里填就行。
flag{bugku_get_ssseint67se}
http://123.206.87.240:8002/get/index1.php
依旧是打开连接
这个要求不是数字且为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}
依旧是打开连接
查看页面源代码发现有一串这样的字符串
KEY{J2sa42ahJK-HS11III}
#104;JK-HS11III}
复制出来粘贴到burp自带的decoder里,在decode as 选HTML,就能解码出flag
KEY{J2sa42ahJK-HS11III}
域名解析是指把一个域名指向一个ip,就像通讯录把姓名指向一个电话一样,可以免去记数字的麻烦。
用ip访问,抓包,把host字段直接改成域名。
得到flag:KEY{DSAHDSJ82HDS2211}
访问域名http://123.206.87.240:8002/web12/
正常在浏览器里是没办法停的,但是可以在burp里达到单步执行的效果
抓包后发到repeater,每点一次Go就会刷新,等到右边相应<img src="10.jpg"时就可以显示flag了,多刷新几次就好了
但是我并没有抓取成功。
还有一个办法就是用Burpsuite看他的每个数据包:
flag{dummy_game_1s_s0_popular}
http://123.206.87.240:8004/index1.php
打开后得到代码如下
这是一个代码审计的题目
需要传入有个args参数,通过eval来执行var_dump来打印一些东西。但是它打印的是$$args而不是$args。
对‘$$args'的分析:
有了这个例子,就可以操作了。传入的是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}
访问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}
访问http://123.206.87.240:9009/hd.php
打开链接,什么都没有,真的是什么都没有
查看源代码也是什么也没有
那就抓包看看
也没有,emm
再回去看看题目,头等舱,头等舱,头等舱,响应头???!!!
放到Repeater里面,Go以下,Response里面已经出来flag了
flag{Bugku_k8_23s_istra}
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}
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}
访问题目中链接
随便输入 111 点击Submit
听他的,看看源代码吧
那么明显的两行
进行 unescape解密,得到
function checkSubmit(){vara=document.getElementById("password");if("undefined"!=typeofa){if("67d709b2b
aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQues
解码出来的东西,你可能还是看不懂,那我们在回到源码中,源码中有这么一句:eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));这句代码的含义是:p1串的编码+‘%35%34%61%61%32’的编码+p2串的编码。这是一个拼接的字符串,解码之后,拼接完成,回到网页中提交,网页直接爆出了flag。
67d709b2b 54aa2 aa648cf6e87a7114f1
拼接完成,回到网页中提交,网页直接爆出了flag:67d709b2b54aa2aa648cf6e87a7114f1
KEY{J22JK-HS11}
访问链接
点击后
注意到url地址 http://120.24.86.145:8005/post/index.php?file=show.php
这是一个典型的文件包含漏洞,(file关键字是提示,其实也是CTF的套路)。
这里用到了php的封装协议:http://php.net/manual/zh/wrappers.php.php
具体怎么用呢,先说结果:
http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
然后将得到的字符串base64解码得到index的源码:
得到flag:flag{edulcni_elif_lacol_si_siht}
***具体说说
file=php://filter/read=convert.base64-encode/resource=index.php的含义
首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。
通过传递这个参数可以得到index.php的源码,下面说说为什么,看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。
而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。
如果不进行base64编码传入,就会直接执行,而flag的信息在注释中,是得不到的。
我们再看一下源码中 存在对 ../ tp data input 的过滤,其实这都是php://协议中的其他方法,都可以结合文件包含漏洞执行,具体可以百度一下。
http://123.206.87.240:8002/baopo/
输入密码提示不正确,5位数,那就burp暴力破解
paobo 很明显的提示
burpsuite爆破截图没留,直接爆破出的答案是13579
输入后得出flag
flag{bugku-baopo-hah}
题目如下:
每次点击goal的分子会改变,右键查看源代码
主要查看js部分
抓包看一下,其实每次点击只是修改了click的值,并没有跳到新的网页
将头部get修改为post,加上click参数发过去
flag{Not_C00kl3Cl1ck3r}
通过提示 关键词 ’备份‘ 可以联想到 → 备份文件
备份文件一般都是.bak结尾的
用工具扫一下
这里推荐大佬的工具 yihangwang/SourceLeakHacker
可以看到index.php.bak
访问一下试试
有一个bak备份文件 ,不多解释了,下载后打开
11行 strstr 获得URI从'?'往后(包括'?')的字符串 stristr 同strstr用法一样,不区分大小写
12行 substr 去掉'?'
13行 str_replace 把字符串中的'key'替换为空可以使用类似这样的语句:kkeyey 处理
14行 parse_str 把字符串解析到变量中
end 最后需要得到key1,key2不相等而二者md5相等,可以利用php弱类型比较绕过
php弱类
https://www.cnblogs.com/Mrsm1th/p/6745532.html
https://cloud.tencent.com/developer/article/1046701
这里稍微提一下php弱类#
首先,我们一般说php变量类型8种
标量类型:布尔boolean,整形integer,浮点float,字符string
复杂类型:数组array,对象object
特殊类型:资源resource,空null
与别的语言不同,php是一个弱类型的语言
==表示的是等于 ,只要数值等于就可以了,类型无所谓的
就是说上面列举的那些类型 之间相互比较 只看值就行了 不用看类型
php弱类型语言总的类型判断#
php一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再进行比较。
PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0。
那么回过头来看题目(-_-)
这一题需要构造的是 $key1 == $key2#
构造的要求是md5值相同,但未计算md5的值不同的绕过。
那我们就来构造 O(∩_∩)O
介绍一批md5开头是0e的字符串,
0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,
0的多少次方还是0。md5('240610708') == md5('QNKCDZO')成功绕过!
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
构造payload:?kkeyey1=QNKCDZO&kkeyey2=240610708
页面得到Bugku{OH_YOU_FIND_MY_MOMY}
本文作者:Lemon
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/137663.html