菜鸟渗透日记41--python渗透测试编程之对web应用进行渗透测试3

目录

 

编写Web服务器扫描程序

暴力扫描目标服务器上所有页面

推荐阅读


编写Web服务器扫描程序

之前讲过。如何检测一台主机上的80端口是否开放菜鸟渗透日记30---python渗透测试编程之信息收集2-端口扫描,但是这种检测不一定能够可靠地检测数目标主机是否真的提供web服务。因为实际情况中,目标主机可能完全开放80端口,但是将服务架设在其他端口上。那么我们如果能够对目标服务器发起一个HTTP请求,并得到回应,就可以肯定这台服务器提供了Web服务。这个程序也可以使用GET和HEAD方法来完成。

这里讲一下通过GET方法来完成

import urllib2
import sys
if len(sys.argv) != 2:
    print "Usage : testURL \n eg: testURL http://192.168.65"
    sys.exit(1)
URL = sys.argv[1]
response = urllib2.urlopen(URL)
print response.info()

菜鸟渗透日记41--python渗透测试编程之对web应用进行渗透测试3_第1张图片

这就表示目标地址上运行着Web服务,测试一下没有运行Web服务的地方

出现如下错误

URLError:

还有可能防火墙的问题还会出现

接下来把这段代码修改一下,如果目标服务器提供web服务,得到response,如果没有,就用except来捕获这个错误。然后输出没有运行Web服务。

import urllib2
import sys
if len(sys.argv) != 2:
    print "Usage : testURL \n eg: testURL http://192.168.65"
    sys.exit(1)
URL = sys.argv[1]
print "[*] Testing %s" % URL
try:
    response = urllib2.urlopen(URL)
except:
    print("[-] No web server at %s") % URL
    response = None
if response != None:
    print "[*] Response from %s" %URL
    print response.info()

执行这个程序,得到的结果如下。

菜鸟渗透日记41--python渗透测试编程之对web应用进行渗透测试3_第2张图片

简单介绍一个使用HEAD方法来完成对目标的检测。相比较于GET方法来说,使用HEAD方法只会更快速。HEAD方法的特点如下。

1)只请求资源的首部;

2)检查超链接的有效性;

3)检查网页是否被修改;

4)多用于自动搜索机器人获取网页的标志信息,获取RSS种子信息,或传递安全认证信息。

使用HEAD来完成这个功能,与GET方法相同,只需要在Request时,指定方法为“HEAD”即可。

import urllib2
import sys
if len(sys.argv) != 2:
    print "Usage : testURL \n eg: testURL http://192.168.65"
    sys.exit(1)
URL = sys.argv[1]
print "[*] Testing %s" % URL
try:
    request = urllib2.Request(URL)
    request.get_method = lambda : 'HEAD'
    response =urllib2.urlopen(request)
except:
    print("[-] No web server at %s") % URL
    response = None
if response != None:
    print "[*] Response from %s" %URL
    print response.info()

暴力扫描目标服务器上所有页面

这块儿有很多工具可以实现,比如御剑、dirb等等。这里我们手写一款用来进行目录扫描的脚本,当然,任何扫描工具都依赖于各种各样的字典。这个请大家自行收集。工具的原理也很简单,常见的页面起的名字大都是相同的,通过字典文件,然后使用目标服务器地址和这个字典文件的表项组合,使用get方式进行测试,如果得到回应,说明目标服务器上存在这个页面,否则目标服务器上没有这个页面。

简单写一个用来测试http://192.168.65.142 上是否存在一个名为“js”的页面

菜鸟渗透日记41--python渗透测试编程之对web应用进行渗透测试3_第3张图片

现在换一个页面,发现

现在用try和except来判断这个页面是否存在,如果except捕捉到错误,可以认为这个页面不存在。另外可以使用字典。

经过修改后的程序如下:

import urllib2,sys,argparse
def host_test(filename,host):
    file = "common.txt"
    bufsize = 0
        e = open(file,'a',bufsize)
    print("[*] Reading file %s") %(file)
    with open(filename) as f:
        locathions - f.readlines()
    for item in location: 
        target = host + "/" + item 
        try:
            request = urllib2.Request(target)
            request.get_method = lambda : 'GET'
            response = urllib2.urlopen(request)
        except:
            print("[-] %s is invalid") % (str(target.rstrip('\n')))
            response = None
        if response != None:
            print "[+] %s is valid" %(str(target.rstrip('\n')))
            print response.info()
            details = response.info()
            e.write (str(details))
    e.close()

关于扫描的一些题外话,涉及到扫描都要考虑多线程问题,我的所有文章受限于本人自身的水平问题,只从基础入手,后续可能会有一些进阶的操作。好了,这个系列暂时就更新到这里。拜拜!

推荐阅读

这次更新是python系列的最后一次更新了。python学习无止无尽,而在渗透测试这块更是有很多应用。我仅仅写出来一点很少的部分,还有很多书籍推荐,比如李华峰老师的Python渗透测试编程技术、Justin Seitz大牛的Python黑帽子:黑客与渗透测试编程之道等等的书籍,李华锋老师的书倾向于基础,后面这本更深入。建议学习思路从简到难。

你可能感兴趣的:(python渗透测试编程,kali渗透测试,python)