争取每日一更吧,题库来源实验吧
0X01 2018-7-28(MD5注入)
这是个比较简单的一题
界面
- 老规矩先看页面源码吧
1 |
|
- 页面基于PHP,源码有句sql,如下:
1 | SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'" |
存在MD5的注入情况
- MD5注入
先来说一下md5()这个函数
md5(string, raw) raw 可选,默认为false
true:返回16字符2进制格式
false:返回32字符16进制格式
简单来说就是 true将16进制的md5转化为字符了,如果某一字符串的md5恰好能够产生如’or ’之类的注入语句,就可以进行注入了.
我需要把sql查询变成什么样呢?加入我正常情况输入123sql会变成什么样呢?and password = 'MD5加密的数据"
,我这里进行注入的话最简单的需要查询admin
表的所有用户,但是怎么查询呢?我需要or
语句,我这里找了一篇资料来自More Smoked Leet Chicken,里面提供了一个string
字符串ffifdyop
md5后 : 276f722736c95d99e921722cf9ed621c,转成字符串后 :'or'6<trash>
sql语句拼接为:
password = ‘XX’’or'6<trash>
6<trash>
在sql执行中把这节转从string转换为int到bool true
这样就完成了一个MD5的注入
2018-7-30 来自 CG-CTF 的签到题
2018-7-30 来自 CG-CTF 的MD5加密题
看代码应该是用GET请求,输入一个a的值,被MD5加密过后等于QNKCDZO加密后的值,但是a不能为QNKCDZO
第一次我想到是hash冲突,但是转过去一想hash冲突的可能太小了,最有可能的是PHP MD5函数的漏洞,一查果不其然,下面总结下:
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
有下面一些常见的payload:
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020所以这道题:
2018-7-30 来自 CG-CTF 的签到题2
下面是题目:
尝试复制粘贴
点击开门错了,想一下,密码又长又可以复制?不想让我对比? ok那我先把粘贴的密码展示出来
- 有点小阴险啊 密码长度手动改成11,在输入个n
2018-7-30 来自 CG-CTF 题目”这不是web”
- 下面是题目:
下面是进去过后的样子
一开始我找的源码没发现什么,在去找了找有没有目录遍历,也没有,后来我突发奇想GIF里面保存了信息?
我把图片保存下来,百度了一下GIF怎么保存string,没资料,后来我想,直接保存为txt试试?就出现了下面的情况- OK了,题目蛮有意思的,哈哈哈