前端检测主要是通过javascript代码进行检测,非常容易进行绕过。
原理Web应用系统虽然对用户上传的文件进行了校验,但是校验是通过前端javascript代码完成的。由于恶意用户可以对前端javascript进行修改或者是通过抓包软件篡改上传的文件,就会导致基于js的校验很容易被绕过。
如何判断当前页面使用前端is的验证方式
前端验证通过以后,表单成功提交后会通过浏览器发出─条网络请求,但是如果前端验证不成功,则不会发出这项网络请求;可以在浏览器的网络元素中查看是否发出了网络请求。
绕过方法
删除或者禁用js:火狐浏览器-->about:config-->JavaScriptenable-false (ajax)
使用代理上传文件,Burp Suite;上传符合要求的文件类型,抓包修改文件类型。
直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可或者可以不加载所有js,还可以将html源码copy一份到本地,然后对相应代码进行修改,本地提交即可。
CTFHub-web-文件上传-前端验证首先查看源码发现发现只允许jpg等几种后缀名文 ...
常用魔术方法__class____class__:用来查看变量所属的类,根据前面的变量形式可以得到其所属的类。 __class__ 是类的一个内置属性,表示类的类型,返回 <type 'type'> ; 也是类的实例的属性,表示实例对象的类。
12345678>>> ''.__class__<type 'str'>>>> ().__class__<type 'tuple'>>>> [].__class__<type 'list'>>>> {}.__class__<type 'dict'>
获取基类__bases__:用来查看类的基类,也可以使用数组索引来查看特定位置的值。 通过该属性可以查看该类的所有直接父类,该属性返回所有直接父类组成的元组(虽然只有一个元素)。注意是直接父类!!!
123456789101112> ...
知识1、数组绕过正则表达式123456if(preg_match("/[0-9]/", $num)){ die("no no no!"); }else(intval($num)){ echo $flag; }
preg_match第二个参数要求是字符串,如果传入数组则不会进入if语句
payload:num[]=1
2、intval函数的使用1intval( mixed $value, int $base = 10) : int
如果 base 是 0,通过检测 value 的格式来决定使用的进制:◦ 如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);否则,◦ 如果字符串以 “0” 开始,使用 8 进制(octal);否则,◦ 将使用 10 进制 (decimal)
123456789if($num==="4476"){ die("no no no!"); ...
基础理解PHP序列化:serialize()
序列化是将变量或对象转换成字符串的过程,用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构。
而PHP反序列化:unserialize()
反序列化是将字符串转换成变量或对象的过程
通过序列化与反序列化我们可以很方便的在PHP中进行对象的传递。本质上反序列化是没有危害的。但是如果用户对数据可控那就可以利用反序列化构造payload攻击。这样说可能还不是很具体,举个列子比如你网购买一个架子,发货为节省成本,是拆开给你发过去,到你手上,然后给你说明书让你组装,拆开给你这个过程可以说是序列化,你组装的过程就是反序列化
序列化首先每一个序列化后的小段都由; 隔开, 使用{}表示层级关系
数据类型
提示符
格式
字符串
s
s:长度:”内容”
已转义字符串
S
s:长度:”转义后的内容”
整数
i
i:数值
布尔值
b
b:1 => true / b:0 => false
空值
N
N;
数组
a
a:大小:{键序列段;值序列段;<重复多次& ...
基础简介网站中包含大量的动态内容以提高用户体验,比过去要复杂得多。所谓动态内容,就是根据用户环境和需要,Web应用程序能够输出相应的内容。动态站点会受到一种名为“跨站脚本攻击”的威胁,而静态站点则完全不受其影响。恶意攻击者会在 Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数
分类反射型XSS:<非持久化>
攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。DOM型XSS由于危害较小,我们将其归为反射型XSS
存储型XSS:<持久化>
代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cooki ...
1.http(极客大挑战)首先查看源码发现 <a style="border:none;cursor:default;" onclick="return false" href="Secret.php">,点击该链接
然后通过页面信息修改referer:https://Sycsecret.buuoj.cn
接着浏览器信息,即 User-Agent:Syclover,然后告诉我们要从本地查看,上网查找发现本地都是这个端口号 127.0.0.1,修改xxf,然后flag就出来了
2.查看网页的备份文件(攻防世界)php的备份文件有两种:*.php~和*.php.bak
例子:http://61.147.171.105:55767/index.php.bak
3.php2(攻防世界)对网址后面加上/index.phps就可以查看页面php源码
例子:http://111.198.29.45:45191/index.phps
phps是php的源代码文件,但是不能接受传参,所以hackbar还是要在.php里面做 ...
省流版echo:打印你给的参数
echo $PATH:输出电脑上的目录
which 参数:会输出运行参数的路径(比如:which echo)
pwd:当前工作目录
cd:改变当前工作目录(例子:cd /home)
.:表示当前目录;..:表示上一级目录
给出被调用运行的程序的绝对路径:程序可以直接运行起来
ls:列出当前目录下的文件
~:带你回到用户目录(在cd命令下面使用)
cd -:将当前目录跳转到你所处的上一个目录
–help:会告诉你这个命令怎么用(ls --help)
mv:重命名文件,接受两个路径,先是原有的,然后是新的;也可以把文件移到不同的目录
1mv dotfiles.md foo.md
cp:复制文件,两个路径(复制源路径和目标路径,都要是完整路径,但不必是同一个目录)
1cp dotfile.md ../food.md
rm:移除一个文件,不能是目录
rmdir:只允许移除空目录
mkdir:创建一个新目录
Ctrl+l:清空终端,让光标回到顶部
<:重定向这个程序的输入流
大于号:重定向这个程序的输入流
1echo hello > hello.t ...
文中代码若无特别说明那么都是写在内的
基础初识JavaScript 可以通过不同的方式来输出数据:
使用 window.alert() 弹出警告框来显示数据。
使用 document.write() 方法将内容写到 HTML 文档中。
使用 innerHTML 写入到 HTML 元素。
使用 console.log() 写入到浏览器的控制台。
如需从 JavaScript 访问某个 HTML 元素,您可以使用 document.getElementById(id) 方法。
请使用 “id” 属性来标识 HTML 元素,并 innerHTML 来获取或插入元素内容:
123<script>document.getElementById("demo").innerHTML = "段落已修改。";</script>
JavaScript 使用关键字 var 来定义变量, 使用等号来为变量赋值 var length;
变量的数据类型可以使用 typeof 操作符来查看
可以在字符串中使用引号,只要不匹配包围字符串的引号即可
...
python基础数据类型转换int() 强制转换为整型
float() 强制转换为浮点型
str() 强制转换为字符串类型
123x = str("s1") # x 输出结果为 's1'y = str(2) # y 输出结果为 '2'z = str(3.0) # z 输出结果为 '3.0'
整型和字符串类型进行运算,就可以用强制类型转换来完成
123456789num_int = 123num_str = "456"print("num_int 数据类型为:",type(num_int))print("类型转换前,num_str 数据类型为:",type(num_str))num_str = int(num_str) # 强制转换为整型print("类型转换后,num_str 数据类型为:",type(num_str))num_sum = num_int + num_strprint("num_int ...
文件包含include和require语句在 PHP 中,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。
include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:
require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。
包含文件省去了大量的工作。这意味着您可以为所有网页创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。
基础语法:
123include 'filename';或者require ...