原因:权限校验逻辑不够严谨。
1.平行越权
直接在url中修改名字就可以看到别人的信息了
2.垂直越权
先登录一下管理员的账号,查看有哪些权限,点一下,观察url,复制它,然后再登录一下普通用户,直接在url中将刚刚的url粘贴过去,就可以直接打开添加账号的页面,添加一下,再登录管理员账户看看有没有添加上,如果有就是直接在低级的账号中越权。
.../.../.../(目录遍历)
原因:将文件作为变量,传给后台,然后做一系列操作,如果没有对传入后台的文件进行验证,就会导致被恶意插入一些其他文件,从而导致后台其他文件被遍历出来。
可以先在URL中输入.../.../...,然后根据报错找到文件所在的地方,在该文件目录下插入新的病毒文件。
我觉得本质是就是.../.../这样打开文件
敏感信息泄漏
就是url中不带传参的
通过url访问可以直接列出目录下的文件列表
通过报错信息里操作系统,开发语言的版本及其他信息
奇奇怪怪
在源码中找到了登录信息,登录进去
这个就是说不要把有用的消息放在可以被看到的地方
PHP反序列化漏洞
serialize序列化
unserialize反序列化
__construct()当一个对象创建时被调用
__destruct()当一个对象销毁时被调用
__toString()当一个对象被当作一个字符串使用
__sleep() 在对象在被序列化之前运行
__wakeup将在序列化之后立即被调用
class S{
public $test="pikachu";
}
$s=new S(); //创建一个对象
serialize($s); //把这个对象进行序列化
序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}
O:代表object
1:代表对象名字长度为一个字符
S:对象的名称
1:代表对象里面有一个变量
s:数据类型
4:变量名称的长度
test:变量名称
s:数据类型
7:变量值的长度
pikachu:变量值
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}构造那个序列化的破坏代码就可。
只是验证是不是反序列化,没有其他验证
XXE(XML外部实体攻击)
攻击者通过向服务器注入指定的xml实体内容,从而让服务器按照指定的配置进行执行
前端将$_POST['xml']
传递给变量$xml,
由于后台没有对此变量进行安全判断就直接使用simplexml_load_string
函数进行xml解析, 从而导致xxe漏洞
因此可以构建恶意xml通过post请求提交给后台, 以此实现xml外部实体注入
xml语法
一: XML声明
<?xml version="1.0"?>
声明版本和其他
二:文档类型定义
<!DOCTYPE note[ <!--定义此文档是 note类型的文档-->
<!ENTITY entity - name SYSTEM "URL/URL"> <!- 外部实体声 明-->
]]>
<1--第三部分:文档元>
要有根元素,要闭合
<note>
<to>Dave</to>
<from> Tom</from>
<head> Reminder </head>
<body>You are a good man</body>
</note>
1.DTD内部声明
<!DOCTYPE 根元素[元素声明]>
2. DTD外部引用
<!DOCTYPE根元素名称SYSTEM “"外部DTD的URI" >
3.引用公共DTD
<!DOCTYPE根元素名称PUBLIC "DTD标识名” “公用DTD的URI” >
不安全的URL重定向
url地址跳转
可以看到这个url是这样的,直接将这个修改
前端将传递 $_GET['url']
后台, 后台没有对其作任何安全判断就赋值给了变量$url
, 然后通过header
函数进行跳转
ssrf
SSRF(Server-Side Request) , 又称为服务器请求伪造, 其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制, 导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
crul
Curl命令支持多种协议, 如http、https、ftp、file、gopher协议等等
第一关题目是http协议
-
客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.luffycity.com。 -
发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。 -
服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。 -
释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求; -
客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
可以利用
利用file协议让服务器访问自己本地的文件, 构造的payload为http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=file:///E:/phpStudy/WWW/flag.txt
或者
利用dict协议扫描3306端口是否开放: http://127.0.0.1/pikachu/vul/ssrf/ssrf_curl.php?url=dict://127.0.0.1:3306
二.file_get_content
函数, 该函数的作用是读取文件的内容
1、file读取本地文件
修改file为:file=file:///D:/test.txt
2、http协议请求内网资源
修改file为:file=http://127.0.0.1/pikachu/vul/sqli/1.php