CTF学习笔记—Web篇

06-01 1379阅读

第一篇 Web

第二篇 Reverse

第三篇 PWN

第四篇 Crypto

第五篇 APK

第六篇 IOT


文章目录

  • 一、常用工具的使用
    • 1.Burpsuite
      • 1.1 Proxy代理模块
      • 1.2 Repeater重放模块
      • 1.3 Intruder暴力破解模块
      • 1.4 Decoder解码模块
      • 1.5 Compare比较模块
      • 2.Sqlmap
        • 2.1 sqlmap的基本参数及其作用
        • 2.2 常见的Tamper
        • 2.3 宽字节绕过GPC
        • 3.Nmap
          • 3.1 Nmap的基本命令
          • 3.2 Nmap常用的主机发现相关的参数
          • 3.3 Nmap常用的扫描参数
          • 3.4 Nmap常用的扫描速度相关的参数
          • 3.5 Nmap常用的扫描端口相关的参数
          • 3.6 Nmap实用命令
          • 4.浏览器与插件
            • 4.1 Developer Tools
            • 4.2 Hasher
            • 4.3 Proxy SwitchOmega
            • 4.4 EditThisCookie
            • 4.5 User-Agent Switcher for Chrome
            • 4.6 Wappalyzer
            • 4.7 SelectorGadget和Xpath Helper
            • 二、SQL注入攻击
              • 1.什么是sql注入
                • 1.1 SQL注入的成因
                • 1.2 SQL注入的分类
                • 2.可以联合查询的sql注入
                • 3.报错注入
                  • 3.1 updatexml
                  • 3.2 floor
                  • 3.3 exp
                  • 4.Bool盲注
                  • 5.时间盲注
                  • 6.二次注入
                  • 三、跨站脚本攻击
                  • 四、服务端请求伪造
                  • 五、利用特性进行攻击
                  • 六、代码审计
                  • 七、条件竞争
                  • 八、案例解析

                    一、常用工具的使用

                    1.Burpsuite

                    1.1 Proxy代理模块

                    • 设置代理端口:proxy→options→Proxy Listeners→Add
                    • bind to port:填写侦听的端口
                    • 本机使用:bind to address设置为loopback only
                    • 局域网内的设备使用:all interfaces
                    • 浏览器:Internet选项→连接→局域网设置→代理服务器(IP+端口号)
                    • 截获浏览器的数据包:Intercept is on/off

                      1.2 Repeater重放模块

                      在需要手工测试HTTP header中的cookie或user-agent等浏览器不可修改的字段是否存在注入点,以及需要发现复杂的post数据包中是否存在ssrf时,一般需要用到repeater模块。

                      • headers标签:添加HTTP头信息

                        例如:检查IP地址的题目:添加x-forwarded-for、x-real-ip等http头尝试绕过,可以在raw标签页发现这个新增的http头信息

                      • hex标签:用于修改http数据包的十六进制编码

                        例如:文件上传类型的题目:用于截断后缀。或者使用这些编码对WAF进行模糊测试,从而顺利上传webshell

                        1.3 Intruder暴力破解模块

                        intruder模块包含sniper、battering ram、pitchfork、cluster bomb四种攻击类型

                        intruder模块中包含了target、position、payload、options四个标签页,可用于设置不同的功能。

                        • target标签页:可以设置目标的攻击地址(host)和目标端口(port),可以选择是否使用https
                        • position标签页:设置攻击的位置和攻击的方法。
                        • 四种攻击类型:
                          • 1.sniper型:设置一个payload set,在两个变量的位置逐一替换payload,每次只替换一个位置,替换前面再替换后面
                          • 2.battering ram型:设置一个payload set,在两个变量的位置同时替换相同的payload
                          • 3.pitchfork型:设置两个payload set,两个变量的位置和两个payload set是对应关系(撞库)
                          • 4.cluster bomb型:设置两个payload set,每个位置的payload在payload set中进行排列组合。
                          • paylosd标签页:payload set可用于设置每个位置使用的payload集合,payload type可用于设置这个payload集合的内容。payload type中常用的选项具体包含以下几种:
                            • runtime file:用于从文件中加载payload
                            • numbers:用于设置数字的开始和结束以及步长
                            • dates:用于设置日期及日期格式
                            • character blocks:用于设置长度爆破,fuzz超长的post变量,有时可以绕过WAF等
                            • options标签页:通常需要对request engine中的参数进行设置。
                              • 线程数量:默认值为1
                              • 重传次数:默认三次
                              • 暂停时间
                              • 数据包发送速度
                              • 开始时间

                                为了方便观察,一般会将响应信息按照请求的返回长度或响应状态码进行排序,或者在过滤器中设置匹配字符串或者正则表达式,以便对结果进行筛选和匹配。

                                1.4 Decoder解码模块

                                功能:提供编码与解码工具

                                1.5 Compare比较模块

                                Compare比较模块:在例如bool盲注的正确和错误回显题目中,有时两次数据包之间的差别很小,可以使用比较模块来发现差异

                                官方文档地址:https://portswigger.net/burp/help

                                2.Sqlmap

                                sqlmap工具的作用:自动检测并利用SQL注入漏洞。

                                CTF学习笔记—Web篇
                                (图片来源网络,侵删)

                                相关的CTF题目类型:注入类型的题目,或者需要进行绕过操作的题目等。可以调用sqlmap的一些Tamper,或则自行编写Tamper来进行绕过。

                                安装:sqlmap使用python开发,常见的Linux发行版本都自带了python环境,但windows系统需要自行安装python环境。

                                CTF学习笔记—Web篇
                                (图片来源网络,侵删)

                                2.1 sqlmap的基本参数及其作用

                                参数作用
                                -h,–help显示帮助文档
                                -u URL,–url=URL对指定URL进行扫描
                                -r REQUEST_FILEREQUEST_FILE为包含HTTP请求的数据包文件,可以从burp中导出
                                –data=DATA指定post数据
                                –dbs查询数据库
                                –columns查询字段
                                –dump转储字段
                                -D DB指定数据库名
                                -T TBL指定表名
                                -C COL指定字段名
                                –users查询数据库用户
                                privileges查询用户权限
                                –threads=NUM设置线程数
                                –user-agent=AGENT自定义 User-Agent
                                –random-agent随机选择 User-Agent
                                –tamper=TAMPER指定tamper对payload进行处理,可以指定多个tamper,之间使用逗号分隔

                                2.2 常见的Tamper

                                Tamper通常用来绕过一些过滤或者WAF,常见的Tamper及作用:

                                tamper文件名作用
                                greatest.py用greatest函数替代大于号
                                equaltolike.py用like替代等号
                                charencode.py用url编码payload
                                randomcase.py随机大小写
                                base64encode.py用base64编码payload
                                space2comment.py使用注释符替换空格
                                unmagicquotes.py宽字节绕过GPC
                                apostrophemask.py用utf8替代引号

                                2.3 宽字节绕过GPC

                                宽字节绕过GPC是一种绕过Web应用程序安全措施的技术手段。**GPC(Get/Post/Cookie)**是一种常见的Web应用程序安全防护机制,它通常用于防止跨站点脚本攻击(XSS)和SQL注入等攻击。GPC基于对用户输入进行过滤和转义,以防止恶意代码的注入。

                                CTF学习笔记—Web篇
                                (图片来源网络,侵删)

                                宽字节绕过GPC是通过利用某些编码和语法的特性来欺骗GPC机制,从而绕过安全防护。在某些编码中,特定字符可以被编码为多个字节,而不是通常的单字节。例如,在UTF-8编码中,某些字符可以使用2到4个字节表示。通过在用户输入中使用这些特殊字符(如%df%27代替单引号),攻击者可以绕过GPC对用户输入的过滤和转义,成功地注入恶意代码。

                                为了防止宽字节绕过GPC攻击,开发人员可以采取以下措施:

                                1. 输入验证和过滤:对用户输入进行严格验证和过滤,只允许预期的字符和格式。可以使用白名单过滤器或正则表达式来实现此功能。
                                2. 输出转义:在将用户输入作为输出的一部分进行呈现之前,对其进行适当的转义。这可以防止恶意代码在页面上执行。
                                3. 使用安全编码:使用URL编码或HTML编码等安全编码来处理用户输入和输出。这可以确保特殊字符被正确处理和呈现,而不会导致安全漏洞。
                                4. 使用安全框架:使用安全性高的框架和库,它们通常包含针对常见攻击的内置保护机制。这些框架可以自动处理输入验证、过滤和输出转义。

                                  总之,宽字节绕过GPC是一种常见的Web应用程序安全漏洞,但可以通过正确的输入验证、过滤和转义来预防和修复。开发人员应该充分了解和应用这些安全措施,以保护他们的Web应用程序免受攻击。

                                3.Nmap

                                Nmap工具的作用:快速扫描大型网络。

                                扫描内容:发现网络上有哪些主机、提供什么服务(应用程序和版本)、运行在社么操作系统上、这些主机使用了什么类型的报文过滤器或防火墙等

                                3.1 Nmap的基本命令

                                nmap [扫描类型] [选项] [目标或目标集合]

                                以下是nmap常用命令参数的使用方法:

                                3.2 Nmap常用的主机发现相关的参数

                                参数作用
                                -sP使用 ping 扫描
                                -P0不使用 ping 扫描
                                -PS使用 TCP SYN PING 扫描
                                -PA使用 TCP SYN ACK 扫描
                                -PU使用 UDP Ping扫描
                                -PE;-PP;-PM使用 ICMP Ping types 扫描
                                -PR使用ARP Ping 扫描
                                -n禁止DNS反向解析
                                -R反向解析域名

                                3.3 Nmap常用的扫描参数

                                选项作用
                                -T时序扫描
                                -p -F端口扫描顺序
                                -sSTCP SYN扫描(默认)
                                -sUUDP扫描
                                -sN;-sF;-sX隐蔽扫描
                                -sATCP ACK扫描
                                -sWTCP窗口扫描
                                -sMTCP maimon扫描
                                –scanflags自定义TCP扫描
                                -sI空闲扫描
                                -sOIP扫描
                                -bFTP Bounce扫描

                                3.4 Nmap常用的扫描速度相关的参数

                                选项作用
                                -T0;-T1慢速扫描,躲避IDS与WAF等
                                -T2稍慢速扫描
                                -T3默认
                                -T4快速扫描
                                -T5极速扫描

                                3.5 Nmap常用的扫描端口相关的参数

                                选项作用
                                -F快速扫描端口(只扫描100个常用)
                                -r按照端口号从小到大的顺序进行扫描
                                –top-ports开放率高的1000个端口的扫描(默认)
                                -p只扫描特定端口,如:-p 22,100-1024,9999

                                3.6 Nmap实用命令

                                一般来说,如果我们输入命令 nmap 192.168.1.1,实际上Nmap使用的是SYN扫描192.168.1.1开放率最高的1000个端口。

                                实际中,经常使用的扫描命令是:

                                nmap -sS -sV -p 192.168.1.1

                                nmap -v -T4 -A 192.168.1.1/24

                                Nmap官方文档地址:https://nmap.org/book/man.html

                                4.浏览器与插件

                                CTF比赛中常用的chrome浏览器插件:

                                4.1 Developer Tools

                                Developer Tools是chrome浏览器自带的开发者工具,可以对网页的元素、样式、和脚本进行实时编辑、调控和监控。常用功能:

                                • Elements:查看网页源码经过浏览器渲染后的所有元素,可手动修改元素的属性和样式,并在浏览器中得到实时的反馈。
                                • Console:记录并显示开发者或浏览器输出的日志和调试信息,并可以作为与JS进行实时交互的命令行shell。
                                • Source:通常用于下断点调试JS
                                • Network:记录发起请求后服务器响应的各种资源信息(包括状态码、资源类型、大小、耗时等),可以查看每个请求和响应的元信息。
                                • Application:记录网站加载的所有资源信息,包括存储数据(local storage、session storage、indexedDB、websql、cookie)、缓存数据、字体、图片、脚本、样式表等。
                                • Security:从技术层面判断当前网页的安全性,如,是否有可疑代码、证书是否合法、通信链路是否安全等。注意,其并不能判断该网站是否为钓鱼网站或含有欺诈信息。

                                  在CTF比赛中,需要处理JS相关的题目时,可以在Console面板中直接运行JS代码,而在XSS题目中,在Elements面板中可以方便地定位元素的位置等。

                                  4.2 Hasher

                                  快速计算常见的哈希算法、加密算法、编码转换、网络地址转换、时间转换及进制转换等功能。

                                  4.3 Proxy SwitchOmega

                                  可以在多个代理配置文件之间快速切换。

                                  4.4 EditThisCookie

                                  cookie管理器,配合XSS题目使用

                                  4.5 User-Agent Switcher for Chrome

                                  进行User-Agent的切换,在某些限制User-Agent的题目中可能会用到

                                  4.6 Wappalyzer

                                  查看当前站点的服务器型号、版本、服务器端语言等信息。但部分比赛题可能会使用伪造的信息。

                                  4.7 SelectorGadget和Xpath Helper

                                  用来定位、提取和选择指定元素的Xpath,通常配合爬虫使用。

                                  二、SQL注入攻击

                                  1.什么是sql注入

                                  1.1 SQL注入的成因

                                  开发人员在开发过程中,直接将URL中的参数、HTTP Body中的post参数或其他外来的用户输入(如cookies,UserAgent等)与SQL语句进行拼接,造成待执行的SQL语句可控,从而使我们可以执行任意SQL语句。

                                  1.2 SQL注入的分类

                                  • 可回显的注入
                                    • 可以联合查询的注入
                                    • 报错注入
                                    • 通过注入进行DNS请求,从而达到可回显的目的
                                    • 不可回显的注入
                                      • bool盲注
                                      • 时间盲注
                                      • 二次注入
                                        • 通常作为一种业务逻辑较为复杂的题目出现,一般需要自己编写脚本以实现自动化注入。

                                          一般CTF比赛中,出题人都会变相地增加一层WAF(比如,对关键字进行过滤等),然后只留下一个思路的解题路径,这时候我们需要快速找到并绕过这个点,然后得到flag。

                                          2.可以联合查询的sql注入

                                          在可以联合查询的题目中,一般会将数据库查询的数据回显到页面中,例如:

                                          $id = $_GET['id'];
                                          $getid = "SELECT ID FROM users WHERE user_id = '$id'";
                                          

                                          sql语句中的id变量会将GET获取到的参数直接拼接到SQL语句中,此时传入如下参数:

                                          ?id=-1'union+select+1+--+
                                          

                                          拼接后的SQL语句就变成了:

                                          SELECT ID FROM users WHERE user_id = '-1'union select 1 -- '
                                          

                                          其中服务器在处理用户输入时,已经将加号"+"转义为空格符了。

                                          在题目中出现可以使用联合查询进行回显注入时,一般需要绕过某些特定字符或者是特定单词(比如空格、select、and、or等字符串)。

                                          3.报错注入

                                          这里介绍3种MySQL数据库报错注入的方法,分别是updatexml、floor和exp。

                                          3.1 updatexml

                                          updatexml 是 MySQL 数据库中的一个函数,它用于更新 XML 类型的数据字段中指定路径的值。该函数接受三个参数:要更新的 XML 字段、要更新的 XML 路径以及新的值。具体来说,updatexml 函数的基本语法如下:

                                          UPDATEXML(xml_document, XPath_string, new_value)
                                          
                                          • xml_document:XML文档对象的名称,是一个字符串格式。
                                          • XPath_string:Xpath格式的字符串,用于指定需要更新的XML节点的路径。
                                          • new_value:新的值,用于替换查找到的符合条件的XML节点内容,也是一个字符串格式。

                                            updatexml 函数的作用是改变文档中符合条件的节点的值。当 XPath_string 格式出现错误时,MySQL 会爆出 XPath 语法错误(xpath syntax error),这一点常被用于 SQL 注入攻击中,通过构造错误的 XPath 表达式来触发错误,从而获取数据库信息。例如,攻击者可能会尝试以下 SQL 语句来探测数据库名称:

                                            ' and updatexml(1,concat(0x7e,database(),0x7e),1)#
                                            

                                            在这个例子中,0x7e 表示 ~ 符号,当这个不符合 XPath 语法的字符串被用于 XPath_string 参数时,MySQL 会报错并可能在错误信息中暴露数据库名称。

                                            3.2 floor

                                            floor的报错原理:rand和order by或group by的冲突。

                                            应用方法:

                                            • 爆破数据库版本信息:
                                            • 爆破当前用户:
                                            • 爆破当前使用的数据库:
                                            • 爆破指定表的字段:

                                              3.3 exp

                                              4.Bool盲注

                                              5.时间盲注

                                              6.二次注入


                                              三、跨站脚本攻击

                                              四、服务端请求伪造

                                              五、利用特性进行攻击

                                              六、代码审计

                                              七、条件竞争

                                              八、案例解析

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码