少女祈祷中...

[TOC]

2023 SHCTF web wp[week 1]

说明:可能稍微啰嗦了亿点,面向新生,放心慢慢食用,

下面前言可跳过(纯多bb了一下)

前言

首先说web的话是应用层,所以会基本看不到底层的东西(包括c语言/c++)。对于ctf的话,web这块的内容,熟悉HTTP协议(知道计算机质之间是如何传递数据的),html.javaScript(前端语言)是必须要会一点,然后入门级的PHP也要会(比java简单多了),然后就是Top10漏洞(其中还会涉及数据库mysql),也要知道一些常用的编码和加解密手段(Unicode、md5、base64),会这些后web也算入门了(看到这,要是我,已经当场去世)

这里再说说why(hihi,装一下):为什么要搞web 安全,在这互联网的世界,我们能享受各种各样的服务(qq聊天、刷视频),都离不开web技术,所以web里面也有很多技术(常听的前端和后端),所以就会有许多的漏洞存在,对于企业、学校等等来说web服务器就是面向大伙大门,想要攻入内部系统,首先要拿下web服务器(bushi) ,所以web这块对于整个渗透攻击或者安全防御都重要,企业看重web这块的安全比内网多多了,这里再插一条:2021爆出的史诗级漏洞–log4j2远程代码执行漏洞(CVE-2021-44228)

从易到难(前三个不好排),题解可能会不唯一,拿到flag就行,下面题目若是看不懂题解,也不要紧,把涉及的知识点记下来,以后慢慢学(hhhh)

前几题不一定要有编程基础!

[WEEK1]登录就给flag

前置知识:弱口令、暴力破解、(http协议、 抓包)

先bb一下(这里主打一个实操):

什么是弱口令:就是很容易会被猜到的口令(不一定是密码),比如说常见的弱口令密码:123456、admin、password、000000...

什么是暴力破解:简称爆破,大白话就是一个一个去试,当然一般不会是人工,拿着工具或者编程语言脚本去跑。

拿什么去试?:一般会有人把常见的密码或者用户名等测试语句存放在一个文本文件里面,这个通常叫作字典,github上有开源的字典(一搜便是),当然 也可以自己搜集制作自己的字典

这里再插一条:admin (后台)管理员的意思,后台管理员是网站中能够控制管理内容的角色(如别人提交发布文章、视频、监控网站等等),有最高权限,一般就是网站登录的特殊用户(有些可能会有后台管理系统),在现实中和ctf中,无疑管理员的账号可能会是admin(有时候密码也是) 所以第一测试的用户名就是admin

回到题目

这题就是登录时有弱口令漏洞

进入登录页面

上面bb了,这里username用户名直接测试admin

至于密码,开头可以首测几个弱口令 ,运气好就测出来了(hhh)、本题弱口令密码–password(我是没那运气),登录成功后就有flag

下面进入常规的爆破密码解法(没运气的看这边)

这里我用的工具是Burp Suite (web和渗透必备),没安的kali上面自带,安装需要java环境(burp安装稍微复杂,但必备)

使用burp抓包送至Intruder模块进行暴力破解(b站上有教程),并对我们输入的密码部分进行标记(标记后前后都会有$)

设置payload(不想解释了),点load加载字典文件(自己网上搜),若右边有内容说明加载成功,说明加载成功,最后点击Start attack开始攻击

等他跑完,最后可以根据Status code(状态码)和Length(返回长度)找出那与众不同的那条,发现password就是密码,拿去登录拿flag

[WEEK1]生成你的邀请函吧~

前置知识:http协议、json*

这个题,题目描述就告诉我们该怎么做了

根据他的描述请求就行。请求接口为generate_invitation

实体类型:application/json

请求方式为POST、请求实体就是上面的Body,这里其实就是一个标准的请求接口,传递json数据,获得一张图片

下面分别展示插件Ha

ckbar和Burp Suite抓包改包(选一个有的就行)

Hackbar

1.设置URL 2.设置POST请求 3.设置类型为json数据 4.加上json数据

Burp Suite

抓包,然后改成这样,再放包

最后打开图片,flag就在下面

[WEEK1]飞机大战

前置知识:html、javascript、unicode编码、base64

右键查看源代码 ,找到引用的js文件,点击查看js文件源码

看到这个函数,应该是游戏赢了后执行的,里面有一窜奇怪的字符

这串字符其实就是unicode编码,十有八九就是flag,将其进行解码

拿到:ZmxhZ3s0MzAxMTk1ZS05MWE5LTQ0Y2ItYjk4NC0wMjQ4ZGQ3MWRhYTB9

好家伙,搁这玩套娃(出题人出来挨打),这层实际是base64加密,这些加解密,网上都有在线的

再解base64,得到flag

>

接下来的题目需要会编程语言(PHP)、漏洞基础!

PHP是世界上最好的语言…….十分合理(hh),比java简单多了(虽然现在java是主流,不建议入门就学)

[WEEK1]babyRCE

前置知识: http协议、 php入门,Linux系统命令(会查看编辑文件、熟悉目录结构), 代码执行漏洞(RCE)以及相关绕过和防御、正则表达式

首先不得不说现在的服务器(古老的除外)。都基本是Linux,所以涉及这个漏洞的时候就要熟悉Linux指令

这题纯粹的RCE,这题解法应该有很多,说其中一种

代码解析:首先获取GET传参rce,然后对我们传的参数进行了正则过滤、没有过滤字符才会把我们传的参数进行系统命令执行

它过滤了cat 、more、less、ead、tac、tail、nl、od、vi、vim、sort、flag|、;|0-9、*、`、%、>、<、’、” 还有空格

首先ls查看当前web目录下的文件

这些就不能直接出现我们输入的参数里面。空格这里用%09代替(tab键的url编码)

cat和flag 再其中加入\就行 ,?rce=c\at%09./f\lag.php 查看flag.php文件

看不到内容,查看源代码

好好好,被出题人给骗了(出来受打)看看根目录有没有flag

到后面应该算得上中等题了,这里知识储备就多了,好好好,这是新生赛

[WEEK1]ez_serialize

前置知识:PHP类与对象、PHP魔术方法、PHP反序列化漏洞、POP链、文件包含漏洞、php伪协议

PHP反序列化的题主打一个代码审计(看代码),好好好,代码多的时候当场去世

,先马代码,序列化和反序列化不多说了,主打套娃反复横跳

这里代码审计和魔术方法不多说了,说下pop利用链

1.最外层是B类的对象,触发__wakeup方法,

2.q属性是C类的实例对象,触发__toString方法

3.C中属性var是D类的实例对象,触发__get方法

4.D中的属性p是A类的实例对象,触发__inovke方法

5.A中属性var_1是我们要包含的文件;最后利用文件包含漏洞

这里利用php://filter和文件包含漏洞来读取flag.php文件

上序列化代码

<?php
class A
{
public $var_1;
}
class B
{
public $q;
}
class C
{
public $var;
public $z;
}
class D
{
public $p;
}
$b = new B();
$c = new C();
$d = new D();
$a = new A();
$a->var_1 = "php://filter/read=convert.base64-encode/resource=flag.php";
$d->p = $a;
$c->z = $d;
$b->q = $c;
echo serialize($b);

执行上面代码得到序列化字符串

O:1:"B":1:{s:1:"q";O:1:"C":2:{s:3:"var";N;s:1:"z";O:1:"D":1:{s:1:"p";O:1:"A":1:{s:5:"var_1";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}}}}

得到文件内容, PD9waHANCiRmbGFnID0gImZsYWd7NzZmZmExNWYtY2YxOS00ZTMwLTk3ZDEtNTdlMmQ5Yjg3MDJlfSI7DQo= 进行base64解密得到flag

flag{76ffa15f-cf19-4e30-97d1-57e2d9b8702e}

[WEEK1]1zzphp

前置知识:正则表达式、php代码审计、php正则函数绕过、(python)

这里顺便提一下PHP的弱类型比较,可以学习学习

这题真不一定能get到(出题人出来挨打),遇到的才有思路(我也学到了)

首先代码审计,主要分为两部分

第一部分:正则过滤了num中的数字,但没有数字无法进入下一部分

这里给num传个数组(?num[]=1)就行,preg_match 遇到数组会返回null

第二部分:c_ode需要2023SHCTF ,但又不能出现SHCTF,

这里只能绕过preg_match函数

需要补充知识:

看看大佬p神的文章:PRCE回溯攻击

总之一句话:超长字符串引发php安全机制,从而绕过preg_match 函数

上python脚本自动构造超长字符(好好好,这题c_ode长度达到了1000000的级别才行)

import requests
#pip 安装一下库
#改成自己题目的url
url="http://112.6.51.212:30932/"
data={
"c_ode":"s"*1000000+"2023SHCTF"
}
res=requests.post(url+"?num[]=1",data).text
print(res)

运行代码,最后得到flag

[WEEK1]ezphp

前置知识:php、代码执行漏洞、phpinfo、正则表达式、preg_replace代码执行

好好好,做到这个题,原来我也是新生(太菜了,呜呜~)

上题目

前面正则过滤了好多东西,暂且不管,这题只要出phpinfo页面就行了

关键是圈出部分

这个我见的少(可能是第二次见),直接码文章:

深入研究preg_replace与代码执行 | Mochazz’s blog

preg_replace这个函数原本是利用正则表达式替换符合条件的字符串,但是这个函数有一个功能——可执行命令。这个函数的第一个参数是正则表达式,按照PHP的格式,表达式在两个“/”之间。如果我们在这个表达式的末尾加上“e”,那么这个函数的第二个参数就会被当作代码执行。

总之,/e模式下正则表达式代码执行(这里可以用在php的一句话木马中)

解析题目代码:

pattern为匹配模式,code为匹配字符串,\1 其实是一个引用,指向code参数

上payload

code为格式{${要执行的代码}}(官方payload就是这样的,我也没深入研究,先拿来用) 只要匹配成功就能执行code代码,所以pattern为(.*),意为匹配所有。

匹配成功后执行代码,显示phpinfo页面

再ctrl+f 搜索flag就能找到flag

后话

新生赛,也大概体会了一下ctf,不仅局限于ctf,学web和二进制等方向还是看自己兴趣,凭着ctf也可以研究好web安全(前期)

web方向确实面向现实一点,是渗透测试的基础,web安全方向知识的也会常常出现在绝大多安全岗位的面试题