BugkuCTF:点击一百万次;备份是个好习惯

本文介绍了在BugkuCTF挑战中,通过查看源码、利用.md5()函数漏洞和PHP特性来解题的过程。在点击一百万次后,发现flag,同时注意到源码备份的重要性。通过对PHPMyAdmin的分析,尝试绕过验证,并通过构造特定字符串绕过哈希比较,最终成功获取flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击一百万次

问题描述:

提示是js

                            

查看源码:

                 

使用burpsuite抓包,之后改变请求方法:

之后改参数clicks是1000000以上,go一下,得到flag:


备份是个好习惯

点击后出现类似md5的密文:

                          

查询之后显示空密码(NULL的md5值):

                     

不相关(一个端口下的后台):


后台扫描:

                

有个phpmyadmin,进去后是:

phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。

                             

提示cookie,用burpsuite抓包,有cookie和session:

想到有个phpmyadmin有个配置文件:libraries目录下的 config.default.php 文件,但是访问不到,到此思路就断了。。


再看看大佬的题解:

备份是指的一个习惯,会在防止误删等情况下对文件的备份,常用操作就是文件名末尾加.bak

可以找到一个文件服务端php备份代码文件(源码泄露):

解决方法:

1  md5()函数有漏洞:无法处理数组,会返回NULL ,在这个题就是加密后相等都为NULL,加密前不等(自己构造)

   构造一下变量名,直接绕过检测:

http://123.206.87.240:8002/web16/?kekeyy1[]=aaa&kekeyy2[]=bbb

  得到flag:

                              

2  PHP在处理哈希字符串时,它把每一个以“0E”开头的哈希值都解释为0(被认为是科学计数法,且表示的是0*10的xxxx次方),所以如果两个不同的密码经过哈希以后,其哈希值都是以“0E”开头的,那么PHP将会认为他们相同,都是0。

这几个串开头的经过md5加密会以“0E”开头:

  • QNKCDZO
  • 240610708
  • s878926199a
  • s155964671a
  • s214587387a
  • s214587387a

所以自己构造:

http://123.206.87.240:8002/web16/?kekeyy1=240610708&kekeyy2=s214587387a

也能得到flag

 

大佬写的脚本,源码泄露工具(这题.bak文件就可以扫出来):

https://coding.net/u/yihangwang/p/SourceLeakHacker/git?public=true#user-content-usage-

使用:

Usage : 
        python SourceLeakHackerForLinux.py [URL]
Example : 
        python SourceLeakHackerForLinux.py http://www.baidu.com/
Tips : 
        Your URL should must starts with "http://" or "https://"
        If you have any questions, please contact [ wangyihanger@gmail.com ]

还会“哔”的一声提示,人性化啊

                 

php函数:

1 $_SERVER['REQUEST_URI']

      取得当前URL的路径地址比如: http://12.cn/question/469321857.html?push=core&group=1,它获得的是路径 question/469321857.html?push=core&group=1

2 str_replace(find,replace,string,count)
参数描述
find必需。规定要查找的值。
replace必需。规定替换 find 中的值的值。
string必需。规定被搜索的字符串。
count可选。对替换数进行计数的变量。

3 substr(string,start,length)

                  返回从start开始的长度为length的字符串,默认直到末尾

4 parse_str() 函数把查询字符串解析到变量中

注释:如果未设置 array 参数,由该函数设置的变量将覆盖已存在的同名变量。

注释:php.ini 文件中的 magic_quotes_gpc 设置影响该函数的输出。如果已启用,那么在 parse_str() 解析之前,变量会被 addslashes() 转换。

parse_str(string,array)

参数描述
string必需。规定要解析的字符串。
array可选。规定存储变量的数组名称。该参数指示变量存储到数组中。

 例子:

<a href="http://localhost/parse_str.php?id=1&category=php&title=php-install">Click Here</a>
$query_str = $_SERVER['QUERY_STRING'];
parse_str($query_str); /* 这种方式可以直接使用变量$id, $category, $title */
parse_str($query_str, $query_arr);    //赋值给$query_arr

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值