工作生活

安恒杯6月月赛部分解题报告

2019-07-02  本文已影响0人  蓝小俊

WEB

localview

FLAG:flag{h0st_And_iP_a1l_faKe}

easypentest

题目描述

 <?php
highlight_file(__FILE__);
$x = $_GET['x'];
$pos = strpos($x,"php");
if($pos){
        exit("denied");
}
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"$x");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
echo $result;  

解题思路

  1. 首先访问页面,是代码审计题目,有flag.php文件,但是有过滤使用php的一个bug 绕过过滤读
    flag.Php,二次url编码,绕过读取提示
    php BUG:https://bugs.php.net/bug.php?id=76671&edit=1
    图片.png

2.根据提示查看hosts文件

图片.png
  1. 尝试访问临近ip ,发现内网服务器,发现是一个任意文件包含
图片.png
  1. 但是没有其他服务,不好直接获取shell,于是扫描端口:


    图片.png

发现 25 端口开放 smtp 协议, 于是思路为通过 gopher 打 smtp 协议,然后通过包含smtp 日志 来获取 webshell

  1. 使用 gopherus 生成 poc :
图片.png
  1. 通过二次编码 gopher 协议攻击内网 smtp 服务,污染日志
图片.png
  1. 通过 lfi 获取 webshell 在根目录下发现 flag
图片.png

CRYPTO

石头剪刀布

from pwn import *
flag="211200012210120121120"
sh = remote("101.71.29.5",10003)
def sendflag(flag):
    sh.recv()   
    for i in flag:
        sh.sendline(i)
        print sh.recv()
    sh.close()

sendflag(flag)

逐位爆破,最后将结果拼接出来得到f{1calrfesaaE_ygInE}
猜测是栅栏密码,进行解密得到flag

图片.png

FLAG:flag{raI1fEnce_Easy}

你认识我吗?

from message import plainText
from message import key

pla_len = len(plainText)
key_len = len(key)

print "plainText length is %d" % pla_len
print "key length is %d" % key_len

pla_matrix = []
for i in range(0,pla_len,key_len):
    pla_matrix.append(list(plainText[i:i+key_len]))

ord_key = []
for k in key:
    ord_key.append(ord(k))

ord_key = sorted(ord_key)

output_order = []

for i in ord_key:
    output_order.append(key.find(chr(i)))

for i in output_order:
    for s in pla_matrix:
        print s[i],
    print "\n"

算法的步骤大概是把明文共计77个字母分成7组,然后各组按照一定的排列顺序进行打乱,然后输出,秘钥决定打乱的顺序,因此根据单词的关联系,进行相应的调整,得到解密后的代码如下:

解密.png

FLAG:flag{You_Are_Amazing}

MISC

日志分析脚本
分析日志,可以找到盲注的重点在 361 行开始, mid 函数从第一个字符,每次截取一个字符,一直 到结束,每次尝试范围都是 0 - 9 , a - z,{}, 延时 3 秒,观察发现如果盲注正确的话,两条盲注语句都是在同一时刻,将 361 行之后的 sql 盲注内容复制到文本文件当中 ,首先 url 解码


图片.png

那么将时间间隔设置为 0 秒或者 1 秒,就得到了正确的结果


图片.png
先对原来的日志进行URL解码,然后进行相应的处理,根据前后两次的访问时间进行判断是否进行延时
i = 0 
tmp = ""
flag = ""
f2 = open("data.txt")
for line in f2:
    if i==0:
        tmp = line
        i=i+1
        continue
    i=i+1

    print(tmp[36:38])
    if tmp[36:38]==line[36:38]:
        if tmp[145]=="'":
            flag+=tmp[146]
        else:
            flag+=tmp[145]
    tmp = line

print(flag)
p = "50f1ea7cf1544106e3555ccc2cf4087"
print(len(p))

有一个坑,第28位前后两个间隔1秒,最终

FLAG:50f1ea7cf1544106e3555c4cc2cf4087

我的密码

解题过程

  1. 使用 file 命令查看三个文件,发现都是 windows 注册表文件 , 如下图所示 :
图片.png
  1. 题目提到“我的密码”,想来应该是 windows 密码了,从注册表恢复 windows hash 可以使用 cain 工具或者 impacket 工具包
    C ain 参考 https://wenku.baidu.com/view/63cca30a0166f5335a8102d276a20029bd646368.html

  2. 使用 impacket 工具包中的 secretsdump.py 文件即可得到 windows hash ,如下图所示:

图片.png
接下来就是破解 hash 了,可以使用 john 直接破解( emm ... .. ,我 john 出了点问题
因为 windows hash 被截成两部分, LMhash 和 NTLMhash , 所以 将 NTLM 部分放到https://www.cmd5.com/ , 类型选择 NTLM , 即可得到破解后的密码 (经过测试,只有
上一篇下一篇

猜你喜欢

热点阅读