本章知识点:
1
、
CSRF-
审计
-
复现测试
&
同源策略
2
、
SSRF-
审计
-
功能追踪
&
函数搜索
配套资源(百度网盘)
链接:https://pan.baidu.com/s/1ex5ScpIgxwcRiZH6v51eig?pwd=8nky
提取码:8nky
代码审计-CSRF-SCMSFH 无验证
CSRF
1,直接复现有没有
成功->有漏洞,失败->代码->缺陷过滤(绕过)->有漏洞,失败->代码->完整过滤->没有漏洞
其它漏洞:关键函数和应用功能
直接复现,存在漏洞
代码审计
if($A_login!=""){
if(preg_match('/<|\(|\*|--|#| |\'|"|\.\//i', $A_login)){
die("{\"msg\":\"用户名含有特殊字符,请重新输入\"}");
}
if($A4_0x==1){
if($A_pwd!=""){
mysqli_query($conn, "update sl_admin set
A_head='$A_head',
A_login='$A_login',
A_part='$A_part',
A_pwd='".md5($A_pwd)."'
where A_id=".$A_id);
}else{
mysqli_query($conn, "update sl_admin set
A_head='$A_head',
A_login='$A_login',
A_part='$A_part'
where A_id=".$A_id);
}
}else{
if($A_pwd!=""){
mysqli_query($conn, "update sl_admin set A_head='$A_head',A_pwd='".md5($A_pwd)."' where A_id=".$A_id);
}else{
mysqli_query($conn, "update sl_admin set A_head='$A_head' where A_id=".$A_id);
}
}
mysqli_query($conn, "insert into sl_log(L_aid,L_time,L_add,L_ip,L_title) values(".$_SESSION["A_id"].",'".date('Y-m-d H:i:s')."','".$_SESSION["add"]."','".getip()."','编辑管理员')");
die("{\"msg\":\"success\",\"id\":\"".$A_id."\"}");
}else{
die("{\"msg\":\"请填全信息\"}");
}
}
通过阅读代码我们发现,源码只对自身的信息正确与否做出了判断,并没有对数据的请求来源做出判断,也没有判断当前操作会不会有危害,总之就是除了对数据本身进行了验证并没有别的多余验证,因此可能存在csrf漏洞。
代码审计-CSRF-ZBLOG 同源策略
直接复现漏洞,发现不存在
代码审计
根据请求头确定代码路径,找到对应代码。
case 'MemberPst':
CheckIsRefererValid();
PostMember();
$zbp->BuildModule();
$zbp->SaveCache();
$zbp->SetHint('good');
Redirect('cmd.php?act=MemberMng');
break;
function CheckIsRefererValid()
{
global $zbp;
$flag = CheckCSRFTokenValid();
if ($flag && $zbp->option['ZC_ADDITIONAL_SECURITY']) {
$flag = CheckHTTPRefererValid();
}
if (!$flag) {
$zbp->ShowError(5, __FILE__, __LINE__);
exit;
}
}
function CheckHTTPRefererValid()
{
global $bloghost;
$referer = GetVars('HTTP_REFERER', 'SERVER');
if (trim($referer) === '') {
return true;
}
$s = $bloghost;
$s = str_replace(':80/', '/', $s);
$s = str_replace(':443/', '/', $s);
if (stripos($referer, $s) === false) {
return false;
}
通过阅读源码发现,检测了HTTP Referer是否合法,检测了来源