CTF之懵懂时期系列---后台登录

自己发现一种创新的攻击方式不适于现在的学习成长。现在最主要的任务是:多见各种题型、动手实践、总结思路、记录思路下的具体步骤。总之就是,做的广、记得多。目前绝不提倡创新。

参考资料:http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/

在实验吧这样这道题:http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
CTF之懵懂时期系列---后台登录_第1张图片
一看到这样的输入框,就立马想到了SQL注入,为什么?登录口令肯定需要和数据库验证的。

于是查看页面源代码:
CTF之懵懂时期系列---后台登录_第2张图片
这两句话是关键:
$ result=mysqli_query($ link,$ sql);
if(mysqli_num_rows($result)>0)
也就是说,查询的结果大于0,就可以绕过去了,我们看下他暴露的语句:

“SELECT * FROM admin WHERE username = ‘admin’ and password = '”.md5($password,true)."’"

所以这里,只要我们能够组造出’or’(xxx)'的语句,就能够成功注入。
使用的加密方式是md5($password,true),16位原始二进制的字符串。

问题在于,如何找到这样一个解密后能够变成’or’(xxx)'的字符串。
CTF之懵懂时期系列---后台登录_第3张图片
md5($password, true)是上图中加密的思路,16位原始二进制字符串的转化。
解密思路就如上图。

这里稍微提一下,关于flag的问题:
CTF之懵懂时期系列---后台登录_第4张图片
这里的ffifdyop其实就是答案要的字符串,填入即可得到flag。
当然,不排除有某位大神只是抱着试一试的态度,把这个字符输入把flag拿到手,不容否认,在渗透当中,不一定所有的答案都是由层层逻辑环环相扣得来的,有可能就是突然的一个灵感而来,拿到了想要的信息。这也是渗透的一方面能力—运气。

但是,更多的是,我们要不断地学习新的知识、思路以及科学的过程把答案稳稳地拿在手上,才是主要的。

尝试下,从解密的思路获取一下,并借鉴其他文章的知识。

这里稍等一下,我发现之前自己的思路太过复杂。

只要使用同样的MD5生成方法,并判断结果的字符中有没有我们需要的值即可。
理想是
'or ‘1’='1这种,但是碰撞几率太小。运算时间肯定很长,不是我们需要的。

好在mysql中,存在这样的机制:
MySQL中or 1(xxx),只要之前是数字,且不为0,那么就默认后面的结果是true。
(trash) 'or '1(trash)即可,数字也不一定非要是1,1~9都可以,这样能够提高爆出效率。

但是我翻了下大神的评论,其实还可以更简单。
只要满足一个条件即可:
‘=’
之前的’是用于闭合前面的password,默认值是0,而后一个’是用来闭合后面的’,这样就等于
password = ’ ’ = ’ ’
当然。password不可能等于’ ',也就是password != '‘结果等于0,而后的’ '也就是相当于0。更简单。

现在使用PHP脚本进行跑一下(因为本身也就是PHP语言进行的md5验证)
看来得习惯和学习PHP语言才行了!

知识点

1、or 1(trash)即为true

2、要想得出md5后的值包括一些符号,有办法了,暴力破解

3、这道题 ‘=’ 也可以

只能说学到,不敢说感悟到,多学、多反思、少说。

这里由于公司的电脑,php版本可能比较混乱,准备回家把这个脚本补上,把结果跑出来。


 

你可能感兴趣的:(web安全)