6.后台登录
查看网页源代码:(注部分参考网上的,由于当时笔记在word上没有留下链接,所以找不到原出处了,还望理解!)
这题看注释里看到了sql语句的构造,所以一开始想到了sql注入,但是观察构造的语句,发现用户输入的内容先经过了md5函数加密,才进行sql语句构造。而且从提示中我们也看出后台是php脚本,所以这时直接去查看php中md5函数:
示例如下:
输出为:
由上述的例子可以知道当第二个参数是true时,该函数输出的是以二进制的字节来输出的,而二进制打印在屏幕时会先转换成字符串,那么就会存在编码问题.所以这时构造可以注入的sql语句,我们就可以逆hash输出它原来的表示形式。但是我们都知道hash是不可逆的,所以想到的就是穷举法。下面这篇外国大佬的博客写了他当时做这题的办法和思路,以及最后的结果。赶紧收藏一波
博客链接:http://cvk.posthaven.com/sql-injection-with-raw-md5-hashes
这里贴上两个别人构造好的字符串:
注意:string: T0Do#'or'8
注意:string: 'or'6]!r,b
于是成功的构造出了注入的sql语句:(这就是俗称的“万能密码”)
SELECT * FROM admin WHERE username = 'admin' and password = 'T0Do#' or '8'
SELECT * FROM admin WHERE username = 'admin' and password = ' ' or '6]!r,b'
特别的我们要知道 and优先级大于or
于是:
username = 'admin' and password = 'T0Do#' or '8' ==》true and false or false ===> true or false ===> true
username = 'admin' and password = ' ' or '6]!r,b' ==》true and false or false ===> true or false ===> true
于是我们把content的内容复制到输入框里就得到flag
flag{ffifdyop_has_trash}
这里格外的说一句,对于CTF而言,做题是有小技巧的,通常解某个题,要么凭借自身基础来解决,要么采取小窍门,对于这道题的难点在于如何处理我们输入的字符串进MD5加密后的问题,自己解决也是费一番功夫的,而通过观察题目了解
http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php 发现ffifdyop.php 这个文件名命名异常,我们要知道对于计算机这个行业来说,命名规范可是重中之重,程序员不应该犯这种错误,而这又恰恰是出题者给我的暗示,答案就在你眼前,能不能用到就看你怎么想的了。这道题说难吧,答案都给你了,说简单吧,你又找不到答案,所以我们说做CTF题就像做数学题那样,不要思维禁锢,要多想,要用多种方法来解题。这才是我们作为安全人员的必备条件之一。