PoC+EXP编写指南—以Apache Flink 任意文件上传为例

从Apache Flink 任意文件上传看PoC和EXP的编写

一、漏洞前提

0x01. 存在未授权访问

访问默认的8081端口,直接进到面板界面,如下图

image-20191126181404700

0x02. jar文件可被成功上传并执行

用msfvenom生产用于反弹shell的jar文件

image-20191115180731896

image-20191115180435864

image-20191122153512063

二、编写poc

0x01 判断网页是否能正常访问

image-20191115181007360

image-20191115181248534

0x02 是否存在上传点

image-20191115182219961

0x03 上传与执行

采用哪种方式上传

requests 上传

执行

image-20191122155305498

成功

image-20191122161928367

失败

image-20191122155758984

We’re sorry, something went wrong. The server responded with:

image-20191122155909772

We’re sorry, something went wrong. The server responded with:

三、复盘与反思

image-20191122155023472

自动化脚本一般怎么上传文件

curl上传-调用shell

image-20191115183205333

局限性:无法获取os命令执行的结果

  • os.popen()

    image-20191122144714131

  • os.system()

image-20191122145315774

  • subprocess.Popen()

pycurl上传

requests 上传

四、PoC和EXP编写思路分析

  1. 能随机的都随机。
    1. updatexml 报错,如果参数是md5(randvalue) 报错页面的md5数据不一定完整,暂时可以使用固定值代替。
  2. 不要直接使用如reponse.status == 200这样判断status code验证漏洞,一定存在误报。

RCE-以PHP study后门为例

坏的例子

image-20191203132925586

测试RCE类漏洞,如PHP代码执行,请不要使用systemshell_execphpinfo等函数测试漏洞,容易出现误报和漏报,原因如下:

  • 如果对方本身就是一个phpinfo页面,无法判断是否是成功执行了代码,导致出现误报
  • 如果对方网站运行在一些虚拟主机环境下,如cpanel,则命令执行函数很可能已经被禁用,此时再用system等函数测试漏洞则会出现漏报

image-20191203133610918

好一些的例子

image-20191203133222500

应该怎么做

各种 rce 通常都可以直接使用整数相乘相加或者md5的方法,然后再查找返回结果,这样只有在代码真正被执行的时候才会得到预期的结果。

  • 如果是测试命令执行,目前推荐使用 expr num1 + num2,主要因为星号在 shell 中可能有潜在的转义问题,执行其他的命令可能返回值格式并不方便匹配。
  • 考虑到有些32位系统整数上限可能低于2^^31和数字过短可能误报,目前要求乘法两个数字的取值范围必须在 40,00044,800 之间,加法两个数字必须在 800,000,0001,000,000,000 之间。

image-20191203135305693

  • 文件包含:少用boot.ini, /etc/passwd(操作系统+waf),尽量考虑cms特性,例如 WordPress 应用路径下 ./wp-config.php 文件是应用默认必须的配置文件,而文件中的特殊字符串标识 require_once(ABSPATH . 'wp-settings.php'); 通常是不会去改动它的。

SQL注入

基于时间的盲注

可当网络很慢时,该怎么判断?(网络传输延迟不可忽略时)

延时 = 系统反应延迟(sleep/benchmark) + 网络传输延时

image-20191203125948446

image-20191203130039349

image-20191203131215599

假如这次响应时间大于 平均值+ 7*平均偏差,就认为该请求导致了数据库延时。

五、参考资料

Seebug-漏洞检测的那些事儿

编写高质量poc – XRAY Document

Python:SQLMap源码精读—基于时间的盲注(time-based blind)