CTFHub技能树-web-RCE 知识点

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系统支持的管道符如下:

  1. “;”:执行完前面的语句再执行后面的语句。
  2. “|”:显示后面语句的执行结果。
  3. “||”:当前面的语句执行出错时,执行后面的语句。
  4. “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
  5. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

Windows系统支持的管道符如下:

  1. “|”:直接执行后面的语句。
  2. “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
  3. “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
  4. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

管道符的替代

审计代码,过滤了| & ; cat flag ctfhub 空格

  • 空格可以用${IFS}

  • cat可以用more

  • flag可以用f***

  • 在linux下,命令分隔符除了;还有%0a

  • 有了;就可以不用运算符了

cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
tail 只显示最后几行
nl 类似于cat -n,显示时输出行号
tailf 类似于tail -f
more 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head 只显示头几行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值