CTF-i春秋-Web-SVN 源码泄露漏洞-Upload-线上选拔赛
2020.09.21
经验教训
- python中,post的内容是json格式;
- SVN 源码泄露漏洞,就是有个
.svn
目录,.svn/wc.db
,大量用户数据,.svn/entries
,能遍历网站目录,隐藏文件.svn/.svn-base
源代码文件副本- 获取网站目录结构,可以直接在存在.svn的目录下加/.svn/entries来获取;
- 获取源代码内容。如获取conf.php文件的内容可以在目录下加上/.svn/text-base/conf.php.svn-base来进行下载。
- 源码漏洞扫描可以发现上边的svn源码泄漏漏洞,还有其他源码漏洞可以参考这里,有什么好的漏洞扫描器??
- php的conf文件中是有一个正则的后缀名限制的,只要符合都可以被当做php文件执行。符合的后缀包括 php、php3、php4、php5、phtml、pht 等。
- 文件上传主要抓包修改三个地方,两个content-type,一个文件后缀名。
- 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
- 意思很明确,post消息头中的东西
ZmxhZ19pc19oZXJlOiBNVEkwTmpNeA==
,base64解码后为flag_is_here: MTI0NjMx
,后半截还能继续base64,124631
- 按照要求post了,但是没啥结果,所以仔细一看,我发现每一次消息头中的数字会变化
- 因为他说要快一点,那么写个脚本试试
#!/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)
- 得到结果
Path:3712901a08bb58557943ca31f3487b7d
,这看起来像是一个md5编码,解码试试?
- 解码结果是
98123hasd
,访问发现404;
- 然后试了试没解码之前的,成功进入……🙄
- 点击按钮跳转到一个类似登陆界面
- 思路很明确,得找一个前六位满足条件的验证码,但是我们的用户名该怎么填呢,看了wp学到了新知识,SVN 源码泄露漏洞。SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范。“在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。
- 访问
.svn/wc.db
,得到用户名提示,解密得:8638d5263ab0d3face193725c23ce095
,那么密码是啥呢?看答案发现密码什么都行,只要用户名和验证码正确就可以……
- 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()
- 成了,但是惦记了好像没啥反应,不过提示了
7815696ecbf1c96e6894b779456d330e.php
- 进入新链接是一个文件上传
- 找了个php上传,提示要是jpg
- 抓包修改两个content-type和文件后缀,php文件后缀修改成pht后成功获取flag
flag{b54f5bc7-cc68-443a-b7ca-49fd652fb4f6}
开心就完事了🥱
赠人玫瑰🌹手有余香
能帮到你我很高兴
您的赞👍是我前进的动力,奥力给
Thanks for watching!
赠人玫瑰🌹手有余香
能帮到你我很高兴
您的赞👍是我前进的动力,奥力给
Thanks for watching!