本文已参与「新人创作礼」活动,一起开启掘金创作之路。
知识点:
1、数据库堆叠注入
根据数据库类型决定是否支持多条语句执行
2、数据库二次注入
二次注入:插入后调用显示操作符合
堆叠注入:判断注入后直接调多条执行
DNS注入:在注入上没太大利用价值,其他还行
堆叠注入
select * from sy_guestbook where id=1;create table 表名 like 在那个库里创建
select * from sy_guestbook where id=1;create table bbb like sy_guestbook;
那么我们堆叠注入呢
其实就是 通过闭合符号从新在弄一个语句去执行
强网杯随便注
这个是靶场
当我们提交1的时候
他会返回值
1和1对应的hahahah
那么这个就类似是用户是hahah密码是1
这个样子的
打个比方
那么我们再想一下
什么地方是存我们的账户和密码
什么地方是存一些数据
那肯定就是数据库了
好
那么他现在这个页面啊
他有回显出数据库的内容东西
那么我们可以尝试让他实现我们像想要回显的结果
我们这次用堆叠的方式去注入
那么我们堆叠去注入的化
就必须闭合前面的语句
重新弄一个新的sql语句
我们查询一下他当前的库
';show databases;
我们发现他成功的将我们想要回显的数据回显出来了
那么我们这个语句
和我们平时注入的方法差不多的
就比如他要前面加一个单引号
这也是因为要闭合他前面的单引号那么有的需要闭合有的就不需要了
还要就是闭合的方式非常非常多
所有我们想知道他的sql闭合方式就需要通过跑字段或者猜了
好
那么我们现再查询到了他所有的库
那么我们查询一下这个网站连接的库是那个
就是当前的库
';select database();
当我们这样去让他回显的时候啊
他报错了
这是什么呢
这是他回显的过滤信息
就是他过滤了哪些东西
/select|update|delete|drop|insert|where|\./i
这是什么呢
在我们php编程语言中
有一个正则表达式
他就是这个正则表达式
你会发现
/里面方正则表达式/
开头和结尾都一样 并且啊我们正则表达式可以是用特殊符号来开头和结尾
那么后面的这个i
是什么呢
这个i其实是对于我们大小写的过滤
那么他这个i就是写在结尾的杠后面
好他这个select被过滤了
但是show没有被过滤
我们可以通过
';show tables;
来查询当前库的表
虽然我们不知道库名
但是我们可以查询出来
我们这个不是注入语句
我们这是数据库的查询语句
好
那么我们现在有了表名就是查列名
';show columns from `1919810931114514`;
这个不是单引号·
`在我们键盘上他是~这个按键
找到了flag的列了
现在激素查数据了
';select 列名 from `表名`;
';select flag from `1919810931114514`;
好
我们这个有一个select
™的关键时候查不出数据
怎么办
只能绕过了
怎么绕过
在我们数据库中啊
他可以支持16进制的的执行
那么我们把他转换16进制
我们用小葵工具
0x73656C65637420666C61672066726F6D206031393139383130393331313134353134603B
好
';SeT @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;
这就是我们的查询语句
这个查询语句是什么意思呢
Set@a
就是声明一个变量的意思
声明一个变量只会
我们把这个转换成16进制的查询语句赋值给@a
那么我们后面的
prepare execsql from @a;execute execsql;
就是
执行@a
二次注入
好什么是二次注入
二次注入并不是注入两次
那么二次注入就是
我排了一个内鬼到你哪里去,那么这个内鬼只会干件事情
这个事情就需要你去设置了
那么当我们要这个要这个内鬼干活的时候他就会去执行你设置的要求去办事了
那么简单来说就是
当我们对这个网站入进去了一个代码语句而这个代码的功能就是生成一个查询用户的sql语句
当我们去执行这个sql语句的时候他就会返回用户了
那么就是说我排了一个内鬼到你哪里去
那么这个内鬼呢我就设置他的任务是查询你数据库中的用户
好内鬼就会去查询数据库中的用户
但是
我们看电视剧会发现,内鬼幕后的老板和内鬼之间会有一个信物
彼此认识这个信物
当信物出现的时候内鬼就知道老板要他干活了,并且内鬼获得的情况也会放在一个地方给他幕后老板看
我去调用内鬼就类似是一次注入了
内鬼的内鬼接受到命令查询就二次注入了