为了了解PHP、JSP、ASP出现之前人们写 站的方法,洒家研究了一波CGI,使用C、Python、batch、shell script语言写了几个简单的 页。
CGI即通用 关接口,指web服务器调用编程语言编写的程序的一个接口。洒家用的是Apache的CGI,QUERY_STRING、REMOTE_ADDR、REQUEST_URI等参数是通过环境变量传递给CGI程序的,请求主体(POST数据)作为CGI程序的标准输入(stdin),而CGI程序的标准输出(stdout)作为HTTP响应的部分(注:标准错误输出stderr会出现在错误日志中)。
系统和软件环境配置
WAMP Apache 2.4.18 64位, Ubuntu Server 16.04 64位。
需要开启Apache的cgi_module。
sudoa2enmod cgisudo service apache2 restart
对于Linux,cgi-bin的目录在 /etc/apache2/conf-enabled/serve-cgi-bin.conf 中规定,使用浏览器访问这个目录的alias:/cgi-bin/。对于Windows 下的WAMP套件,对应目录默认在安装目录内(例如C:/wamp64/cgi-bin/)。
Date: Sun, 23 Oct 2016 13:10:01 GMT
Server: Apache/2.4.18 (Ubuntu)X-Author: http://www.cnblogs.com/go2bed/
Vary: Accept-Encoding
Content-Length: 1180
Connection: close
Content-Type: text/html
SERVER_SIGNATURE=
Apache/2.4.18 (Ubuntu) Server at 192.168.245.136 Port 80HTTP_USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7
SERVER_PORT=80
HTTP_HOST=192.168.245.136(省略)
intmain()
{
printf(“Content-Type: text/htmlnn”);
printf(“Hello World!n”);return 0;
}
一个 say hello 的动态 页
Linux/Windows,Python ,头部需要加Python可执行文件的位置。对于Windows,则可能是 #!C:/Python27/python.exe 。
效果如下图。此程序读取POST数据(stdin),Tom未在URL中出现。
intmain()
{inti;char *query;
query= getenv(“QUERY_STRING”);
printf(“Content-type:text/htmlnn”);if(getenv(“QUERY_STRING”) != NULL && strlen(getenv(“QUERY_STRING”)) > 5)
{
printf(“
Hello %s
n”, query + 5);
}
printf(“
“);return 0;
}
执行任意命令的Webshell,及其过程与经验
Linux,shell script
效果:
这个错误输出和下面的情况的输出相同:
经过一番研究之后洒家恍然大悟,这个 错表示,Python收到的参数(sys.argv[2])为 ‘import ,单引 的作用不是命令行中参数的边界,而是直接作为参数的一部分传进了Python。也就是说,直接执行 ${cmd} 相当于Python中的
subprocess.call([“python”,”-c”,”‘import”,”this'”])
一个字符串变量直接执行会有问题,正确的做法要用eval命令“扫描两次”,才能正确解析。使用 eval ${cmd} 使shell重新扫描命令,把 import 和 this看做同一个参数,相当于 subprocess.call([“python”,”-c”,”import this”]) 。
总而言之,这次的错误类似于这种情况:
使用Windows batch script(批处理)写的一个功能有限的webshell
批处理,这个的坑也有点多,而且洒家也不太熟悉,只能写这么多了。
相关资源:基于单片机的智能灌溉喷洒系统的设计_单片机灌溉喷头-单片机文档…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!