安恒杯6月月赛部分解题报告
WEB
localview
- 题目描述
有个傲娇的管理员,只能从本地才能看到想要的~答案提交flag{}括号内的值。 -
解题步骤
1.打开网页是熟悉的图片
图片.png
2.查看源代码
图片.png
结合题目提示猜测本地访问,但是主页XFF访问结果一样
3.扫描目录发现存在admin.php页面,但是拒绝访问
图片.png
4.在请求头添加参数进行访问,这里有个坑,要加host参数,值为localhost
图片.png
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;
解题思路
- 首先访问页面,是代码审计题目,有flag.php文件,但是有过滤使用php的一个bug 绕过过滤读
flag.Php,二次url编码,绕过读取提示
php BUG:https://bugs.php.net/bug.php?id=76671&edit=1
图片.png
2.根据提示查看hosts文件
图片.png- 尝试访问临近ip ,发现内网服务器,发现是一个任意文件包含
-
但是没有其他服务,不好直接获取shell,于是扫描端口:
图片.png
发现 25 端口开放 smtp 协议, 于是思路为通过 gopher 打 smtp 协议,然后通过包含smtp 日志 来获取 webshell
- 使用 gopherus 生成 poc :
- 通过二次编码 gopher 协议攻击内网 smtp 服务,污染日志
- 通过 lfi 获取 webshell 在根目录下发现 flag
CRYPTO
石头剪刀布
- 题目描述
发现秘密了吗?答案提交flag{}括号内的值。 - 解题过程
通过nc连接发现是石头剪刀布的比较游戏,但是对手的手势顺序是伪随机数,一共20局,每次发送必须在限定的时间内,不然会报错,适合写脚本爆破
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
FLAG:flag{raI1fEnce_Easy}
你认识我吗?
- 题目描述
提交你找到的字符串的md5值,答案提交flag{}括号内的值。 - 解题过程
下载下来得打两份文件,一个是加密脚本,另外一个是输出的密文
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组,然后各组按照一定的排列顺序进行打乱,然后输出,秘钥决定打乱的顺序,因此根据单词的关联系,进行相应的调整,得到解密后的代码如下:
解密.pngFLAG: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
我的密码
解题过程
- 使用 file 命令查看三个文件,发现都是 windows 注册表文件 , 如下图所示 :
-
题目提到“我的密码”,想来应该是 windows 密码了,从注册表恢复 windows hash 可以使用 cain 工具或者 impacket 工具包
C ain 参考 https://wenku.baidu.com/view/63cca30a0166f5335a8102d276a20029bd646368.html -
使用 impacket 工具包中的 secretsdump.py 文件即可得到 windows hash ,如下图所示:
接下来就是破解 hash 了,可以使用 john 直接破解( emm ... .. ,我 john 出了点问题
因为 windows hash 被截成两部分, LMhash 和 NTLMhash , 所以 将 NTLM 部分放到https://www.cmd5.com/ , 类型选择 NTLM , 即可得到破解后的密码 (经过测试,只有