Misc
神秘文件
1.根据提示信息,均需要从ppt中提取信息
2.在ppt的属性中发现一串密文和key,解密之后得到第一部分,根据提示Bifid chipher,为双歧密码解密,使用Bifid Cipher Decode解码
3.在第五张幻灯片,发现有一串编码,base64之后得到第六部分
4.第三张幻灯片发现base64编码,解码之后得到flag
5.在第五张幻灯片的批注下找到base64,解码之后得到第五部分
6.在幻灯片的母版中发现加密的内容,并且需要溢出B,b,1,3,解码之后得到第八部分
7.在第四张幻灯片中选择窗口,发现加密内容,解码之后得到第七部分
8.将ppt改为zip之后,在照片的文件夹中发现图片有加密的内容,解密之后得到第九部分
9.在ppt的压缩包中发现doc文件打开之后,发现有加密的内容,解密(根据提示凯撒密码位移为10,且是base64编码)之后得到第二部分
10. 将压缩包中的.bin文件放在010中打开,发现加密内容
11.使用base64解码之后,再使用RC4解密,最后再base64,得到第三部分
Web
Simple_PHP
1.代码审计
<?php
ini_set('open_basedir', '/var/www/html/'); //这行代码使用 ini_set 函数设置 PHP 的 open_basedir 配置项。open_basedir 是一个安全相关的配置项,用于限制 PHP 可以访问的目录范围。这里将其设置为 /var/www/html/,意味着 PHP 只能在这个目录及其子目录中执行文件操作。
error_reporting(0);
if(isset($_POST['cmd'])){
$cmd = escapeshellcmd($_POST['cmd']); //代码检查是否有名为 cmd 的 POST 参数。如果有,则使用 escapeshellcmd 函数处理该参数,该函数会尝试转义 shell 命令中的特殊字符,使其更加安全。
if(!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|ping|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|base64|date|bash|env|\?|wget|\'|\"|id|whoami/i', $cmd)) {
system($cmd); //这段代码首先使用正则表达式来检查 $cmd 是否包含任何可能危险或敏感的命令。如果 $cmd 不包含这些命令,那么代码将使用 system 函数执行这个命令。system 函数用于执行外部程序,并输出其标准输出。
}
}
show_source(__FILE__);
?>
绕过知识点:
open_basedir函数的绕过:
open_basedir对命令执行没有限制
假如没有进行过滤 那我们就可以通过system函数直接执行
资料:绕过 open_basedir_glob 绕过basedir-CSDN博客
escapeshellcmd()函数:
escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。
资料:escapeshellarg参数绕过和注入的问题_escapeshellcmd-CSDN博客
编码绕过:
如果命令注入的网站过滤了某些分割符,可以将分隔符编码后(url编码,base64,十六进制编码等)绕过
资料:如何实现CTF中命令执行绕过方法 - 网络管理 - 亿速云
方法一
无参数+数据库连接查询
1.使用php -r phpinfo();命令查看相关信息,phpinfo是一个服务器的运行指令,可以显示php服务器的配置信息。观察代码并没有发现禁用php,尝试用php -r 去执行php命令
php -r:执行一段php代码,如 php -r "echo 'hello world';"
2.因为linux好多指令被禁用了,考虑16进制转2进制,同样eval函数也没有被禁止,那么既能够不被转义,又能不被匹配,还是命令执行的,所以想到使用十六进制编码进行绕过
知识点1:
hex2bin()函数是PHP中的内置函数。 hex2bin()函数用于解码十六进制编码的二进制字符串。也就是说,它将以十六进制表示编码的二进制字符串解码回二进制表示。
hex2bin() 函数把十六进制值的字符串转换为 ASCII 字符。
注意:此函数的目的不是将十六进制数转换为二进制数,为此我们可以使用PHP中的 base_convert()函数。此函数仅用于解码十六进制编码的二进制字符串。
知识点2:
在十六进制中,只存在数字和字母,不会被转义,还能进制转换后绕过正则;
3.按照正常逻辑,查看index.php文件,发现什么都没有,再查看根目录,发现根目录下没有flag
4.想到读取/etc/passwd文件,发现有mysql用户,其中/root表示用户目录,/bin/bash表示该用户登录linux时用的shell。
/etc/passwd 是linux系统对用户进行识别的一个文件,系统中的所有用户都要在这里登记.当用户登录到linux系统时,linux会读取这个文件来确认用户的身份./etc/passwd文件中的每一行都表示一个用户信息;一行有7个段位;每个段位用:号分割;
5.想到flag在数据库里面,进行查找
相关命令:echo `mysql -u root -p'root' -e 'use PHP_CMS;show databases;'`;
这个命令是在命令行中执行的,它的作用是使用
mysql
命令连接到MySQL数据库,并执行查询语句来显示PHP_CMS
数据库中的所有数据库,使用反引号`来引用命令的输出。
6.使用echo `mysql -u root -p'root' -e 'use PHP_CMS;show tables;'`;来查表
7.使用来查字段 echo `mysql -u root -p'root' -e 'use PHP_CMS;select * from F1ag_Se3Re7;'`; 得到flag