web55
不能出现英文字符
方法1
方法2
bzip2的使用
bzip2是linux下面的压缩文件的命令
我们可以通过该命令压缩flag.php 然后进行下载
payload:?c=/???/???/???2 ???.???
也就是/usr/bin/bzip2 flag.php
然后访问/flag.php.bz2进行下载获得flag.php
方法3
发现 . 没有被过滤,.(点)的用法,就是相当于source可以执行命令
可以通过post一个文件(文件里面的sh命令),在上传的过程中,通过.(点)去执行执行这个文件。(形成了条件竞争)。一般来说这个文件在linux下面保存在/tmp/php???一般后面的6个字符是随机生成的有大小写。(可以通过linux的匹配符去匹配)
注意:通过.去执行sh命令不需要有执行权限需要构造一个post上传文件的数据包。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>POST数据包POC</title> </head> <body> <form action="http://46230c96-8291-44b8-a58c-c133ec248231.chall.ctf.show/" method="post" enctype="multipart/form-data"> <!--链接是当前打开的题目链接--> <label for="file">文件名:</label> <input type="file" name="file" id="file"><br> <input type="submit" name="submit" value="提交"> </form> </body> </html>
然后抓包如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYz5U49N-1630725103224)(F:_笔记\mdpic\3.CTFshow刷题日记-WEB-命令执行\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MDkxNDY0,size_16,color_FFFFFF,t_70%23pic_center.png)]
构造poc执行命令
?c=.+/???/???[@-[]
注:后面的[@-[]是linux下面的匹配符,是进行匹配的大写字母。
然后在上传文件内容添加sh命令
#!/bin/sh ls
直接读flag
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwCQLsgj-1630725103229)(F:_笔记\mdpic\3.CTFshow刷题日记-WEB-命令执行\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2MDkxNDY0,size_16,color_FFFFFF,t_70%23pic_center.png)]
总结
这道题主要是利用 上传文件到临时命令去通过.(点)去执行该上传文件的内容
web56
无字母数字rce,使用上题的第三种方法即可
需要多刷新几次
web57
先上payload
- ${_} 上次命令执行的结果
- $(()) 进行运算
- (("")) == 0
对((“”))=0,对((“”))取反即(( ((“”))))为-1,37个-1相减得到-37,再取反得到36
其他linux shell绕过
- base64
- Hex绕过
- 拼接
- 内联执行
- 反弹shell
类型四:
PHP代码执行,突破禁用函数,绕过disable_functions
web58
使用system发现被禁止了
执行命令的函数
不行就直接读取文件,首先获取文件路径
函数名 | 功能 |
scandir() | 扫目录用的,返回数组 |
getcwd() | 返回当前目录 |
glob() | 包含匹配指定模式的文件名或目录的数组 |
dir() | 返回 Directory 类的实例 |
opendir | 打开目录句柄 |
php读文件的函数有
通过fopen读取文件内容
payload
web59
index.php都是一样的
payload
web60
payload
注意:
曲线救国方法
web61-65
payload
web66
首先获取文件路径
payload
web67
print_r被ban了
web68-70
扫目录
读文件
web71
下载附件
payload
web72
hint
这里的?>是为了闭合前面<?php
如:
执行效果
再使用uaf脚本进行命令执行
web73-74
首先去找flag所在位置
payload
web75-76
第一步扫描目录
利用mysql load_file读文件
web77
第一遍扫描目录
然后发现下面有一个readflag肯定是要调用这个,不会做,看了这个FFI拓展挺神奇的,说谁php7.4版本以上才有,大家想了解可以看看下面的参考链接