攻防世界WEB新手训练区

view_source

此题我愿称之为网安领域的hello world

查看网页源代码的方式一般有——

  • 右键->查看网页源代码
  • F12->源代码/来源
  • Ctrl+u

随后可以再代码第17行处找到flag,至此迈入网安第一步。可喜可贺,可喜可贺...


 get_post

考察http的两种请求方式,一种是get方式,一种是post方式

get的提交方式为,在网页的URL后面写个英文问号,然后写变量表达式,如下:

提交完成后页面会更新并多一句话提醒用post方式提交变量b,这时候需要借助hackbar插件了(读者请自行查阅资料完成插件的安装)

弄好插件后用快捷键F12进入开发者模式 ,如下:

把该网页的URL复制到(可以直接点LOAD)HackBar中的URL栏中,打开【Use POST method】这个开关,随后在Body中输入b=2,最后点击【EXECUTE】即可刷新页面并获得flag


robots 

robots协议_百度百科 (baidu.com)

百度百科:robots协议也称爬虫协议、爬虫规则等,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。

简单来说,我们知道网页其实就是服务器下的一个个文件,robots.txt就是其中之一,因此根据提示先直接去访问robots.txt这个文件,看看能有什么新线索。访问方式就是在网页的URL后面加上/robots.txt

发现新页面是如下三行

  • 第一行的User-agent: * 这里的*代表的所有的搜索引擎种类,*是一个通配符
  • 第二行的Disallow: 后面无内容。
  • 第三行的Disallow: f1ag_1s_h3re.php,表示禁止搜索引擎爬虫访问名为f1ag_1s_h3re.php的文件

通过访问robots.txt这个文件,我们获取到的线索就是该服务器下还有一个文件叫f1ag_1s_h3re.php,所以下一步就直接再去访问这个文件即可,就像刚刚访问robots.txt那样做(别忘了回到原来的父路径)

访问后页面刷新,获得flag


backup

这题让找备份文件,打开靶场后提示找的是index.php的备份文件,这样就获得一个线索,要知道,备份文件的名字就是在原文件的名字加上后缀,备份文件有以下几个常用后缀:

                .git        .svn        .swp        .~        .bak        .bash_history        .bkf

因此第一种思路就是枚举去尝试访问index.php.git,index.php.svn...等等这些文件,当试到index.php.bak的时候,网页会自动下载这个文件,说明试到正确答案了

我们用记事本打开它,可以轻松拿到flag

仅仅是这样的话就太浪费这题了,交完flag后回来复盘

这题其实可以通过kali(没装kali?见本篇->linux的kali安装,换源,更新包-CSDN博客)的工具dirsearch对该网页进行一个路径扫描,一扫就知道这个网页路径下有什么文件了

使用命令【dirsearch -u URL】对指定路径进行扫描,进度到60%左右时会出现index.php.bak(这时可以Ctrl+c提前结束扫描),证明该路径下确实有这个文件,然后进行访问即可

(笔者是finalshell连接的kali系统,用起来会比较顺手)


cookie

按F12键进入开发者模式,在【应用】中找到Cookie,可以看到名为【look-here】的项,其值为cookie.php,因此线索为该路径下存在此文件

理所应当地去访问一下这个文件,页面刷新了,提示去看http response,就去【网络】中找到【标头】,在响应标头中能找到flag


disabled_button

题目描述提到“前端知识”,给出这题的线索应该是和前端代码有关,打开靶场,一句话加一个按钮,点了点发现按钮确实按不了

那么F12进入开发者模式,点一个这个我用绿色框框起来的【选中】按钮后把鼠标移动到按钮位置,这样做可以快速定位这个按钮的代码位置

代码被定位到了下面绿色框起来的位置,发现它是一个表单,把它展开仔细观察,发现其存在一个属性【disabled】,这个属性会使该元素不可交互,这就是按钮不可按下的主要原因了

 把disabled属性删除,按钮就能按了

按下按钮,轻松获得flag

(怎么说呢,这题有点小学初中那会玩史上最坑爹的小游戏的既视感??啊)


simple_js

这题的难度相对于其它的题目都显得有点高,比较吃做题人的经验,经验不足就会手足无措

首先打开靶场,测试了几下,发现确实如题所说,不管什么密码,结果都提示这个

这时就应该换个思路,比如去看看网页源代码、cookie、http response...等等,找找线索,显然在源代码中我们能提取到不少信息

说实话笔者写这里时也只是个ctf小白,不是很能看懂这个代码,但能根据一点编程经验猜个大概

主要是由一个自定义函数dechiffre(红框部分)和3行代码(绿框部分),函数在未调用时不会起作用,所以先从绿框的3行代码入手

 第22行代码:

String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

这行代码先调用上面红框自定义的dechiffre函数,传入一个字符串(看这个字符串的格式大概猜得到是16进制编码),dechiffre函数会经过它的逻辑后返回一个字符串A,然后String["fromCharCode"] 函数(JavaScript的API)把字符串A转换为字符串B除此之外这行代码似乎并没有对其它什么参数有造成影响??那就先放着...吧

第24行代码:

h = window.prompt('Enter password');

这行代码调用一个名为window.prompt的API,其作用是指示浏览器显示一个对话框,用来提示用户输入一些相关信息,也就是打开靶场后显示的这个密码框

接下来的逻辑是把用户输入的密码赋值给变量h,这就是第24行代码的所有作用了

第25行代码:

alert( dechiffre(h) );

这行代码调用alert函数,把其中的参数作为“警告”提示在屏幕,而所谓的参数是通过调用函数dechiffre(h)来获得的一个字符串

自此我们终于理清楚了调用链:

首先调用dechiffre(h),h来自用户输入,然而我们只用稍微看看dechiffre函数的逻辑就能明白,它返回的字符串跟传入的这个h参数根本没关系,而是固定返回一个字符串FAUX PASSWORD HAHA,所以不管输入什么密码,最后显示的结果都是这句话

到了这步,其实仅仅是把这个网页所谓的“bug”给理清楚了,但似乎对解题依旧没什么进展?

所以还是得换换思路,多写几道ctf题目其实不难总结出经验,所谓的flag就是被出题人藏在各种地方,但不一定以明文的形式展示,也可能是密文

而这题的flag就被藏在源代码中的第22行,甚至可以说其它都是无关信息,这一大串的十六进制编码就是密文形式的flag,需要做题人自行想办法去解码

 因此接下来的工作就是写一个脚本去解码,写这种脚本最好是用python而不是c、c++等,后者会很麻烦,随便一个字符串转整数就要写一大段算法代码,难顶...

接下来是脚本的编写教学,不想看的自行跳过即可——

①首先把这串十六进制编码打印出来,python识别到非十进制格式的编码时,会自动转成十进制输出,因此得到以下结果:

②通过输出的结果,合理猜测这是一串ASCII编码,我们将其转为对应的字符,或许就能拿到flag但也得进行一些相应的操作,首先把原字符串按逗号分割成字串,得到对应的列表,这里再把列表也打印一下验证正确性

③循环遍历列表list,对于每个元素,采取两次类型转换,先转为整型(int),再转为字符型(chr,python的字符型是chr而不是char),即可获得编码对应的字符,所有字符连在一起,组成了本题的flag,按题目要求的格式把flag包裹起来提交即可

Cyberpeace{786OsErtk12}

完整脚本:

str = "\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
print(str)
list = str.split(',')
print(list)
for i in list:print(chr(int(i)), end='')#对每个元素,先转int再转chr后输出,print以空字符连接下次输出(不换行的意思)


xff_referer

百度百科:

X-Forwarded-For_百度百科 (baidu.com)

HTTP_REFERER_百度百科 (baidu.com)

X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。

简单理解:

xff用来记录用户真实ip以及代理服务器的ip。
referer用来记录当前网页是从哪个链接过来的。
以上两个属性都是可以伪造的!

打开靶机,页面显示说“ip必须来自123.123.123.123”

因此第一步去构造xff:

F12】进入开发者模式->【HackBar】->【LOAD】把当前URL加载进插件->

MODIFY HEADER】修改头部,这里先按要求伪造一个xff,值为123.123.123.123->【EXECUTE】发包后,可以看见页面刷新,新的信息显示“必须来自https://www.google.com”

因此第二步去构造referer:

MODIFY HEADER】修改头部,这里按要求构造一个referer,值为https://www.google.com->

EXECUTE】发包后,可以看见页面刷新,获得本题flag


weak_auth

 weak auth是弱口令、弱认证的意思,打开靶机显示的是一个登录页面

先尝试性地随意输入一个账号密码,结果显示“please login as admin” ,即让我们用admin作为账号去登录

现在知道账号是admin了,那密码呢?不知道,但是题目提示我们了是“弱认证”,即密码安全性极低,因为我们采用字典爆破,把正确密码试出来:

①开启burp代理,使用burp抓包,admin是账号,先随便输入一个密码

②右键【Send to Intruder】,使用burp进行爆破的操作

③选中密码的文本(选中文本时要注意,burp似乎有点错位,选中的与实际相比,前面少一个字符后面多一个字符,所以选中文本过程要注意一点。。。)->【Add】添加需要爆破的position

 ④【Payloads】->【Load ...】把本地备好的字典(网上随手一搜有一堆)加载进burp

⑤按下【Start attack】开始爆破

⑥把结果按照【Length】倒序排列,发现密码为123456的回复包的长度最长,说明有问题,查看Response,获得flag

⑦也可以回到靶场,【账号:admin        密码:123456】,登录后页面刷新,获得flag


 command_execution

百度百科:WAF_百度百科 (baidu.com)

Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

打开靶机,显示的是一个具有ping功能的页面

随意ping了一下比较简单的地址,这里通过显示的信息可以得知,该靶场基于Linux操作系统

本题题目描述说没有waf,可以理解为对于用户的命令不作安全性判断,借此可以利用Linux的管道符命令语法进行命令拼接,原理介绍:

在管道符左边的命令结束后,会将左边命令的结果作为输入,立即执行右边的命令,例如这边的ls,是指列出当前目录的文件夹和文件

因此利用这个语法特性,去进行命令拼接,查看靶机的工作目录下存放了哪些文件,由此获得线索

输入【ping w | ls】命令,这里的w是什么根本不重要,我们的目的是借助管道符拼接其后的命令【ls】,可以看见有名为【index.php】的条目被列举出来

 顺理成章地去访问一下此文件,发现页面刷新了一下,但内容没变,看来flag被藏在其它目录下,我们直接借助find函数去全局查找含有flag字样的文件

如法炮制,输入命令【ping w | find / -name "*flag*" 】 

find后面的/意味根目录,linux系统中根目录是最高级的父目录,-name表示按名字查找指定文件,"*flag*"即名字中含有flag的文件,可以看到查找结果中显然是第一个【/home/flag.txt】最有可能是我们的目标文件

再次拼接命令,这次我们要访问【/home/flag.txt】这个路径的文件,

输入命令【ping w | cat /home/flag.txt】,这里cat的作用是访问文件

访问结果拿下flag

 


simple_php

本题考察简单php代码分析,打开靶机就是一段php代码

 下面是代码分析:

<?php
show_source(__FILE__);//将当前文件的代码显示出来
include("config.php");//加载自定义配置文件
$a=@$_GET['a'];//get方式传入的参数a将赋值给变量$a
$b=@$_GET['b'];//get方式传入的参数b将赋值给变量$b
if($a==0 and $a){echo $flag1;//重点1:如果$a弱等于0并且$a为真,将输出$flag1
}
if(is_numeric($b)){exit();//如果$b是数字,程序将直接结束
}
if($b>1234){echo $flag2;//重点2:如果$b大于1234,将输出$flag2
}
?>

分析完代码后可以得出:get方式传入一个参数a,a要满足本身为true且a弱等于0,查看php弱相等表:php比较运算,强相等(===)弱相等(==)表-CSDN博客

 

 因此我们先传入一个a="任意字符串"即可,传参方式为在URL后面输入【?a="xxx"】,可以看见传参后页面显示出了flag的前半部分

 接下来是b的参数,分析得出b不能是数字,否则会进入第二个if逻辑导致程序直接结束,又要满足b大于1234,进入第三个if逻辑,获取下半的flag

必须输入一个字符串绕过第二个if逻辑,然后涉及到字符串的类型转换,见本篇string类型转整型(int)或者浮点型(float/double)->php基础学习之数据类型-CSDN博客

因此我们输入【&b=1235a】即可(同时提交多个变量,用&符号连接),"1235a"本身被php识别为字符串,在与1234进行比较时,进行类型转换,1235a变为1235,1235>1234,条件为真,输入第二段flag,与第一段flag组成本题flag

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“JavaScript 循环中的 ‘await‘

目录 前言 for使用await -- 有效的 forEach使用await -- 无效的 for of 使用await 有效的 for await of 使用await 有效的 总结 前言 在JavaScript的forEach方法中使用await是无效的&#xff0c;因为forEach方法不支持异步操作的等待。 forEach是一个数组的遍历方法&…

精要图示:园区金融数字化服务蓝图,以园区为支点推动信贷业务增长

作为企业集聚地&#xff0c;园区已然成为银行业夯实客群基础的重要切口&#xff0c;各大行陆续围绕园区场景创新金融产品&#xff0c;以期抢跑园区金融新赛道、把握新增量。 启信慧眼首推一站式【园区金融】数字化服务方案&#xff0c;该方案同时支持启信天元私有化部署&#x…

windows下git pull超时,ping不通github

报错 ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 解决办法 修改hosts 最后加一行&#xff0c;文件位置&#xff1a;…

Kotlin Multiplatform项目推荐 | 太空人分布图

Kotlin Multiplatform项目推荐 | 太空人分布图 项目简介 Kotlin Multiplatform项目是一种跨平台开发技术&#xff0c;它可以同时使用SwiftUI、Jetpack Compose、Compose for Wear OS、Compose for Desktop、Compose for Web、Kotlin/JS React等客户端框架&#xff0c;并且使…

分表过多引起的问题/Apache ShardingSphere元数据加载慢

目录 环境 背景 探寻 元数据的加载策略 如何解决 升级版本到5.x 调大max.connections.size.per.query max.connections.size.per.query分析 服务启动阶段相关源码 服务运行阶段相关源码 受到的影响 注意事项&#xff08;重要&#xff09; 其他 环境 Spring Boot 2…

【linux】Debian防火墙

Debian系统默认没有安装防火墙&#xff0c;但用户可以根据需要自行选择并安装一个防火墙以增强系统安全性。 一、查看Debian 桌面系统的防火墙是否关闭 在Debian及其他基于Linux的桌面系统中&#xff0c;防火墙功能通常是由iptables或nftables规则集控制的&#xff0c;而ufw&…

docker容器启动后修改或添加端口 nacos容器 版本2.x需要额外开放9848、9849

1.输入docker ps -a查看需要修改的容器ID: 记录下、 docker ps -a 2.停止docker systemctl stop docker 3.进入docker 容器文件夹&#xff0c;找到对应容器的位置&#xff1a; docker的默认文件夹应该是/var/lib/docker 如果不是root用户查看的话&#xff0c;可能会出现权限…

LeetCode 热题 100 | 子串

目录 1 560. 和为 K 的子数组 2 239. 滑动窗口最大值 3 76. 最小覆盖子串 菜鸟做题第二周&#xff0c;语言是 C 1 560. 和为 K 的子数组 题眼&#xff1a;“子数组是数组中元素的连续非空序列。” 解决本问题的关键就在于如何翻译问题。子数组 s 的和可以看作数组 i 的…

智能充电桩,机器人 wifi蓝牙 解决方案

新联鑫威低功耗高性价比sdio wifi/蓝牙combo的模块单频2.4g的CYWL6208&#xff0c;双频2.4g/5g CYWL6312可以应用到一些低延时 高性能 低功耗 联网需求的交流直流充电桩&#xff0c;扭力扳手&#xff0c;agv机器人&#xff0c;目前支持主流的stm32F4/GD32F4 瑞萨 psoc的主控&am…

Shell脚本——循环语句(for、while和until循环)

一、命令 1.echo命令 echo -n 表示不换行输出 echo -e 输出转义字符&#xff0c;将转义后的内容输出到屏幕上 常见转义字符&#xff1a; \b 相当于退格键 转义后相当于退格键&#xff08;backspace&#xff09;&#xff0c;但是前提是“\b”存在字符。“\b”表示删除前一个…

Maven(上):Maven介绍、安装配置及工程构建

1. Maven介绍 Maven 是一款为 Java 项目管理构建、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 Maven就是一个软件&#xff0c;掌握安装、配置、以及基本功能 &#xff…

二叉树的最大深度[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个二叉树root&#xff0c;返回其最大深度。 二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#xff1a…

Java面试——基础篇

目录 1、java语言有哪些优点和缺点? 2、JVM 、 JDK 和 JRE的关系 3、为什么说 Java 语言“编译与解释并存”&#xff1f; 4、Java和c的区别 5、基本数据类型 5.1、java的8种基本数据类型&#xff1a; 5.2、基本类型和包装类型的区别&#xff1a; 5.3、包装类型的缓存机…

【大数据】YARN常用命令及Rest API

YARN 1.YARN常用命令 1.1 作业 命令说明yarn application -list列出所有的applicationyarn application -list -appStates [ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED]根据application状态过滤yarn application -kill [applicationId]…

c# 解决ini中文乱码

乱码仅仅是因为编码规则导致 解码时对应文件的码制即可 public class IniConfig{private string inipath AppDomain.CurrentDomain.BaseDirectory "Config.ini";public bool CanRead(){if (File.Exists(inipath)){return true;}return false;}//声明API函数[DllImp…

大数据开发之Scala

第 1 章&#xff1a;scala入门 1.1 概述 scala将面向对象和函数式编程结合成一种简洁的高级语言 特点 1、scala和java一样属于jvm语言&#xff0c;使用时都需要先编译为class字节码文件&#xff0c;并且scala能够直接调用java的类库 2、scala支持两种编程范式面向对象和函数式…

小黑艰难的前端啃bug之路:内联元素之间的间隙问题

今天开始学习前端项目&#xff0c;遇到了一个Bug调了好久&#xff0c;即使margin为0&#xff0c;但还是有空格。 小黑整理&#xff0c;用四种方法解决了空白问题 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></tit…

应该如何选择轻量级低代码、重量级低代码、轻量级低代码+定制、纯定制软件开发?

引言 在当今数字化时代&#xff0c;软件开发成为推动业务创新和增强竞争力的关键因素。然而&#xff0c;在众多的软件开发方法中&#xff0c;如何选择适合自己项目的方法成为了一个至关重要的问题。本文将探讨轻量级低代码、重量级低代码、轻量级低代码定制、以及纯定制这四种…

[MQ]常用的mq产品图形管理web界面或客户端

一、MQ介绍 1.1 定义 MQ全称为Message Queue&#xff0c;消息队列是应用程序和应用程序之间的通信方法。 如果非要用一个定义来概括只能是抽象出来一些概念&#xff0c;概括为跨服务之间传递信息的软件。 1.2 MQ产品 较为成熟的MQ产品&#xff1a;IBMMQ&#xff08;IBM We…

目标检测 - RCNN系列模型

文章目录 1. RCNN2. Fast-RCNN3. Faster-RCNN 1. RCNN 论文&#xff1a;Rich feature hierarchies for accurate object detection and semantic segmentation 地址&#xff1a;https://arxiv.org/abs/1311.2524 分为两个阶段&#xff1a; 目标候选框Object ProposalsProposal…