文件上传---条件竞争

文件上传—条件竞争

f7bdacc213aa5928284d8955fd8a839此代码逻辑先进行了文件上传,再进行了逻辑判断。那么在逻辑判断到删除不允许的文件这个过程有一个时间,导致了后门代码存在了此服务器上。虽然这个后门php文件很快很快就会被删除掉,但是我们可以利用BP这个工具不断的发送,一边不断发送,一边不断的访问。问题文件代码如下:

<?php fputs(fopen('1.php','w'),'<?php eval($_REQUEST[1]);?>');?>

这行代码的意思就是,以写的方式打开一个1.php文件,如果不存在可以自动创建,写入后面的eval函数也就是一句话木马。所以如果此文件被访问成功后会自动生成一个1.php后门。

在CPU不断执行unlink删除函数时,我们也不断的发送访问数据包和上传文件的数据包。就等着某一次对方CPU会先执行访问的指令,而不是先执行删除指令。这就是条件竞争。过不了多久,后门文件应该就会生成出来。我们再手动访问即可。

接下来我演示一个案例:

第一步:

要先确定上传过后的文件路径,和确保文件名没有被重命名。如果对方有对我们上传的文件名进行重命名的话,那就不能用我这篇文章讲的方法来做了。

先上传一个正确格式的jpg图片上去,看看文件被保存在了什么路径下。确定了就是在当前路径的upload文件夹里。

1698320092768

第二步:

抓取一个访问此路径的数据包。如下图:

1698320309574再抓取一个上传a.php文件的数据包,然后不断的发送请求。

1698320517998

第三步:

把上传文件的数据包,和访问文件的数据包都设置成这个类型:Null paloads(意思是不携带任何参数),

点击修改成Continue indefinitely(意思是不限时间,一直发送)

1698320556145

点击,右上角的 Start attack开始发送

先发送哪个后发送哪个影响不大。如下图就是开始了

1698320846772

在我上面的代码里,创建的是1.php文件,所以我们手动去访问/upload/1.php文件即可。如果访问没问题,那就是后门创建成功了。

1698321126173如下图:没有任何报错,用哥斯拉连接即可。

1698321213945​​1698321315220
所以正常的上传文件的逻辑应该是 先进性合法性的判断,再进行上传文件的操作​;而不是先做上传的操作,再进行合法性的判断。
感谢观看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
条件竞争(Race Condition)是指在多线程或多进程的环境中,多个线程或进程对共享资源进行问和操作时,由于彼此执行顺序的不确定性,导致最终结果与期望不符的情况。在上传实验(upload-labs)中,条件竞争可能会导致以下问题: 1. 文件覆盖:多个线程同时上传同一个文件,最后只有一个线程的文件被保留,其他线程上传的文件被覆盖。 2. 文件丢失:多个线程同时上传文件,由于并发操作导致某些文件上传操作未完成就被取消或覆盖,导致文件丢失。 3. 数据损坏:多个线程同时对同一个文件进行写入操作,由于并发写入导致数据被部分覆盖或乱序写入,导致文件内容损坏。 为了避免条件竞争带来的问题,可以采取以下措施: 1. 使用互斥锁(Mutex)或信号量(Semaphore)等同步机制来确保对共享资源的互斥访问,保证每次只能有一个线程或进程能够访问该资源。 2. 使用文件名加密或唯一标识符来区分不同线程或进程上传的文件,避免文件覆盖和丢失。 3. 对上传的文件进行合理的命名规则和目录结构,避免文件名冲突和混乱。 4. 对上传操作进行事务处理,保证上传操作的原子性,即要么完全成功,要么完全失败,避免数据损坏的发生。 5. 合理设置并发上传的线程或进程数量,避免过多的并发导致性能下降或竞争加剧。 通过以上措施可以减少条件竞争带来的问题,确保上传操作的正确性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值