sql注入语句万能密码_sql注入——万能密码

8f7823b7920c4988e2c18c5708f638c6.png

434f53907657640d7103c9eecbfd7570.gif通过两个ctf题来做讲解,第一个很简单,第二个多了些限制 http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.php http://ctf5.shiyanbar.com/web/wonderkun/web/index.html3e5ad1caf958da73bb9384dffd17a465.gif万能密码原理 万能密码漏洞都是因为提交字符未加过滤或过滤不严而导致的。
$sql = "SELECT * FROM user WHERE username = '{$username}' AND password = '{$password}'";$res = $dbConnect->query($sql);
后台数据库中会执行
select * from user where username = ' ' and password = ''
两种情况: 1.已知账户名 既然知道了username,就可以将后面的注释使逻辑为真 常用方法:

bc5c946b1d985e72628a2b32e42aec61.png

2.未知账户名

需要通过构造sql语句使where为真 常用方法:

6a6eaf090a43620e07a2568473d6f85d.png

8c51597df7236223f74f2d0b5e43b5c0.png

fe9510dfb3726db14f8db6b348ac1e01.png

' '+' ' 相当于false(0)

5dc579b67c65bc5c3d331143b0920d0f.png

' ' = ' ' 为Ture(1) ' '+' ' 和 ' '=' ' 和 0 = 0都是为了使 where username = ' ' and password = ' '成立 where 0 and 0 或 where 1 and 1bcfe713b3a7ece6d101b1f9c6bde9d09.gif结合例子讲解

第一题:

源码中告诉我们有个用户名是admin

c48b8b39a6db117eb9bed40166cc4f71.png

f1179eb2de9a079b2f5206a954693ad3.png

假如 我们并不 知道 admin这个用户

b87de4bce6a8774c326828d8ecb6a831.png

发现也可以成功绕过

第二题:

我们不知道任何用户名的情况下

1e9a9e60f23f834b071601cc69113bc0.png

65d9a5581db4c3a3e4d1028527d0f387.png

我们发现貌似不行了,or被过滤了。看看都过滤了哪些字符

24088c85e7431a43ee26e818f67f9e01.png

ae613d791a969fd764cf3a94e750241b.png

可以看到# and  or都被过滤了,+和=没有被过滤

898c3b7a97e24bcaf58893d78361eba7.png

1d4e8ca20ff3c2e032e238a52cced8de.png

20229c5392da6ecfd0377a487040ae64.png

36ca4b6cd36e07b36e467b7e73af97f7.png

最终通过' ' = ' ' 获得了flag

6c39d31afadc722c9c662fd859f57f54.png对于select * from user where username = ' ' and password = ''来说 只要我们能够构造出合适的语句使where后面的为真就可以了 本质上就是使 w here 1 and 1 或 where 0 and 0
内 容  来 源 |  五 号 黯 区

 QQ 交流群 | 662588477

       官 网 地 址 | www.dark5.net

50b10b41c829a6a39dcf6550044029aa.png