知识点
eval执行
打开网站显示如下代码:
?>php
if (isset(KaTeX parse error: Expected '}', got 'EOF' at end of input: …])) { eval(_REQUEST[“cmd”]);
} else {
highlight_file(FILE);
}
?>
大体意思是:判断cmd是否被设置,若cmd被赋值,则执行如下语句,否则就继续显示以上代码。
eval($_REQUEST[“cmd”]);
里面的:
- eval():该函数可以把字符串作为PHP代码执行
- $_REQUEST[’’]:和GET和POST类似,不过反应速度比较慢
- 用?cmd=system(“ls”);查看根目录
- 看上一级文件: ?cmd=system(“ls /”);
- ?cmd=system(“cat /文件名”)打开相应文件
文件包含
学会用hackbar(还可用Max hackbar,都差不多,在火狐浏览器可配置)
php://input
php://input是什么?
php:// ~ 来访问各个输入/输出流(I/O streams),php://input 是个可以访问请求的原始数据的只读流。POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指令。
它是PHP中一个只读的协议,使用时会将请求放在body中
简单的说php://input用于执行php代码
以上总结
【php://协议】
条件
不需要开启allow_url_fopen
仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。
php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input
php://filter用于读取源码,php://input用于执行php代码。
注意:php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。
PHP.ini:
php://filter在双off的情况下也可以正常使用;
即:
allow_url_fopen :off/on
allow_url_include:off/on
php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。
PHP.ini:
allow_url_fopen :off/on
allow_url_include:on
命令注入
1. 什么是RCE?什么是命令注入?
RCE英文全称:remote command/code execute(远程命令/代码执行漏洞),说大白话,就是通过远程的实现命令的执行。命令注入,就是类似于SQL注入一样,把一些原本不能执行的命令放了进去,导致命令被执行。
2. 漏洞产生的原因
这个和SQL注入很相同,SQL是改变的语句本来的意思,使其执行其他的语句;今天做到的是利用ping命令和;之类的符号,使其在执行原来的命令时,执行了额外的命令,并返回了相应的结果。所以产生的原因都是没有对用户的输出进行充分的过滤。
3. 什么是ping命令
在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为:
(1)用来检测网络的连通情况和分析网络速度
(2)根据域名得到服务器IP
(3)根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量
Linux和Windows系统支持的管道符如下:
- “;”:执行完前面的语句再执行后面的语句。
- “|”:显示后面语句的执行结果。
- “||”:当前面的语句执行出错时,执行后面的语句。
- “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
- “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
Windows系统支持的管道符如下:
- “|”:直接执行后面的语句。
- “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
- “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
- “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
管道符的替代
审计代码,过滤了| & ; cat flag ctfhub 空格
-
空格可以用${IFS}
-
cat可以用more
-
flag可以用f***
-
在linux下,命令分隔符除了;还有%0a
-
有了;就可以不用运算符了
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
tailf 类似于tail -f
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行