攻防世界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
相关文章:

攻防世界WEB新手训练区
view_source 此题我愿称之为网安领域的hello world 查看网页源代码的方式一般有—— 右键->查看网页源代码F12->源代码/来源Ctrlu 随后可以再代码第17行处找到flag,至此迈入网安第一步。可喜可贺,可喜可贺... get_post 考察http的两种请求方式&…...

Go语言安装及开发环境配置
目录 官网 国内 Linux(CentOS & Ubuntu)安装 环境变量设置 命令行下开发 开发模式执行 编译 IDE下开发 插件安装 安装依赖工具 运行 常见问题 1、dial tcp 172.217.160.113:443: i/o timeout 2、VS Code不能完美显示zsh问题 官网 访问Golang官网的下载链接&a…...

知识搜索术学习笔记
1 搜索引擎查询 1.1 推荐网站:Google 1.1.1 谷歌:对中英文支持都十分友好 中文搜索优于百度和Bing;...

【深度学习】sdxl中的 tokenizer tokenizer_2 区别
代码仓库: https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main 截图: 为什么有两个分词器 tokenizer 和 tokenizer_2? 在仔细阅读这些代码后,我们了解到 tokenizer_2 主要是用于 refiner 模型的。 #…...

使用一个定时器(timer_fd)管理多个定时事件
使用一个定时器(timer_fd)管理多个定时事件 使用 timerfd_xxx 系列函数可以很方便的与 select、poll、epoll 等IO复用函数相结合,实现基于事件的定时器功能。大体上有两种实现思路: 为每个定时事件创建一个 timer_fd,绑定对应的定时回调函数…...

C++:使用tinyXML生成矢量图svg
先说一下tinyXML库的配置: 很简单,去下面官网下载 TinyXML download | SourceForge.net 解压后是这样 直接将红框中的几个文件放到项目中即可使用 关于svg文件,SVG是基于XML的可扩展矢量图形,svg是xml文件,但是xml…...

day34_js
今日内容 0 复习昨日 1 事件 1.1 事件介绍 1.2 事件绑定方式 1.3 不同事件的演示 2 DOM操作 2.1 概述 2.2 查找元素 2.3 元素内容的查找和设置 2.4 元素属性的查找和设置 2.5 元素CSS样式的查找和设置 2.6 创建元素 2.7 创建文本节点 2.8 追加元素 2.9 删除元素 3 案例练习 0 复…...

AR 自回归模型
文章目录 总的代码ADF 检验(是否平稳)差分操作拟合AR 模型预测可视化总的代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.ar_model import AutoReg from statsmodels.tsa.stattools import adfuller# 生成一个示例时间序…...

51单片机ESP8266
一、MQTT透传AT固件 安信可提供的烧录WiFi固件工具: 链接: https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72 安信可提供的固件库链接: https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB 经过测试,选择这个不可以…...

php 源码加密保护 bease方案
推荐使用 php-bease 这个免费开源方案。 有一说一,这个项目上次更新时间是2021年… 多好的项目呀。 作者说在 php5.1 ~ php7.2 上都测试过。 源码地址: C源码: https://github.com/liexusong/php-beast dll版: https://github…...

FFMPEG解析ts流
三篇相关联的文章: ffmpeg下HLS解析过程-CSDN博客TS文件格式详解及解封装过程-CSDN博客 FFMPEG解析ts流-CSDN博客 一、简介 关于TS格式解析,可以参考《TS文件格式详解及解封装过程-CSDN博客》,本文主要代码部分解读。建议大家熟读iso138…...

Java基础-实现猜数字小游戏
1. 实现控制台的猜数字游戏。游戏运行时产生一个1~100之间的随机数字; 2. 要求用户从控制台输入数字,若输入的数字比随机数小,则提示太小了;若输入的数字比随机数大,则提示太大了,若输入的数字与随机数相同…...

爬虫(一)
1. HTTP协议与WEB开发 1. 什么是请求头请求体,响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么1.1 简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(…...

【软件测试】学习笔记-Nginx 在系统架构中的作用
本篇文章你探讨 Nginx 在应用架构中的作用,并从性能测试角度看如何利用 Nginx 数据统计用户访问量。 Nginx 重要的两个概念 代理 首先要来解释一下什么是代理,正向代理和反向代理是什么意思?各自作用是什么?不少同学经常听到这…...

鸿蒙开发【应用开发基础知识】
应用开发介绍 1. 项目说明 通过OpenHarmony提供的Stage模型和ArkUI的eTS声明式开发规范,结合简单的Demo,分享学习OpenHarmony/docs/application-dev[应用开发文档] 2. 主要功能 目录标题展示,目录列表展示点击目录列表,查看列…...

腾讯云幻兽帕鲁4核16G14M服务器性能测评和价格
腾讯云幻兽帕鲁服务器4核16G14M配置,14M公网带宽,限制2500GB月流量,系统盘为220GB SSD盘,优惠价格66元1个月,277元3个月,支持4到8个玩家畅玩,地域可选择上海/北京/成都/南京/广州,腾…...

Linux第一个小程序——进度条
目录 回车和换行 缓冲区 设计倒计时 进度条(多文件操作) Version1:进度条 Version2:应用场景进度条 Version3:升级彩色进度条 回车和换行 回车\r:r 回车,回到当前行的行首,而…...

(N-141)基于springboot,vue网上拍卖平台
开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis-plusredi…...

深入了解Figure的结构与层次
深入了解Figure的结构与层次 一 Matplotlib中的Figure1.1 Figure的概念和作用:1.2.创建Figure对象:1.3 Figure的属性和方法: 二 子图(Axes)的角色与创建2.1 子图(Axes)的概念:2.2 创建子图的方法:2.3 Axes的…...

c语言基础6
1.逗号表达式 逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执行。整个表达式的结果是最后⼀个表达式的结果。 我们来看下面的一个代码: int main() {int a 1;int b 2;int ret (a > b, a b 2, b, b a 1);p…...

kotlin sum 与 sumOf
kotlin 中 sum 的作用: 计算一个列表里面数字的总和: val numbers listOf(1, 2, 3, 4, 5) val sum numbers.sum() println("The sum is: $sum") // 打印结果: The sum is: 15 kotlin中sumOf的作用: 也是计算一个列表里面数字…...

php怎么输入一个变量,http常用的两种请求方式getpost(ctf基础)
php是网页脚本语言,网页一般支持两种提交变量的方式,即get和post get方式传参 直接在网页URL的后面写上【?a1027】,如果有多个参数则用&符号连接, 如【?a10&b27】 post方式传参 需要借助插件,ctfer必备插…...

Spring Boot 项目配置文件
文章目录 配置文件的作用properties基本语法读取文件信息缺点 yml基本语法优点配置不同数据类型字符串类型的写法 配置对象配置集合 读取配置文件的几种方法EnvironmentPropertySource使用原生方式读取 设置不同环境的配置文件 配置文件的作用 整个项目中重要的数据都是在配置…...

学校“数据结构”课程Project—扩展功能(自主设计)
目录 一、设想功能描述 想法缘起 目标功能 二、问题抽象 三、算法设计和优化 1. 易想的朴素搜索 / dp 搜索想法 动态规划(dp)想法 2. 思考与优化 四、算法实现 五、结果示例 附:使用的地图API 一、设想功能描述 想法缘起 OSM 导出…...

从0开始搭建若依微服务项目 RuoYi-Cloud(保姆式教程 一)
掌握陌生项目解读技巧 掌握若依(RuoYi-Cloud)框架 掌握SpringCloud Alibaba体系项目开发套路,结合我之前所有企业项目来学习就知道有多么简单。 一、框架介绍 1. 简介 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空…...

【Chrome】浏览器怎么清除缓存并强制刷新
文章目录 1、正常刷新:正常刷新网页,网页有缓存则采用缓存。 F5 或 刷新键2、强制刷新:忽略缓存刷新,重新下载资源不用缓存。 CtrlF5 或 ShiftF5 或 CtrlShiftR3、在浏览器的设置里面清除所有数据...

Android创建保存Excel文件
Android开发生成保存Excel文件,首先下载两个jar包。下载地址:Android读写Excel文件的两个jar包资源-CSDN文库 poi-3.12-android-a.jar poi-ooxml-schemas-3.12-20150511-a.jar 把jar包放在app的libs文件夹下,引用jar我一般都在build.gradle的…...

Selenium + Django + Echarts 实现亚马逊商品数据可视化爬虫项目
最近完成了1个爬虫项目,记录一下自己的心得。 项目功能简介 根据用户输入商品名称、类别名称,使用Selenium, BS4等技术每天定时抓取亚马逊商品数据,使用Pandas进行数据清洗后保存在MySql数据库中. 使用Django提供用户端功能,显…...

【深度学习】初识深度学习
初识深度学习 什么是深度学习 关系: #mermaid-svg-7QyNQ1BBaD6vmMVi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7QyNQ1BBaD6vmMVi .error-icon{fill:#552222;}#mermaid-svg-7QyNQ1BBaD6vmMVi .err…...

探索 Xind3 生态系统,解锁铭文资产的新玩法
铭文市场的兴起,不仅是新资产发行方案向市场的代表,更是新资产革命的代表。通过“公平启动”的方式,任何人都可以按照先到先得的原则“铸造”资产。虽然这看起来是意识形态上的新升级,但实际上最火的铭文风潮是由CEX引发的。 我们…...