通过CGI实现在Web页面上执行shell命令
来源:互联网 发布:java 设置特定时间 编辑:程序博客网 时间:2024/05/16 19:03
今天无意中发现,URL中的查询字符串,不一定非要是xxx=yyy&aaa=bbb格式,服务器将URL中问号后的查询字符串赋给名为QUERY_STRING的环境变量,然后调用可执行的脚本或二进制文件执行,将其标准输出返回给客户端。
所以我想可以直接把shell命令作为URL输入,返回shell执行的输出。试了下,果然可以。
下面说明一下实现步骤:
1。安装linux与服务器,启动服务器
2。服务器通常会有一个www/cgi-bin的目录,我在这里放一个shell脚本,名为test2
#!/bin/shalias urldecode='sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b"'echo -e "Content-type: text/plain\n"decoded_str=`echo $QUERY_STRING | urldecode`echo `$decoded_str`
一共就5句:
第1句表示是shell脚本,实际上不加也可以,因为shell是默认的脚本。
第2句我网上抄的,具体原理也不懂,作用是解码URL, 当URL中有空格时,从客户端传过来会变成%20, 20是空格的16进制ASCII码。
第3句是必须的,否则在客户端调用时就出错,是http协议规定的。
第4句就是将URL解码
第5句是执行命令并返回给客户端
然后在浏览器中输入URL:127.0.0.1/cgi-bin/test2?pwd
结果为 /var/www/cgi-bin
这样直接通过URL对用户不友好,但给前端提供了接口,于是我又写了个html文件,放在www/html文件夹中,名为test.html
<html><head><script>function httpGet(url){ var xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", url, false); // false: wait respond xmlHttp.send(null); return xmlHttp.responseText;}function f(){ var url = "http://127.0.0.1/cgi-bin/test2?" + document.getElementById('in').value; document.getElementById('out').innerHTML = httpGet(url);}</script></head><body><span>command </span><input id='in'></input><button onclick='f()'>send</button><br/><pre id='out'></pre></body></html>
两个js函数,httpGet是网上抄的,f是点击按钮的回调函数,主要两句,第1句获取用户输入并加上前缀组成url,第2句调用httpGet函数并将返回输出。
使用时,浏览器中输入127.0.0.1/test.html,效果如图
当然,这样直接把shell接口暴露在外很危险,但这适合给一些在局域网里面的设备作接口,就是嵌入式设备,可以把url做成二维码,直接扫码访问(当然127.0.0.1要改成局域网IP)。
阅读全文
1 0
- 通过CGI实现在Web页面上执行shell命令
- 用c写cgi程序,不能在cgi程序中执行shell命令
- WEB服务器:在IIS上实现python CGI
- Shell下通过echo+telnet在远端执行命令
- linux 通过shell脚本在本地执行远程机器命令
- 在WEB页面上实现进度条
- 在IPCam上搭建WEB服务并通过CGI交互的相关问题
- 实践操作整理:嵌入式linux上通过boa服务器实现cgi的web上网
- 嵌入式Linux上通过boa服务器实现cgi/html的web上网(转)
- 嵌入式Linux上通过boa服务器实现cgi-html的web上网
- 嵌入式Linux上通过boa服务器实现cgi/html的web上网
- 嵌入式Linux上通过boa服务器实现cgi/html的web上网
- 嵌入式Linux上通过boa服务器实现cgi/html的web上网(转)
- IIS上通过python的CGI模块 执行python脚本
- 在android执行shell命令
- 使用Qt通过cgi导入文件并显示在页面上并做类似Action功能的跳转
- 通过Java代码执行shell命令/脚本
- 通过nova.utils.execute 执行shell命令
- 【模板】左偏树
- 第一章 Linux系统入门
- 52 C语言关系运算符
- 备忘 :android studio 快捷键大全
- jdbc中PrepareStatement与Statement的优点
- 通过CGI实现在Web页面上执行shell命令
- Oracle的分页查询两种形式
- 初学类加载器
- ARM NEON常用函数总结
- bzoj 3233: [Ahoi2013]找硬币 动态规划
- Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
- 多线程-线程控制之加入线程
- java常用视频资料汇总
- 【BZOJ】3036 绿豆蛙的归宿 期望DP