sql注入(持续更新)
关于注释符引入
如下题目(web171):
1
2
3
4//拼接sql语句查找指定ID用户
$sql = "select username,password
from user
where username !='flag' and id = '".$_GET['id']."' limit 1;";这里
$_GET['id']
外的双引号是为了让PHP
解析出传入的字符串,如果$_GET['id']
值为1
,则传入后源码为:1
2
3$sql = "select username,password
from user
where username !='flag' and id = '1' limit 1;";基本
payloads:
-1' or username = 'flag'
,该payloads使得源代码中的username != 'flag' and id = '-1' or username = 'flag'
这里由于and
逻辑运算符的优先级大于or
,所以传入payloads后的源码中的username != 'flag'
该部分的源码无效,服务器只会解析or
之后的语句,即对username = 'flag'
进行解析。个人思路:
- 由于源码后还有
limit 1
的语句,个人想要注释掉这一部分的代码,已经在phpstorm
中测试过,在php
语言中的SQL
语句中使用sql
的注释符,只会注释掉sql
语句的符号,对php
自身的符号不影响,如:可见,php的外部引号没有受到sql中的注释符影响
- 所以我们构建payloads:
=flag' or username = 'flag' --
且一定注意! sql注释符需要在结尾处多加一个空格才可以起效果
- 由于源码后还有
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dedsec的博客!