jinjia2模版语法

jinjia2语法

变量

jinjia2中的变量需要借助占位符来显示,举个例子:

{{config}}

在上述例子中,{{}}```是占位符,config是一个变量。 ### 过滤器 过滤器大致相当于一个字符串处理函数,可以对要显示的字符串进行修改。举个例子: ```{{'abc'|upper}}

在上述例子中,upper是一个过滤器,过滤器和要处理的内容用|分开。上述过滤器的用法为将字符串显示为大写。

常用的过滤器有:

  • lower:把字母都转为小写
  • upper:把字母都转为大写
  • title:把每个单词的首字母都变成大写
  • join:进行字符串拼接,比如{{path|join('/')}}
  • replace:替换字符串,比如{{'a1b1c1'|replace('1',' ')}}
  • safe:对字符串不进行转义操作,原样输出。这个过滤器有些危险,使用不慎可能导致注入产生

过滤器是可以连续使用的,比如{{'hello world' | replace('world','guest') | title}}

注释

jinjia2中的注释使用{# #}来表示,两个#中间的内容可以用来写注释。

OAI代码审计

NAS层代码审计笔记

UE部分

UE部分的代码和COMMOM部分的结构基本一致,按EMM和ESM两部分信令进行分类,每个EMM和ESM文件夹中又分为若干个源文件,里面包含了若干个信令的具体实现。下面是一些对研究可能有帮助的文件。

EMM/SAP/emm_send.c

emm_send.c部分包含以下函数,每个函数的返回值基本都是消息的大小(size)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
* --------------------------------------------------------------------------
* Functions executed by both the UE and the MME to send EMM messages
* --------------------------------------------------------------------------
*/
int emm_send_status(const emm_as_status_t *, emm_status_msg *);

int emm_send_detach_accept(const emm_as_data_t *, detach_accept_msg *);

/*
* --------------------------------------------------------------------------
* Functions executed by the UE to send EMM messages to the network
* --------------------------------------------------------------------------
*/
int emm_send_attach_request(const emm_as_establish_t *, attach_request_msg *);
int emm_send_attach_complete(const emm_as_data_t *, attach_complete_msg *);
int emm_send_initial_detach_request(const emm_as_establish_t *,
detach_request_msg *);
int emm_send_detach_request(const emm_as_data_t *, detach_request_msg *);
int emm_send_initial_tau_request(const emm_as_establish_t *,
tracking_area_update_request_msg *);
int emm_send_initial_sr_request(const emm_as_establish_t *,
service_request_msg *);
int emm_send_initial_extsr_request(const emm_as_establish_t *,
extended_service_request_msg *);
int emm_send_identity_response(const emm_as_security_t *,
identity_response_msg *);
int emm_send_authentication_response(const emm_as_security_t *,
authentication_response_msg *);
int emm_send_authentication_failure(const emm_as_security_t *,
authentication_failure_msg *);
int emm_send_security_mode_complete(const emm_as_security_t *,
security_mode_complete_msg *);
int emm_send_security_mode_reject(const emm_as_security_t *,
security_mode_reject_msg *);

各个函数的作用如下:

rip题目详解

解题过程

将题目文件拖入ida进行反汇编,查看main函数的内容。

1
2
3
4
5
6
7
8
9
10
int __cdecl main(int argc, const char **argv, const char **envp)
{
char s; // [rsp+1h] [rbp-Fh]

puts("please input");
gets(&s, argv);
puts(&s);
puts("ok,bye!!!");
return 0;
}