[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程

本文主要是介绍[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  题目来源

NSSCTF | 在线CTF平台因为热爱,所以长远!NSSCTF平台秉承着开放、自由、共享的精神,欢迎每一个CTFer使用。icon-default.png?t=O83Ahttps://www.nssctf.cn/problem

 

[SWPUCTF 2021 新生赛]gift_F12

这个题目简单打开后是一个网页

 我们一般按F12或者是右键查看源代码。接着我们点击ctrl+f后快速查找,根据题目给的格式我们搜索ctf即可看到flag,如下图所示。

或者是

接着根据题目所给的格式NSSCTF{}写入flag即可解出 ,这里给大家一个示例

NSSCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft}

[SWPUCTF 2021 新生赛]jicao

知识点:网站请求的POST、GET方法,JSON

阅读源码了解到需要post值给id,get值给json,json_decode()可以对一串JSON进行解码,故需要构造payload为 {"x":"wllm"}之后:
方法一:使用HackBar进行/?id=wllmNB,然后post json
方法二:使用burp直接修改请求头

另:json

格式为

{"name": "John Doe", "age": 18, "address": {"country" : "china", "zip-code": "10000"}}

JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON的值:
3.1 JSON的构成: ws 值
3.2值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。
3.2.1对象由花括号括起来的逗号分割的成员构成,成员是字符串键和上文所述的值由逗号分割的键值对组成,如:引用JSON中的对象可以包含多个键值对,并且有数组结构,该语言正是一次实现过程内容的描述。
3.2.2数组是由方括号括起来的一组值构成,如:
[3, 1, 4, 1, 5, 9, 2, 6]
3.2.3 字符串与C或者Java的字符串非常相似。字符串是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
3.2.4数字也与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

解题方法如下:

这里大家在火狐浏览器右上角点击...然后点击扩展HackBar安装然后点击题目,接着点击检查,点击load URL加入?json={"x":"wllm"}  接着设置为Post data

将下面的值写入id=wllmNB然后点击Execule即可解出flag

 [SWPUCTF 2021 新生赛]easy_md5

题目如下

既要两变量个值不相同,又要两个变量md5值一样,
可以发现此时判断md5值是否一样用的是==,这是php的弱类型比较,
方法一: 可以使用带0e开头的数字穿进行传递参数,因为php会将0e开头的数字转化为0,故此时md5值相等,而两个变量值不相等;
方法二: 可以传递数组,如name[]=123,password[]=456,md5不能加密数组,故两个md5返回的都是null

另:若遇到===这样的强类型比较,方法一就失效了,方法二仍然有效,或者还可以使用软件fastcoll进行md5碰撞,生成两个字符串使得他们的md5值相同

另:0e开头的数字

s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a

 解题方法

选上面两个md5的值对撞即可得到flag

 [SWPUCTF 2021 新生赛]include

 题目:

 那我们就上传一个file,在搜索栏中 ?file 、?file=ture  、?file=false都可以试一下如下图所示:

 看到代码后发现是伪代码,这里我讲一下什么是伪代码:

1.什么是PHP伪协议?

PHP伪协议是PHP自己支持的一种协议与封装协议,简单来说就是PHP定义的一种特殊访问资源的方法。

有些伪协议成功执行需要allow_url_fopen和allow_url_include的支持。

allow_url_fopen On/Off 允许或禁止打开URL文件
allow_url_include On/Off 允许或禁止引用URL文件

2.什么时候用PHP伪协议?

文件包含!!!的时候,可能遇到的文件包含函数:
1、include
2、require
3、include_once
4、require_once
5、highlight_file
6、show_source
7、flie
8、readfile
9、file_get_contents
10、file_put_contents
11、fopen (比较常见)

1.常见的php伪协议

php://input

php://input 是个可以访问请求的原始数据的只读流,获取POST请求数据的协议

当enctype=”multipart/form-data” 的时候 php://input 是无效的。

php://input 伪协议 成功执行前提
php.ini 中的 allow_url_include设置为On

php://filter

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。 这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。

在利用上很多都是与包含函数结合使用,读入或者输出获取文件源码然后编码让其不执行从而输出

补充:

php伪协议
常见的php伪协议

(1)file:// 访问本地文件系统

2)http:// 访问HTTP(S)网址

3)ftp:// 访问FTP(S)URL

4)php:// 访问各个输出输入流

5)zlib:// 处理压缩流

6)data:// 读取数据

7)glob:// 查找匹配的文件路径模式

8)phar:// PHP归档

9)rar:// RAR数据压缩

php://filter 的使用:


php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php

php://filter 伪协议组成:
read=<读链的筛选列表>
resource=<要过滤的数据流>
write=<写链的筛选列表>
php://filter/read=处理方式(base64编码,rot13等等)/resource=要读取的文件

read 对应要设置的过滤器:
常见的过滤器分字符串过滤器、转换过滤器、压缩过滤器、加密过滤器
其中convert.base64-encode ,convert.base64-decode都属于 转换过滤器

zip://与bzip2://与zlib://协议

zip:// 等属于压缩流的协议,通过直接压缩普通文件为zip文件,再通过zip:// 协议读取,可以直接执行php代码。压缩后的zip文件可以随意修改后缀也不影响zip://协议读取。(注意是如phpinfo.txt直接压缩为zip,而不是文件夹压缩zip)

压缩及协议访问格式:

压缩文件为.zip后缀
zip://绝对路径/phpinfo.zip%23phpinfo.php
压缩文件为.bz2后缀
compress.bzip2://绝对路径/phpinfo.zip/phpinfo.php
压缩文件为.gz后缀
compress.zlib://绝对路径/phpinfo.zip/phpinfo.php

data://

data://伪协议可以通过请求提交的php代码数据配合文件包含函数可以达到代码执行效果。

data://伪协议 成功执行前提
php.ini设置allow_url_include 与allow_url_open都为On。

data://协议的格式是: data://数据流封装器,相应格式数据

 根据题目我们发现有include_once函数;
include_once():在脚本执行期间包含并运行指定文件。该函数和include 函数类似,两者唯一的区别是 使用该函数的时候,php会加检查指定文件是否已经被包含过,如果是,则不会再被包含。

于是我们进行伪造:

php://filter/convert.base64-encode/resource=flag.php

 即可得到一串字符,这里给大家补充一下base64的概念

Base64编码和解码的基本概念

  • 编码:将二进制数据转换为ASCII字符的文本格式。Base64编码使用64个字符(A-Z, a-z, 0-9, +, /)来表示数据。
  • 解码:将Base64编码的文本转换回原始的二进制数据。

最后我们base64解码即可获得flag

[SWPUCTF 2021 新生赛]easy_sql 

我们打开题目

 上面写了wllm是参数,那么这个题给参数可能是让我们sql注入。

https://download.csdn.net/download/m0_73951999/89721502icon-default.png?t=O83Ahttps://download.csdn.net/download/m0_73951999/89721502

这里给一个链接点进去就可以看到这道题怎么解sql的了。

这位大佬写的解题思路非常清晰,所以这里我就不过多赘述。

[SWPUCTF 2021 新生赛]easyrce 

题目如下:

解题思路如下:

我们可以发现是用的是exec()函数,无回显,并且是GET请求。

这里给大家补充一下知识,我们进入前看到标题REC这里给大家说一下

REC题目,常用的几个系统命令执行函数
system();
passthru();
exec();
shell_exec();
popen();
proc_open();
pcntl_exec();

这些都是php通过系统命令来查看文件内容比如我举个例子system("ls");这种通常在没有任何限制的情况下可以查看所有文件,但是题目肯定会设计一些困难,比如说不给你输入空格、=、#、&等这种特殊字符常常被限制,那么一般怎么绕过呢,我们可以这样子,空格在php执行中(不考虑版本的情况下)可以使用%20来代替,比如说system("ls /"); 时可以改为system("ls%20/"),a[]=1时可以改为a[]%=1,而#号可以使用%23来代替。(这里大家注意一下字符输入的时候一定一定要对,不然不会有反应甚至404)

好了回归正题,我们可以开始解了,根据上面已知的信息,我们可以先写一个?url=system("ls");发现是index.php那可能是让我们确定一下路径我们可以这样子写?url=system("ls /");

?url=system("ls20%/");我们也试一下

可以发现没问题, 然后我们看到的这些所有文件了

我们仔细看一下哪个像flag很明显是flllllaaaaaaggggggg,那么我们就要去这个路径下面的文件才能找到flag ,这里我们要使用cat或者是tac,这个我解释一下,这些都是查看的意思,简单来说就是通过执行cat或者是tac路径下的文件你们我们接下来如图所示,解题方法如下:

第一种通过?url=system("cat /f*");通过f*指针查找有关f的

第二种 ?url=system("cat20%/fflllllaaaaaaggggggg");替换空格也可以得到flag

第三种 ?url=system("cat20%/fflllllaaaaaaggggggg");

 第四种?url=system("cat20%/fflllllaaaaaaggggggg");

其实还有很多方法解出大家都可以试一下,这里我给大家拓展一下怎么用蚁剑做这道题

下面是中国蚁剑的资源:

https://download.csdn.net/download/m0_73951999/89724306icon-default.png?t=O83Ahttps://download.csdn.net/download/m0_73951999/89724306

GET请求url,看到eval就是蚁剑连接,但是它要POST请求才行,那就直接用一句话木马连接它

也就是利用eval这句话然后改成GER改成POST后面url改成传入的参数

像我这样子添加数据即可 node5.anna.nssctf.cn:26152/?url=eval($_POST['a']);然后在点击进去

点击fflllllaaaaaaggggggg文件后发现flag

这篇关于[SWPUCTF 2021 新生赛]web方向(一到六题) 解题思路,实操解析,解题软件使用,解题方法教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146843

相关文章

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析