#每日三件事,第1282天#
前面有很多文章都说了SQL注入的方法,最重要的就是找到闭合方式,加载payload。
- 怎么找闭合方式
闭合方式其实就是为了将原本的SQL查询语句填写完整,并且能够附加新的命令。
假设程序原来的查询语句如此:
select * from user where id =('$id') limit 0,1
我们可以传递的参数就是id,那么闭合方式就是:
1') payload --+
单纯通过页面是否有错误提示信息来确定闭合方式是否正确,这个不太可靠。最好时在payload的地方加入可执行的命令,判断其在数据库中是否执行。
以sqli-lab Less-7为例说明,当进行如下输入时:
http://127.0.0.1:55005/Less-7/?id=1')) --+
此时提醒提示正常。
把单引号换成双引号时:
http://127.0.0.1:55005/Less-7/?id=1“)) --+
系统提示和上面的一致,都提示为:
提示信息
现在问题来了:到底哪一种闭合方式是正确的呢?
只能加载payload来判断了。用“ and 1=1 ” 和“ and 1=2 ” 来测试。单引号的时候分别提示“You are in……”和语法错误;双引号的时候全部提示”You are in……“。 你怎么判断?
- 判定正确的闭合方式
闭合方式正确的时候,paylaod就一定是在数据库中执行过了。关键是怎么简单快速的判断出来。使用sleep函数就可以了。
将payload的部分可以使用sleep函数,如果数据库执行了payload,就可以看到延时;如果没执行,则没有延时。
延时当然你可以用database、version函数,但结果判断没有sleep方便快捷。
网友评论