RCE、文件包含、CSRF

本文详细介绍了RCE漏洞的原理、常见函数及其绕过方法,包括系统命令执行和代码执行,同时涵盖了文件包含漏洞、远程文件包含和CSRF攻击的实战示例,以及如何通过CSRFToken规避防御。
摘要由CSDN通过智能技术生成

1.RCE

一、rce漏洞概述

在Web应用开发中为了灵活性、简洁性等会让应用调用代码执行函数或系统命令执行函数处理,若应用对用户的输入过滤不严,容易产生远程代码执行漏洞或系统命令执行漏洞;

二、常见RCE漏洞函数

1.系统命令执行函数

system():能将字符串作为OS命令执行,且返回命令执行结果;

exec():能将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显);

shell_exec():能将字符串作为OS命令执行

passthru():能将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上;

popen():打开进程文件指针

proc_open():与popen()类似

pcntl_exec():在当前进程空间执行指定程序;

反引号``:反引号``内的字符串会被解析为OS命令;

2.代码执行函数

eval():将字符串作为php代码执行;

assert():将字符串作为php代码执行;

preg_replace():正则匹配替换字符串;

create_function():主要创建匿名函数;

call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数;

call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组;

3、RCE绕过

管道符

;

A;B

无论真假,A与B都执行

&

A&B

无论真假,A与B都执行

&&

A&&B

A为真时才执行B,否则只执行A

|

A|B

显示B的执行结果

||

A||B

A为假时才执行B,否则只执行A

空格过滤

以下可代替空格

<

<>

%20(即space)

%09(即tab)

$IFS$9

${IFS}

$IFS

{cat,/flag}

参考文章

三、靶场实践

实验靶场:pikachu

1.ping

首先这是一个ping命令,先输入baidu.com,命令执行并返回结果

然后我们可以尝试去执行一些系统命令拼接在一起,如:baidu.com&&whoami

2.eval()

直接输出phpinfo();

2.文件包含

一、文件包含原理

开发人员通常会把可重复使用的函数写到单个文件中,在使用到某些函数时,可直接调用此文件,而无须再次编写,这种调用文件的过程被称为包含。

注意:对于开发人员来讲,文件包含很有用,可以简化代码。

文件包含漏洞的产生原因是在通过引入文件时,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,最终造成攻击者进行任意文件包含。

注:包含的文件会被当成脚本文件进行解析。

文件包含本身是一种技术,但由于包含的文件不可控,就导致了文件包含的漏洞

漏洞类别

文件包含漏洞分为本地文件包含(LFL,被包含的文件在本地服务器),远程文件包含(RFL,被包含文件在远程服务器)

远程包含文件需要在PHP配置文件中开启

allow_url_fopen=On(默认为On)规定是否允许从远程服务器或者网站检索数据

allow_url_include=ON(PHP 5.2之后默认Off),规定是否允许include/require远程文件

二、函数解析

首先我们来了解4个函数((php)

include:使用include引用外部文件时,只有代码执行到include代码段时,调用的外部文件才会被引用并读取,当引用的文件发生错误时,系统只会给出个警告错误,而整个php文件会继续执行。

require:在php文件被执行之前,php解析器会用被引用的文件的全部内容替换require语句,然后与require语句之外的其他语句组成个新的php文件,最好后按新的php文件执行程序代码。

include_once:使用include_once会在导入文件前先检测该文件是否在该页面的其他部分被引用过,如果有,则不会重复引用该文件,程序只能引用一次。(要导入的文件中存在一些自定义函数,那么如果在同一个程序中重复导入这个文件,在第二次导入时便会发生错误,因为php不允许相同名称的函数被重复声明)

require_once: require语句的延伸,他的功能与require语句基本一致,不同的是,在应用require_once时,先会检查要引用的文件是不是已将在该程序中的其他地方被引用过,如果有,则不会在重复调用该文件。(同时使用require_once语句在同一页面中引用了两个相同的文件,那么在输出时,只有第一个文件被执行,第二个引用的文件则不会被执行)

三、靶场实践

1.LFL本地文件包含

先随便提交一个查询,发现这些文件应该都是后台存在的,但是文件名是由前端传向后端的,这意味着文件路径我们可以自己指定。

比如我们查询系统配置文件:C:/Windows/System32/drivers/etc/hosts,用.././去改变路径

2.RFL远程文件包含

首先要开启远程文件包含

然后我们这里自己写一个html页面或者一句话木马,我这里就还是用一句话木马。

还是先观察信息,这里其实是一个远程链接,我们改成我们一句话木马的url。

3.CSRF

一、CSRF(跨站请求伪造)概述

Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。

二、靶场实践

1.GET

拿到这样一个页面知道我们是要登录的,点提示,然后知道了几个用户名和密码。现在假装我们是lili,然后登录

然后我们点击修改个人信息,修改成功后抓包

这是我们抓到的GET /pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=12345566777&add=qqqqqq&email=555&submit=submit HTTP/1.1

那么我们就知道url的构造了,然后我们自己改一改后面的参数

http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=8888888&add=shuai&email=qq.com&submit=submit

这个时候我们把这个链接发送lili,然后lili点击之后信息是否会修改呢。

直接浏览器新开一个页面,然后复制修改后的链接并回车

直接就修改了,回到原来的网页看还是之前的,但是刷新后发现已经变成我们修改之后的信息了

2.POST

我们换vince登录,然后还是抓包

post请求内容不在url中,此时我们就只能自己构造一个站点,这里直接就用burp去生成CSRF Poc代码,右键请求包 → Engagement tools → Generate CSRF PoC;然后把html复制,然后自己重新构建

这里还是将该页面放在小皮www目录下,然后让vance点击。

先重新刷新,页面还是如下:

然后打开链接点击submit

此时已经修改成功。

3.Token

然后登录allen,还是抓包查看

然后发现是get请求,但是后面添加了防csrf的token,此时构造一般的poc是不行的,token的值一直在变化。此时我们就要用到burp的插件 CSRF Token Tracker,在Extender里面下载:

CSRF Token Tracker 可以自动获取 csrf 的 token,对于一些有 csrf 限制的请求,它可以绕过该限制,如暴力破解具有 csrf token 的登录请求,在渗透测试过程中CSRF Token的自动更新。

点击好后,工具栏上方就会多出CSRF Token Tracker 这个功能,然后设置规则

接下来将之前抓到的包发送给repeter,然后将手机号修改为555555555,看能否修改。先点击森达,然后再次点击会出现重定向,然后我们再点击跟随

然后查看render,已经修改成功

三、总结

csrf需要用户已经登录这个网站或者web应用,然后再点击攻击者发送的钓鱼页面才能执行成功,所以·它和XSS最大的区别就是,xss是可以拿到用户的cookie的,而csrf仅仅是利用cookie,在不知道用户conkie时通过web页面构造钓鱼链接,让用户点击。

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值