目录
1.RCE
概述
RCE(remote command/code execute)概述
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上
一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 而,如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器
现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。 在这种平台上往往会出现远程系统命令执行的漏洞,不信的话现在就可以找你们运维部的系统测试一下,会有意想不到的"收获"-_-
远程代码执行
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。 不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。
你可以通过“RCE”对应的测试栏目,来进一步的了解该漏洞。
1.1.exec "ping"
这里可以直接输入127.0.0.1
那么我们先了解一下管道符的用处
Windows管道符
“|”:直接执行后面的语句。如:ping 127.0.0.1|whoami
“||”:如果前面执行的语句出错泽执行后面的语句,前面的语句智能为假 如:ping 2 || whoami
“&”:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假 如 ping 127.0.0.1&whoami
“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1&&whoami
Linux管道符
“;”:执行完前面的语句再执行后面的 例如:ping 127.0.0.1;whoami
“|”:显示后面语句的执行结果 例如:ping 127.0.0.1|whoami
“||”:当前面的语句只能怪出错时,执行后面的语句,例如:ping 1||whoami
“&”:如果当前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 127.0.0.1&whoami
“&&”:如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真 例如:ping 127.0.0.1&&whoami
知道了这些以后就开始拼接
直接输入127.0.0.1 |whoami
直接执行后面的语句
显示了当前的用户数据
我们输入127.0.0.1 |ipconfig
显示出了ip地址,危害还是很大的.
1.2.exec "eval"
我们先了解一下php当中eval()函数的作用
eval()函数中的eval是evaluate的简称,这个函数的作用就是把一段字符串当作PHP语句来执行。
比如说eval($_REQUEST["cmd"])
$_REQUEST[]是接收数据用的,而其中的cmd 就是其中的数据
我们输入php语句
phpinfo();
甚至可以使用一句话木马
xss弹窗也是没什么问题
危害很大。
2.SSRF
概述
SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF: file_get_contents() fsockopen() curl_exec() 如果一定要通过后台服务器远程去对用户指定("或者预埋在前端的请求")的地址进行资源请求,则请做好目标地址的过滤。 你可以根据"SSRF"里面的项目来搞懂问题的原因
2.1 SSRF(curl)
进入题目阅读一首诗
但是我们的重点在题目中的url上面,可以看到后面有url=一个链接
我们换为百度,它就会自动跳转到百度去
我们在目录下创建一个txt文件
看url链接能否访问到该文件
成功访问了该文件
2.2 SSRF()
进入题目
url当中有点细微差别file=一个url链接
它和前面的逻辑是一样的,不同的是它这里使用file_get_contents函数进行文件的读取执行,而file_get_contents函数可以对本地文件进行读取
继续访问之前的文件
访问成功
3.Unsafe file download
3.1Unsafe file download
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
你可以通过“Unsafe file download”对应的测试栏目,来进一步的了解该漏洞。
进入题目 ,它提示我们点击球员的名字就可以直接下载图片
我们点击科比的名字抓包
我们可以看到filename=kb.png
我们把filename的值改为ai,阿伦艾佛森
放包发现ai.png成功下载
在 windows 上,我们可以 “../” 的方式进行目录跳转,读取其他目录下的文件。
我们把filename改为 ../down_nba.php
发现可以成功下载
3.2Unsafe file upload
概述
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;
--等等...
你可以通过“Unsafe file upload”对应的测试栏目,来进一步的了解该漏洞。
3.2.1 客户端check
进入题目
我们先尝试一下上传一句话木马
页面弹出提示框说明是前端验证
我们先把php文件改名为png格式上传然后抓包
在这里把filename改为one.php
放包,成功上传
我们根据它提供的相对地址拼接绝对地址
我们使用蚁剑客户端进行连接
我们已经成功进入了网页的后台
3.2.2服务端check(MIME type)
进入题目
根据题目我们可以大概知道,这道题上传的验证是在后端进行的
我们先尝试上传一句话木马,但是提示说只能是jpg等格式的
而且像上一关一样修改filename 也是不管用的
MIME Type,就是该资源的媒体类型。
媒体类型通常是通过 HTTP 协议,由 Web 服务器告知浏览器的,更准确地说,是通过 Content-Type 来表示的,例如:
Content-Type: text/HTML
从上一关我们可以知道,上传png文件时
Content-type=image/png
所以这次我们抓包修改文件的类型再上传
放包上传文件,上传成功,拼接绝对路径利用蚁剑连接
http://pikachu/vul/unsafeupload/uploads/one.php
连接成功
可以查看所有文件
3.3.3 getimagesize()
getimagesize()这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的。
这就需要用到图片马了,将图片和一句话木马结合从而绕过检验
上传成功
用蚁剑链接
后就可查看目录
4.Over permission
概述
如果使用A用户的权限去操作B用户的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞形成的原因是后台使用了 不合理的权限校验规则导致的。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对 对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
因此,在在权限管理中应该遵守:
1.使用最小权限原则对用户进行赋权;
2.使用合理(严格)的权限校验规则;
3.使用后台登录态作为条件进行权限判断,别动不动就瞎用前端传进来的条件;
你可以通过“Over permission”对应的测试栏目,来进一步的了解该漏洞。
4.1水平越权
首先可以先了解一下水平越权的原理
水平越权:指相同权限下不同的用户可以互相访问
提示当中已经告诉了我们一些用户名与密码,我们登录账号查看个人信息
可以查看到lucy的具体信息,我们可以看到url当中username=lucy,那么我们将它改为其他的人呢
可以看到我们仅仅修改了username 就可以访问到kobe的个人信息并未输入账号和密码
这就是水平越权。
4.2 垂直越权
其实按照字面意思也很好理解,垂直越权和水平越权的差别
垂直越权就是指使用权限低的用户可以访问到权限较高的用户,看看低权限用户是否能越权使用高权限用户的功能,比如普通用户可以使用管理员的功能。
我们先输入pikachu这个权限比较低的用户
可以看到只有查看权限
再登录管理员账号
可以发现区别是url当中变为了admin,而且多了删除和添加的管理员权限
那么我们再次登录普通的账号,尝试垂直越权,拿到管理员的权限
将url 当中的user改为admin
但是翻车了,我们尝试用管理员的账号创建一个用户,复制它的发包信息看看能不能用普通用户也创建新用户
POST /vul/overpermission/op2/op2_admin_edit.php HTTP/1.1
Host: pikachu
Content-Length: 90
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://pikachu
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://pikachu/vul/overpermission/op2/op2_admin_edit.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=8t4asp65g2rc0ebpgb68rn4i84
Connection: close
username=test&password=123456&sex=1&phonenum=1&email=1&address=1&submit=%E5%88%9B%E5%BB%BA
接着放包,发现已经创建好了一个test用户
在另一个网页中打开piakchu登录普通用户,抓包发送刚刚复制的request
抓包,黏贴
放包之后发现第二个包也是amin.php
最后返回登录页面
但是也已经成功用普通用户创建了一个用户