Bugku Web Write up


title: Bugku Web Write up
date: 2019-04-07 11:07:19
tags:
- Bugku
- Web
categories:
- CTF
- Bugku
- Web


Bugku平台的Web题的Write up,差不多刷了一遍,总结一下。

前言

进度稍微延迟了这么一点,本来是想着前天刷完,昨天写Blog。结果碰上最后几个注入题,有点自闭,多搞了一点时间,导致进度一拖再拖,昨天又玩了一下午游戏无所作为。想着不能再拖了,必须今天写掉,不然过几天忘干净了再写就没意义了。所以稍微少几个题,以后再写吧


直接从题目开写吧,遇到相应知识再拓展。

基础题

0x01 Web2

点进去一堆滑稽js脚本


Bugku Web Write up_第1张图片
image

结合题目描述:“听说聪明的人都能找到答案” ,直接按F12。ctrl+F搜索flag,找到。

0x02 计算器

点进题目,发现标题是随机数字运算验证码。本来还以为是要利用Session,写python脚本提交。最后居然只是前端输入框长度被限制。
所以打开F12,找到输入框前端代码,更改输入框最大长度,再输入表达式计算值,弹出flag


Bugku Web Write up_第2张图片
image

0x03 web基础$_GET

点进去看到题目给了源码。

Bugku Web Write up_第3张图片
image

只需构造get请求传入what=flag即可。payload:http://123.206.87.240:8002/get/?what=flag
Bugku Web Write up_第4张图片
image

0x04 web基础$_POST

点进去发现题目源码。


Bugku Web Write up_第5张图片
image

与上题类似,不过是GET请求变成了POST,使用火狐插件hackbar或者其他类似插件构造post请求即可。


Bugku Web Write up_第6张图片
image

这里注意,不要直接用burp将GET改POST,亲测无效。如下图示
  1. 不用hackbar正常的GET请求


    Bugku Web Write up_第7张图片
    image
  2. 将GET直接修改成POST提交数据无效
    Bugku Web Write up_第8张图片
    image

    这里据我个人分析,是因为直接改成POST后,服务器不知道接受的数据是什么类型。所以得不到flag,于是在文件头中加上Content-Type,得出了flag,证明猜测是对的
  3. 文件头加上Content-Type


    Bugku Web Write up_第9张图片
    image

小小总结

以后需要改POST的还是直接用hackbar吧,233~

0x05 矛盾

点击题目后,看到源码

Bugku Web Write up_第10张图片
image

分析可知,需要GET传入num为数字1才能输出flag,但是如果输入纯数字的话,直接不满足if条件,进不去if语句里面,就输出不了flag。
但是这里判断num等于1,用的是==,而不是===,就用到了php弱类型比较,即 1 == 1miracle是为true的。弱类型比较自行参照搜索引擎。
于是可以构造payload:http://123.206.87.240:8002/get/index1.php?num=1miracle778
Bugku Web Write up_第11张图片
image

0x06 web3

题目描述为: flag就在这里快来找找吧
点击题目去,弹了一个框说flag就在这里,来找找吧


Bugku Web Write up_第12张图片
image

一开始还没想到flag藏的具体位置,于是只能F12,看一下源码及http文件头。结果发现弹框的那段js代码,如下图,原来"在这里"的意思是说在js代码里。


Bugku Web Write up_第13张图片
image

直接找到flag:
``

实体解码即可得flag:KEY{J2sa42ahJK-HS11III}

0x07 你必须让他停下

点击题目去,如下图,页面一直在刷新,图片也是不停更换


Bugku Web Write up_第14张图片
image

按照图中页面所述,本来以为要停在弹出一个熊猫的图片的地方,结果在页面出等了几秒,发现有些图片根本不存在,只有这一张2333~
于是打开burp,看到访问/里,jpg的名字随机更换,而且页面响应的地方有一个flag is here,如下图划线处。


Bugku Web Write up_第15张图片
image

所以可以使用repeat一直按Go重放,直到出现flag为止。
Bugku Web Write up_第16张图片
image

0x08 文件包含

好像题目链接挂了。。。

0x09 变量1

点击题目,看到源码


image

分析一下,可以看到var_dump那里出现$$,存在变量覆盖,前面正则对args进行了过滤,只能输入[a-z][0-9][A-Z]。
因为存在变量覆盖,所以我们传入args=GLOBALS,即可达到输出$GLOBALS数组的目的,GLOBALS为php的超全局变量,一个包含了全部变量的全局组合数组。


Bugku Web Write up_第17张图片
image

0x10 web5

题目描述:JSPFUCK??????答案格式CTF{**}
点进题目并查看源码,发现一堆js混淆过的jsfuck。


Bugku Web Write up_第18张图片
image

复制下来直接输入F12控制台即可得到flag,再将ctf改为大写即可


Bugku Web Write up_第19张图片
image

0x11 头等舱

点进题目如图,源代码里也找不到啥东西


Bugku Web Write up_第20张图片
image

结合题目:头等舱 猜测flag藏在http头里
于是直接在响应的Headers里面找到


Bugku Web Write up_第21张图片
image

初级题

0x12 网站被黑

点进题目去,是一个如下图示界面,源代码、HTTP头都没找到什么东西

Bugku Web Write up_第22张图片
image

结合题目意思,网站被黑,说不定留下了什么后门。
于是用御剑(或者其他工具)扫一下后台,发现shell.php
Bugku Web Write up_第23张图片
image

访问一下,看到一个登录框,随便输个密码,出现如图所警告
Bugku Web Write up_第24张图片
image

到这一步的话,没有其他提示,只能先通过万能密码看看能不能绕过登录,不能的话再暴力破解
用万能密码绕过失败,尝试Burp暴力破解,Burp暴力破解具体操作自行百度,或者参考我之前发的Dvwa暴力破解
暴力破解选择simple list里的password字典进行爆破
Bugku Web Write up_第25张图片
image

得到密码为hack
Bugku Web Write up_第26张图片
image

输入密码即可得flag

0x13 管理员系统

点进题目如图示,使用万能密码测试登录,提示说IP不允许访问,联系本地管理员登录

image

于是添加XXF(X-Forwarded-For)=127.0.0.1进行登录尝试,提示说密码不对
Bugku Web Write up_第27张图片
image

从上面尝试知道,万能密码不管用,所以密码可能藏在某个地方(也是凑巧发现233~)
查看源代码,发现有一行诡异的base64注释,解码可得内容为test123
Bugku Web Write up_第28张图片
image

于是用admin&test123进行登录,同时添加XXF头,得到flag
Bugku Web Write up_第29张图片
image

0x14 web4

题目如图示

Bugku Web Write up_第30张图片
image

按提示查看源代码,如图发现一段被url编码的js脚本
Bugku Web Write up_第31张图片
image

将这段代码进行解码,如图示
Bugku Web Write up_第32张图片
image

通过阅读源码分析,只要在输入框输入67d709b2b54aa2aa648cf6e87a7114f1即可得到flag
Bugku Web Write up_第33张图片
image

0x15 flag在index里

题目如图示

image

点击链接后跳转到如图示地址
Bugku Web Write up_第34张图片
image

很明显存在文件包含,结合题目标题 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
Bugku Web Write up_第35张图片
image

0x16 输入密码查看flag

题目如图

Bugku Web Write up_第36张图片
image

很明显,用Burp暴力破解,得到密码为13579
Bugku Web Write up_第37张图片
image

输入得flag:flag{bugku-baopo-hah}

0x17 点击一百万次

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


Bugku Web Write up_第38张图片
image

显然,不可能为了一个flag浪费一个鼠标233~
结合题目给的hints,于是查看前端关于点击的js代码


Bugku Web Write up_第39张图片
image

分析可知,点击一次clicks加1,当clicks大于100万的时候,提交一个表单,value等于clicks的值,所以我们直接POST提交clicks即可。
Bugku Web Write up_第40张图片
image

0x18 备份是个好习惯

点击题目如图示,出现一段hash编码

image

乍一看还以为是md5,算了下长度,发现是64位,但是前32位跟后32位是相同的。感觉有点奇怪,于是把前32位md5解密一下,发现是个空密码。所以这段编码估计是没有什么用了。那应该怎么做呢?
题目描述是备份是个好习惯猜测可能是备份文件泄露漏洞。于是访问index.php.bak,可以下载。于是打开备份文件查看源码
Bugku Web Write up_第41张图片
image

分析一下,这里代码意思是,第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

Bugku Web Write up_第42张图片
image

payload2: http://123.206.87.240:8002/web16/index.php?kekeyy1[]=1&kekeyy2[]=12
Bugku Web Write up_第43张图片
image

0x19 成绩单

打开题目链接后,题目如图示


Bugku Web Write up_第44张图片
image

简单的输入 1'、1'#测试后,发现存在sql注入漏洞,于是开始进行注入

  1. 用order by测试出有4个字段


    Bugku Web Write up_第45张图片
    image
  2. union查看一下哪些字段可显示


    Bugku Web Write up_第46张图片
    image
  3. 爆表


    Bugku Web Write up_第47张图片
    image
  4. 爆fl4g表的列


    Bugku Web Write up_第48张图片
    image
  5. 爆flag值


    Bugku Web Write up_第49张图片
    image

入门题

0x20 秋名山老司机

点进链接,题目如图示


image

请在两秒内计算车速,很明显要用到python脚本。但计算出车速来应该怎么提交呢?于是多刷新几遍,发现题目偶尔会变成下图示,里面讲到了通过post提交参数value


image

于是写一个python脚本
#!/usr/bin/env python3
# coding=UTF-8
'''
@Author: Miracle778
@LastEditors: Miracle778
@Description: file content
@Date: 2019-04-01 10:24:57
@LastEditTime: 2019-04-01 12:59:49
'''
import requests
from bs4 import BeautifulSoup

s = requests.Session()
r = s.get('http://123.206.87.240:8002/qiumingshan/')
soup = BeautifulSoup(r.text,'html.parser')
exp = soup.find_all('div')[0].string[:-3]
# print(exp)
value = {'value':eval(exp)}
r = s.post('http://123.206.87.240:8002/qiumingshan/',data=value)
print(r.text)

利用bs4提取表达式并计算。然后使用POST提交
运行脚本即可得flag

0x21 速度要快

题目点进去如图示


image

没找到别的信息。
用burp看一下http头部跟页面源码,发现下图示信息。


Bugku Web Write up_第50张图片
image

上图注释信息说明需要POST提交参数margin的值,margin的值估计就是头部中的flag。
将头部中的flag base64解密一下得到如下信息
image

于是进行POST提交 margin=NDk4MDQ2,用火狐hackbar提交后,提示说不够快


Bugku Web Write up_第51张图片
image

既然手工不够快,那就用python跑一下吧。
#!/usr/bin/env python
# coding=UTF-8
'''
@Author: Miracle778
@LastEditors: Miracle778
@Description: file content
@Date: 2019-04-01 13:06:09
@LastEditTime: 2019-04-04 20:48:35
'''
import requests
import base64

s = requests.Session()
r = s.get('http://123.206.87.240:8002/web6/')
flag_header = r.headers['flag'].encode('utf-8')
flag_message = base64.b64decode(flag_header).decode('utf-8')
tmp_list = flag_message.split(': ')
margin = base64.b64decode(tmp_list[-1].encode('utf-8')).decode()
data = {'margin':margin}

r = s.post("http://123.206.87.240:8002/web6/",data=data)
print(r.text)

跑一下,出来结果


image

0x22 cookies欺骗

打开题目链接页面如下


Bugku Web Write up_第52张图片
image

页面一段字符,看上去也不像什么编码。于是找http头部看看有没有啥提示。但找了一圈并没有发现。
但是看到访问url时,发现有的猫腻,url两个参数,一个line、另一个filename,filename的值还用base64加密了一手。
于是将filename的值解密一下看看,解密结果为keys.txt。
直接访问keys.txt看一下。与前面内容一样


Bugku Web Write up_第53张图片
image

所以可以得出结论,前面index.php的两个参数line和filename可以用来读取网页源文件,于是将index.php用base64加密,line从0开始,将index.php一行行读出来。避免繁琐,可以写个python脚本。
#!/usr/bin/env python
# coding=UTF-8
'''
@Author: Miracle778
@LastEditors: Miracle778
@Description: 导出生成index.php
@Date: 2019-04-01 13:37:02
@LastEditTime: 2019-04-01 14:01:33
'''
import requests

url = 'http://123.206.87.240:8002/web11/index.php'

# url.format(2)
data = {'filename':'aW5kZXgucGhw'}
res = ''
# r = requests.get(url+'?line=100',params=data)
for i in range(100):
    data['line'] = i
    r = requests.get(url,params=data)
    if r.text == '':
        break
    res += r.text

f = open('./Bugku/Web/cookies欺骗/index.php','w')
f.write(res)
f.close

得到index.php源码


Bugku Web Write up_第54张图片
image

由index.php源码可知,只能通过filename读取file_list数组里的文件,而如果想读取keys.php的话,就需要构造cookie使得$_COOKIE['margin']=='margin'成立。
于是再写一个python脚本,添加上Cookie值,将keys.php再导出来

#!/usr/bin/env python
# coding=UTF-8
'''
@Author: Miracle778
@LastEditors: Miracle778
@Description: 导出keys.php
@Date: 2019-04-01 14:01:56
@LastEditTime: 2019-04-01 14:11:45
'''
import requests

url = 'http://123.206.87.240:8002/web11/index.php'
# 设置cookie不通过header
# header = {'Cookie':{"margin":"margin"}}
cookie = {'margin':'margin'}
data = {'filename':'a2V5cy5waHA='}
res = ''
for i in range(100):
    data['line'] = i
    r = requests.get(url,params=data,cookies=cookie)
    if r.text == '':
        break
    res += r.text
# print(res)
f = open('./Bugku/Web/cookies欺骗/keys.php','w')
f.write(res)
f.close

keys.php的源码如下图


Bugku Web Write up_第55张图片
image

得到flag

0x23 never give up

点进题目去,如图示


Bugku Web Write up_第56张图片
image

流程走一遍,查看源码及http头,在源码处发现提示:1p.html


image

访问一下,发现直接被重定向了。
于是只好查看1p.html的源代码,发现一段编码
Bugku Web Write up_第57张图片
image

解密后得到下面代码

var Words =" 
" 
function OutWord()
{
var NewWords;
NewWords = unescape(Words);
document.write(NewWords);
} 
OutWord();

其余代码无关紧要,作用就是进行重定向。真正有用的是

你可能感兴趣的:(Bugku Web Write up)