热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python重定向ctf_CTFweb题型解题技巧第四课web总结

以下内容大多是我在学习过程中,借鉴前人经验总结而来,部分来源于网络,我只是在前人的基础上,对CETWEB进行一个总结

以下内容大多是我在学习过程中,借鉴前人经验总结而来,部分来源于网络,我只是在前人的基础上,对CET WEB进行一个总结;

-----------------------------------------------------------

-----------------------------------------------------------

工具集:

基础工具:Burpsuite,python,firefox(hackbar,foxyproxy,user-agent,swither等)

***了解Burpsuite的使用方式、firefox(hackbar,foxyproxy,user-agent,swither等)插件的使用给漏洞挖掘带来便利。

扫描工具:nmap,nessus,openvas

***了解nmap等扫描工具的使用。

sql注入工具:sqlmap等

***注入在CTF WEB中比较常见,通过暴库找到flag

xss平台:xssplatfrom,beef

***利用xss弹COOKIE的方式弹出flag

文件上传工具:cknife

文件包含工具:LFlsuite

暴力破解工具:burp暴力破解模块,md5Crack,hydra

基础篇

1.直接查看源代码

http://lab1.xseclab.com/base1_4a4d993ed7bd7d467b27af52d2aaa800/index.php

2.修改或添加HTTP请求头

常见的有:

Referer来源伪造

X-Forwarded-For:ip伪造

User-Agent:用户代理(就是用什么浏览器什么的)

http://lab1.xseclab.com/base6_6082c908819e105c378eb93b6631c4d3/index.php

抓取数据包,修改User-Agent:为HAHA

//.net的版本修改,后面添加,如版本9

.NET CLR 9

Accept-Language:语言

http://lab1.xseclab.com/base1_0ef337f3afbe42d5619d7a36c19c20ab/index.php

http://ctf1.shiyanbar.com/basic/header/

COOKIE的修改

http://lab1.xseclab.com/base9_ab629d778e3a29540dfd60f2e548a5eb/index.php

3.查看HTTP请求头或响应头

http://lab1.xseclab.com/base7_eb68bd2f0d762faf70c89799b3c1cc52/index.php

http://ctf1.shiyanbar.com/basic/catch/

4.302跳转的中转网页有信息

http://lab1.xseclab.com/base8_0abd63aa54bef0464289d6a42465f354/index.php

5.查看开发者工具控制台

6.Javascript代码绕过

通过删除或修改代码或者本地代理改包绕过

http://lab1.xseclab.com/base10_0b4e4866096913ac9c3a2272dde27215/index.php

输入框,我随便输入了111,提示数字太小。

然后我通过用burp抓包,更改数据包数据长度

7.使用burp的repeater查看整个HTTP包

http://lab1.xseclab.com/xss1_30ac8668cd453e7e387c76b132b140bb/index.php

8.阅读Javascript代码,直接控制台获取正确密码

http://ctf1.shiyanbar.com/basic/js/index.asp

9.robots.txt文件获取信息

这本来是给搜索引擎看的信息,很可能暴露网站结构目录

http://lab1.xseclab.com/base12_44f0d8a96eed21afdc4823a0bf1a316b/index.php

you find me,but I am not the login page. keep search.

这里有个提示:login page

http://lab1.xseclab.com/base12_44f0d8a96eed21afdc4823a0bf1a316b/9fb97531fe95594603aff7e794ab2f5f//login.php

10..bash_history

这个应该说看到过吧,就是记录用户输入过的linux命令的

前端脚本类

1.js加解密

http://ctf5.shiyanbar.com/DUTCTF/1.html //直接在F12控制台粘贴就有了

2.XSS

http://lab1.xseclab.com/realxss1_f123c17dd9c363334670101779193998/index.php

这题题目就有漏洞,直接在命令行输入下面的就有了

当然简单的直接输入

这样也可以

这题也差不多

http://lab1.xseclab.com/realxss2_bcedaba7e8618cdfb51178765060fc7d/index.php

可以直接输入上题的那个jquery,也可以乖乖下面的

http://lab1.xseclab.com/realxss3_9b28b0ff93d0b0099f5ac7f8bad3f368/index.php

ctf中php常见的考点

本博文转自:大佬博客(侵权删)

总结的很详细,忍不住转载

1.系统变量

2.错误控制运算符

PHP 支持一个错误控制运算符:@。当将其放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

3.变量默认值

当定义一个变量,如果没有设置值,默认为0

4.$_GET 和 $_POST

http://ctf4.shiyanbar.com/web/false.php?name[]=a&password[]=b

如果GET 参数中设置name[]=a,那么$_GET['name'] = [a],php会把[]=a当成数组传入,$_GET会自动对参数调用urldecode。

$_POST同样存在此漏洞,提交的表单数据,user[]=admin,$_POST['user']得到的是['admin']是一个数组。

5.内置函数的松散性

strcmp

strcmp 函数的输出含义如下:

如果str1 小于str2返回<0&#xff1b;

如果str1 大于str2返回> 0&#xff1b;

如果两者相等&#xff0c;返回0。

•5.2 中是将两个参数先转换成string类型。

•5.3.3 以后&#xff0c;当比较数组和字符串的时候&#xff0c;返回是0。

•5.5 中如果参数不是string类型&#xff0c;直接return了

$array&#61;[1, 2, 3];

// 数组跟字符串比较会返回0

//这里会输出null&#xff0c;在某种意义上null也就是相当于false&#xff0c;也就是判断为相等

var_dump(strcmp($array, &#39;abc&#39;));

sha1 和 md5 函数

md5 和sha1无法处理数组&#xff0c;但是php没有抛出异常&#xff0c;直接返回fasle

sha1([]) &#61;&#61;&#61;false

md5([]) &#61;&#61;&#61;false

弱类型

当一个整形和一个其他类型行比较的时候&#xff0c;会先把其他类型intval 再比较

intval

intval() 在转换的时候&#xff0c;会从字符串的开始进行转换直到遇到一个非数字的字符。即使出现无法转换的字符串&#xff0c;intval()不会报错而是返回0。

这个时候$a 的值有可能是1002 union…

is_numeric

PHP提供了is_numeric函数&#xff0c;用来变量判断是否为数字。但是函数的范围比较广泛&#xff0c;不仅仅是十进制的数字。

in_array

in_array函数用来判断一个值是否在某一个数组列表里面&#xff0c;通常判断方式如下&#xff1a;

in_array(&#39;b&#39;, array(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;);

这段代码的作用是过滤GET 参数typeid在不在1&#xff0c;2&#xff0c;3&#xff0c;4这个数组里面。但是&#xff0c;in_array函数存在自动类型转换。如果请求&#xff0c;typeid&#61;1’ union select..也能通过in_array的验证。

&#61;&#61; 和 &#61;&#61;&#61;

•&#61;&#61; 是弱类型的比较

•&#61;&#61;&#61; 比较符则可以避免这种隐式转换&#xff0c;除了检查值还检查类型。

以下比较的结果都为true

hash 比较的问题

0e 开头且后面都是数字会被当作科学计数法&#xff0c;也就是等于0*10^xxx&#61;0。如果md5是以0e开头&#xff0c;在做比较的时候&#xff0c;可以用这种方法绕过。

如果要找出0e 开头的hash碰撞&#xff0c;可以用如下代码。

switch

如果switch 是数字类型的case的判断时&#xff0c;switch会将其中的参数转换为int

类型。

这个时候程序输出的是i is less than 3 but not negative&#xff0c;是由于switch()函数将$i进行了类型转换&#xff0c;转换结果为2。

正则表达式

preg_match

如果在进行正则表达式匹配的时候&#xff0c;没有限制字符串的开始和结束(^ 和$)&#xff0c;则可以存在绕过的问题

ereg %00 截断

ereg 读到%00的时候&#xff0c;就截止了

这里a&#61;abcd%001234&#xff0c;可以绕过

变量覆盖

extract

extract() 函数从数组中把变量导入到当前的符号表中。对于数组中的每个元素&#xff0c;键名用于变量名&#xff0c;键值用于变量值。

parse_str

parse_str() 的作用是解析字符串&#xff0c;并注册成变量。与parse_str()类似的函数还有mb_parse_str()&#xff0c;parse_str将字符串解析成多个变量&#xff0c;如果参数str是URL传递入的查询字符串(query string)&#xff0c;则将它解析为变量并设置到当前作用域。

$$ 变量覆盖

如果把变量本身的key 也当变量&#xff0c;也就是使用了$$&#xff0c;就可能存在问题。

例子

unset

unset($bar); 用来销毁指定的变量&#xff0c;如果变量$bar包含在请求参数中&#xff0c;可能出现销毁一些变量而实现程序逻辑绕过。

特殊的PHP 代码格式

以这种后缀结尾的php 文件也能被解析&#xff0c;这是在fast-cgi里面配置的

•.php2

•.php3

•.php4

•.php5

•.php7

•.phtml

正则检测文件内容中包含 就异常退出&#xff0c;通常的PHP代码就不行了&#xff0c;可以使用这种方式绕过

效果等于echo ‘a’;

如果在php.ini 文件中配置允许ASP风格的标签

则可以使用该方式

伪随机数

mt_rand()

mt_rand() 函数是一个伪随机发生器&#xff0c;即如果知道随机数种子是可以预测的。

linux 64 位系统中&#xff0c;rand()和mt_rand()产生的最大随机数都是2147483647&#xff0c;正好是2^31-1&#xff0c;也就是说随机播种的种子也是在这个范围中的&#xff0c;0 – 2147483647的这个范围是可以爆破的。

但是用php 爆破比较慢&#xff0c;有一个C的版本&#xff0c;可以根据随机数&#xff0c;爆破出种子php_mt_seed。

在php > 4.2.0 的版本中&#xff0c;不再需要用srand()或mt_srand()函数给随机数发生器播种&#xff0c;现已由PHP自动完成。php中产生一系列的随机数时&#xff0c;只进行了一次播种&#xff0c;而不是每次调用mt_rand()都进行播种。

rand()

rand() 函数在产生随机数的时候没有调用srand()&#xff0c;则产生的随机数是有规律可询的。具体的说明请看这里。产生的随机数可以用下面这个公式预测:

可以用下面的代码验证一下

反序列化

•__construct()&#xff1a;构造函数&#xff0c;当对象创建(new)时会自动调用。但在unserialize()时是不会自动调用的。

•__destruct()&#xff1a;析构函数&#xff0c;当对象被销毁时会自动调用。

•__wakeup() &#xff1a;如前所提&#xff0c;unserialize()时会自动调用。

PHP unserialize() 后会导致__wakeup()或__destruct()的直接调用&#xff0c;中间无需其他过程。因此最理想的情况就是一些漏洞/危害代码在__wakeup()或__destruct()中。

__wakeup 函数绕过

PHP 有个Bug&#xff0c;如果反序列化出现问题&#xff0c;会不去执行__wakeup函数&#xff0c;例如&#xff1a;

使用这个payload 绕过__wakeup函数

在字符串中&#xff0c;前面的数字代表的是后面字符串中字符的个数&#xff0c;如果数字与字符个数不匹配的话&#xff0c;就会报错&#xff0c;因此将1改成2就会产生报错&#xff0c;导致不会去执行__wakeup函数&#xff0c;从而绕过该函数。

文件包含

http://10.2.1.1:20770/index.php?page&#61;upload这种url很容易就能想到可能是文件包含或者伪协议读取http://10.2.1.1:20770/index.php?page&#61;php://filter/read&#61;convert.base64-encode/resource&#61;upload

命令执行

反引号&#96;

反引号&#96; 可以调用shell_exec正常执行代码

preg_replace()

触发条件&#xff1a;

1.第一个参数需要e标识符&#xff0c;有了它可以执行第二个参数的命令

2.第一个参数需要在第三个参数中的中有匹配&#xff0c;不然echo会返回第三个参数而不执行命令&#xff0c;举个例子&#xff1a;

我们可以构造这样的后门代码

当访问这样这样的链接时就可以被触发

伪协议

php://filter

读取文件

php://input

写入文件&#xff0c;数据利用 POST 传过去

data://

将include 的文件流重定向到用户控制的输入流

可以用于控制file_get_contents 的内容为用户输入的流

phar://

发现有一个文件上传功能&#xff0c;无法绕过&#xff0c;仅能上传jpg后缀的文件。与此同时&#xff0c;无法进行文件包含截断。allow_url_include&#61;on的状态下&#xff0c;就可以考虑phar伪协议绕过。

写一个shell.php文件&#xff0c;里面包含一句话木马。然后&#xff0c;压缩成xxx.zip。然后改名为xxx.jpg进行上传。最后使用phar进行包含

这里的路径为上传的jpg 文件在服务器的路径

zip://

上述phar:// 的方法也可以使用zip://

然后吧1.php文件压缩成zip&#xff0c;再把zip的后缀改为png&#xff0c;上传上去&#xff0c;并且可以获得上传上去的png的地址。

1.zip文件内仅有1.php这个文件

文件上传漏洞

正常的文件上传流程是这样的&#xff0c;首先接收POST 的文件&#xff0c;在tmp目录下生成临时文件&#xff0c;文件名是php[A-Za-z0-9]{6}&#xff0c;在php处理后删除临时文件&#xff0c;虽然没有文件上传&#xff0c;但是只要文件上传开启了就一定会创建临时文件&#xff0c;在这中途如果php意外退出则临时文件不会被删除&#xff0c;造成/tmp目录下可以留下任何内容。 内容构造好后&#xff0c;单纯爆破/tmp/phpxxxxxx文件名是不太现实但是也可行的。

通过文件包含&#xff0c;让其包含本身&#xff0c;造成无限循环后发出SIGSEGV 信号&#xff0c;可以导致php意外退出。

本文作者&#xff1a;Lemon



推荐阅读
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 本文深入探讨了 hCalendar 微格式在事件与时间、地点相关活动标记中的应用。作为微格式系列文章的第四篇,前文已分别介绍了 rel 属性用于定义链接关系、XFN 微格式增强链接的人际关系描述以及 hCard 微格式对个人和组织信息的描述。本次将重点解析 hCalendar 如何通过结构化数据标记,提高事件信息的可读性和互操作性。 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • 在《OWASP TOP 10 注入漏洞》中,详细探讨了注入攻击的发生机制:当应用程序未能有效识别和拦截恶意输入时,攻击者可以通过 SQL 注入等手段利用这一漏洞。本文将重点介绍 SQL 注入的基本原理及其防范措施,帮助读者全面了解并有效应对这一常见安全威胁。 ... [详细]
  • 本文深入探讨了Ajax的工作机制及其在现代Web开发中的应用。Ajax作为一种异步通信技术,改变了传统的客户端与服务器直接交互的模式。通过引入Ajax,客户端与服务器之间的通信变得更加高效和灵活。文章详细分析了Ajax的核心原理,包括XMLHttpRequest对象的使用、数据传输格式(如JSON和XML)以及事件处理机制。此外,还介绍了Ajax在提升用户体验、实现动态页面更新等方面的具体应用,并讨论了其在当前Web开发中的重要性和未来发展趋势。 ... [详细]
  • 近期,针对Axis2默认凭据漏洞的攻击案例在安全社区引起了广泛关注。这些攻击通常利用Axis2的默认用户名和密码进行渗透测试,技术手段相对固定。本文在综合分析多个案例的基础上,详细探讨了该漏洞的安全风险,并提出了有效的防范措施,以帮助企业和开发者加强Web服务的安全防护。 ... [详细]
  • 如何将PHP文件上传至服务器及正确配置服务器地址 ... [详细]
  • 一、index.php中:?phpechoahrefprocess.php?filenamehalo.mp3下载a?process.php中:?phph ... [详细]
author-avatar
jrs2078148
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有