1、题目
2、解题方法
payload: 先构造payload?1=>nl然后?1=*就可以了,右键查看源代码得到flag
3、原理
- ?1=>nl 的含义:这是一个 HTTP GET 请求参数,意思是向该 PHP 脚本传递一个名为 1 且值为 nl 的参数。
原理:当传递 ?1=>nl 时,strlen( $ _GET[1]) 的值为2(nl 的长度是 2),小于 4,满足 if条件。于是,shell_exec($_GET[1]) 会执行 nl 命令。nl 是一个 Linux命令,用于为文件中的行编号。执行此命令可能是为了查看当前目录下文件的列表,以此确定可能包含 flag 的文件。
- ?1=* 的含义:同样是一个 HTTP GET 请求参数,传递一个名为 1 且值为 * 的参数。
原理:当传递 ?1=* 时,strlen($ _GET[1]) 的值为 1(* 的长度是 1),小于 4,满足 if条件。shell_exec($_GET[1]) 会执行 * 命令。在 Linux 系统中,* 是一个通配符,代表任意数量的任意字符。这里执行* 命令,实际上是尝试执行当前目录下的所有可执行文件。执行后,可能会触发某些文件输出包含 flag 的内容,不过这些内容可能被隐藏在页面源代码里。
- 右键查看源代码得到 flag
原理:执行上述命令后,包含 flag 的内容可能不会直接显示在页面上,而是被隐藏在 HTML 源代码中。所以需要右键查看页面源代码,从中找到
flag。