序言
2022/3/6晚上10点开始修漏洞,直接淦到凌诚5点,最后剩下一个漏洞实在肝不动了,早上还有课,不过这次没有逃课,因为上一周逃课了,结果老师点名了,这次不敢了。
1. HTML form without CSRF protection
解决方法:利用tp5的表单令牌进行验证
在form
里面加{:token()}
,后端添加
$token = $this->request->token('__token__', 'md5');//这里得用MD5格式,不能用其他格式 sha1
Session::set('token',$token);
$this->assign('token', $token);
return $this->fetch();
将令牌存入session,然后在接收账号密码的方法进行获取并验证,前端将输入的密码与token
拼接在一起,利用js的hex_md5()
进行md5转换,后台对接收的密码再进行md5转换,判断用户名是否存在,存在的话取出密码,与存储到session令牌拼接进行两次md5转换,判断是否相等,相等则登录成功,将账号存入session,作为登录跳转方法的限制。
2. Slow HTTP Denial of Service Attack
解决方法:
在apachehttpd.conf
里面,将LoadModule reqtimeout_module modules/mod_reqtimeout.so
注释解除,并添加以下代码
<IfModule reqtimeout_module>
RequestReadTimeout header=5-40,MinRate=500 body=20,MinRate=500
</IfModule>
3. User credentials are sent in clear text
下面这句话收回(这个漏洞就是剩下的最后一个,最后才发现是因为,今天才发现不是input的type
属性造成的,将其属性password
改为text
,漏洞成功修复。)type='password'
带来的漏洞,而是name="passwd"
带来的,只需要改个别的名字就可以,如name="pwd
,不可以是password或者passwd
。
如name="passwd
4. application error message
登记页面
登记页面出现此问题,当时form表单请求的方法设置为post,但实质还是get请求,也就给漏扫一个构造非法数据的机会,非法请求如下图:
第一次的解决方法判断前端传过来的参数是否是数组,如果是数组就报错,但因为漏扫将前端的name属性修改为数组,后台接收不到也就报500错误,第二个方法是后台定义一个数组,然后利用Request::instance()->param();
将传过来的参数统一接收,也就不存在找不到name属性的错误,最后这个漏洞成功修复,但又产生了一个新的漏洞,漏扫将input值修改为很长的字符串,如下图:
也会产生500错误,最后没办法修复,最后采取了ajax请求的方式进行登记,成功解决问题。
后台管理页面
该漏洞出现的原因是因为form表单默认请求方法是GET
请求,漏洞扫描工具利用这个在地址后面添加非法参数,使得服务器报500
错误,如果多线程进行打击,服务器就会宕机,非法请求如下图:
修改方法是将其请求方式改为POST
请求,layui表单使用POST请求很困难,必须使用ajax
进行请求,但这样一来即使请求的账号密码正确也不会自动跳转网页。最终解决方法是再写一个页面跳转的方法,在登录认证方法内对账号密码正确的用户将其用户名存入session,作为页面跳转的认证。
在修改之后出现如下图bug:
修复方式为后端用request接收,$request = Request::instance()->post();
,判断条件为
if(is_array($login_user) ||is_array($login_passwd) ){
return $this->error('非法登录!');
}
检测到目标站点存在javascript框架库漏洞
该漏洞的修复方法为修改jq文件版本号为最新,小于3.4.0的版本绿盟扫描都会出现该漏洞
host攻击
在nginx的vhosts.conf的server
中添加以下代码
if ($http_Host !~* ^域名$)
{
return 403;
}