• 一个网络设备的常见功能--连通性检查SSRF漏洞--被黑客利用当做扫描器


    一、我们先来看一下很多网络设备都有的一个常见功能--连通性测试:

    很多网络设备都具备与其他设备通信,联动的功能,例如网络设备联动安全设备,网络设备联动认证设备等等。此时都需要一个对端IP和对端端口号作为配置依据。而且一般都有连通性测试功能,作为配置运维人员检查的工具,但是如果没有做好,就会成为攻击者的一款扫描器:

    二、我们来看看如何实现这类功能:

    1-views.py

     1 def ping(request):
     2     if request.method not in ["POST","GET"]:
     3         return HttpResponseRedirect("/myapp1/ping")
     4     if request.method == "GET":
     5         return render_to_response("ping.html")
     6     if request.method == "POST":
     7         try:
     8             ipaddr = request.POST["ip"]
     9             port = int(request.POST["port"])
    10         except Exception,reason:
    11             return HttpResponse("parameters error,reason:%s"%str(reason))
    12         sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    13         try:
    14             sock.connect((ipaddr,port))
    15             sock.close()
    16             return HttpResponse("OK")
    17         except Exception,reason:
    18             sock.close()
    19             return HttpResponse("No")

    2-urls.py

     1 urlpatterns = [
     2     # Examples:
     3     # url(r'^$', 'mysite1.views.home', name='home'),
     4     # url(r'^blog/', include('blog.urls')),
     5     #url(r'^login/', "myapp1.views.login"),
     6     #url(r'^sql/', "myapp1.views.sql_injection"),
     7     #url(r'^mainpage/', "myapp1.views.main"),
     8     #url(r'^verifycode/', "myapp1.views.verify"),
     9     #url(r'^update/', "myapp1.views.update"),
    10     #url(r'^session/', "myapp1.views.sessioncheck"),
    11     url(r'^ping/', "myapp1.views.ping"),
    12     #url(r'^register/',views.register.as_view()),
    13     #url(r'^game/',views.savegame.as_view()),
    14 ]

    3-ping.html

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <title>网站连通性测试</title>
     5 </head>
     6 <body>
     7     <center>
     8         <form action="http://127.0.0.1:8000/myapp1/ping/" method="post">
     9             <p>IP地址:<input type="text" name="ip"/></p>
    10             <p>端  口:<input type="text" name="port"/></p>
    11             <input type="submit" value="测试">
    12 
    13         </form>
    14     </center>
    15 </body>
    16 </html>

    来看功能截图:

    结果如下:

    反之亦然,我们来看:

    结果如下:

    很明显我们可以构造脚本,对此进行利用,做到内网探测,寻找开放端口,本来一个好好的功能就变成黑客手里的工具了。

    如何利用,太简单了,写一个脚本构造post报文,探测就可以了:

    1 #随便写一个利用的demo代码:
    2 import requests
    3 
    4 def send(ip,port):
    5     response = requests.post("http://127.0.0.1/myapp1/ping",data={"ip":ip,"port":port})
    6     if response.content.find("OK") >= 0:
    7         return "open"
    8     else:
    9         return "filter"

    三、防御这类问题:

    首先要明确是的的确确是一个SSRF漏洞,第二点明确这的的确确是一个需求。

    防御的办法:

    1、加一个频率限制,缓解措施。

    2、加一个验证码,基本可以杜绝扫描一类的恶意利用。

  • 相关阅读:
    UML实践
    “学士之路”系统设计
    团队采访
    《软件需求规格说明书》 ---学士之路
    奇怪的bug,不懂Atom在添加markdown-themeable-pdf,在配置好phantomjs的情况下报错
    团队项目-“学士之路”展示
    学习Mybatis的两个必须的jar包分享
    Spring MVC controller的方法返回值
    Spring的Controller映射规则
    servlet基础学习总结
  • 原文地址:https://www.cnblogs.com/KevinGeorge/p/8459356.html
Copyright © 2020-2023  润新知