SSRF(Server Side Request Forgery服务端请求伪造),是一种由攻击者构造但是由服务端发起请求的一个安全漏洞。SSRF的攻击目标一般是从外网无法访问的内部服务器。
SSRF漏洞的原理
SSRF漏洞原理
(1)攻击者可以通过公网访问到某个web服务器;
(2)但是攻击者是无法通过公网访问到内网的其他设备或者办公区域;
(3)这时候如果想进行内网探测,web服务器同时存在SSRF漏洞,就能以web服务器作为跳板,进而攻击其他服务器或区域
SSRF利用的条件:
(1)web服务器存在SSRF漏洞;
(2)web服务器有访问本地或远程服务器的权限;
SSRF存在的位置:一般是web服务器提供了从其他服务器获取数据的功能。
(1) 分享功能:通过URL地址分享文章等,例如如下地址:
1http://share.xxx.com/index.php?url=http://www.xxx.com
通过url参数的获取来实现点击链接的时候跳到指定的分享文章。如果在此功能中没有对目标地址的范围做过滤与限制则就存在着SSRF漏洞。
(2)图片加载/下载:通过URL ...
CTF
未读引用Python 沙箱逃逸的经验总结
执行系统命令基础知识在 Python 中执行系统命令的方式有:
os
commands:仅限2.x
subprocess
timeit:timeit.sys、timeit.timeit("__import__('os').system('whoami')", number=1)
platform:platform.os、platform.sys、platform.popen('whoami', mode='r', bufsize=-1).read()
pty:pty.spawn('ls')、pty.os
bdb:bdb.os、cgi.sys
cgi:cgi.os、cgi.sys
…
以下为一个脚本测试了一下所有的导入 os 或者 sys 的库:
12345678910111213141516171819202122232425262728293031323334353637383940414243#-*- coding:utf8 -*-# By ...
level-1(no waf)遍历目标中含有内建函数 eval 的子类的索引号:
123456789101112import requestsif __name__ == "__main__": post_url = "http://124.70.99.199:10086/level/1" for i in range(200): param = { 'code': "{{().__class__.__bases__[0].__subclasses__()["+str(i)+"].__init__.__globals__['__builtins__']}}" } res = requests.post(post_url, data=param) if 'eval' in res.text: ...
前端检测主要是通过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 ...