浅析CTF绕过字符数字构造shell

访客3年前黑客资讯861

前言

在CTF中,虽然有很多文章有这方面的资料,但是相对来说比较零散,这里主要把自己学习和打ctf遇到的一些绕过字符数字构造shell梳理一下。

无字母数字webshell简单来说就是payload中不能出现字母,数字(有些题目还有其他一些过滤),通过异或取反等 *** 取得flag。

本文涉及知识点实操练习-使用base64与deflate对webshell编码

https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182014050616024000001&pk_campaign=weixin-wemedia

测试源码

异或绕过

异或的符号是,是一种运算符。

异或脚本

运行该脚本我们知道

通过这种 *** 构造一个phpinfo()函数


取反绕过

取反的符号是,也是一种运算符。在数值的二进制表示方式上,将0变为1,将1变为0。

直接看如何构造phpinfo()


可以看出,自己对phpinfo取反,会产生一些不可见字符,可对phpinfo取反后再进行url编码。

取反脚本


构造assert字符

之一种 ***


第二种 ***

脚本

这个脚本可以将“assert”变成两个字符串异或的结果,通过更改shell的值可以构造出我们想要的字符串。为了便于表示,生成字符串的范围为33-126(可见字符)。



第三种 ***


PHP5和7的区别

  • PHP5中,assert()是一个函数,我们可以用=assert;_()这样的形式来执行代码。但在PHP7中,assert()变成了一个和eval()一样的语言结构,不再支持上面那种调用 *** 。但PHP7.0.12下还能这样调用。





PHP5中,是不支持($a)()这种调用 *** 的,但在PHP7中支持这种调用 *** ,因此支持这么写('phpinfo')();






过滤了_

分析下这个Payload,?>闭合了eval自带的<?标签。接下来使用了短标签。{}包含的PHP代码可以被执行,~"%a0%b8%ba%ab"为"_GET",通过反引号进行shell命令执行。最后我们只要GET传参%a0即可执行命令。


过滤了$

PHP7

在PHP7中,我们可以使用($a)()这种 *** 来执行命令。所以可以用取反构造payload执行命令。(~%8F%97%8F%96%91%99%90)();执行phpinfo函数,之一个括号中可以是任意的表达式。但是这里不能用assert()来执行函数,因为php7不支持assert()函数。

PHP5

在PHP5中不再支持($a)() *** 来调用函数,在膜拜P神的无字母数字webshell之提高篇后,有了新的启发。如何在无字母,数字,$的系统命令下getshell?我们利用在Linux shell下两个知识点

1,shell下可以利用来执行任意脚本

2,Linux文件名支持glob通配符代替


从图可以看出,我们可以成功用+文件名来执行文件,但是当使用通配符来执行文件时,系统会执行匹配到的之一个文件。

在这两个条件下我们可以想到,如果我们可以上传一个文件,用来执行这个文件就可以成功getshell。

那么我们怎么上传文件呢?上传文件成功后文件又保存在哪里?怎么匹配执行?

首先我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是,文件名最后6个字符是随机的大小写字母。

现在我们可以利用glob通配符匹配该文件,我们知道

可以代替0个及以上任意文件

可以代表1个任意字符

可以用来判断这个位置的字符是不是a

可以用来限制范围

通过ascii码表我们知道,可见大写字母与之间,所以我们可以利用来表示大写字母。

综上,我们可以利用来匹配

实战演练

通过编写脚本看看哪些可见字符没有被过滤


首先,我们应该上传写一个表单上传

提交一个1.txt的文件,这个文件会被保存在这个临时文件夹下,我们执行这个临时文件夹就是执行1.txt文件里面的内容。

我们在把1.txt中写入,并把执行完文件返回的内容(即执行ls返回的内容)保存在目录下的abc文件中

是Apache的默认路径,我们也可以直接写


接着在ip地址后添加,可以看到成功返回执行1.txt后的内容。


直接


我们还可以上传一个小马文件

例如我们创建一个hello.php的文件,文件内容为


然后


相关文章

浅谈CTF绕开字符数据结构shell

浅谈CTF绕开字符数据结构shell

親愛的的,关心我啊 12/14 文中篇幅3734 来与我一起阅读吧 在CTF中,尽管有很多文章内容有这些方面的材料,可是相对而言较为零散,这儿关键把自己学习培训和打ctf碰到的一些绕开...