不懂先生

一次通宵修漏洞经历
序言2022/3/6晚上10点开始修漏洞,直接淦到凌诚5点,最后剩下一个漏洞实在肝不动了,早上还有课,不过这次没有...
扫描右侧二维码阅读全文
07
2022/03

一次通宵修漏洞经历

序言

2022/3/6晚上10点开始修漏洞,直接淦到凌诚5点,最后剩下一个漏洞实在肝不动了,早上还有课,不过这次没有逃课,因为上一周逃课了,结果老师点名了,这次不敢了。

1. HTML form without CSRF protection

83849-7hy18j052k.png
解决方法:利用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

17867-4yk29fwmses.png
52935-681cvv86riw.png
下面这句话收回(这个漏洞就是剩下的最后一个,最后才发现是因为type属性造成的,将其属性password改为text,漏洞成功修复。),今天才发现不是input的type='password'带来的漏洞,而是name="passwd"带来的,只需要改个别的名字就可以,如name="pwd,不可以是password或者passwd
name="passwd

4. application error message

登记页面

登记页面出现此问题,当时form表单请求的方法设置为post,但实质还是get请求,也就给漏扫一个构造非法数据的机会,非法请求如下图:
63841-nhqtype5lgl.png
第一次的解决方法判断前端传过来的参数是否是数组,如果是数组就报错,但因为漏扫将前端的name属性修改为数组,后台接收不到也就报500错误,第二个方法是后台定义一个数组,然后利用Request::instance()->param();将传过来的参数统一接收,也就不存在找不到name属性的错误,最后这个漏洞成功修复,但又产生了一个新的漏洞,漏扫将input值修改为很长的字符串,如下图:
31246-hb7exabmo9m.png
也会产生500错误,最后没办法修复,最后采取了ajax请求的方式进行登记,成功解决问题。

后台管理页面

该漏洞出现的原因是因为form表单默认请求方法是GET请求,漏洞扫描工具利用这个在地址后面添加非法参数,使得服务器报500错误,如果多线程进行打击,服务器就会宕机,非法请求如下图:
99205-iyt02ygtv49.png
修改方法是将其请求方式改为POST请求,layui表单使用POST请求很困难,必须使用ajax进行请求,但这样一来即使请求的账号密码正确也不会自动跳转网页。最终解决方法是再写一个页面跳转的方法,在登录认证方法内对账号密码正确的用户将其用户名存入session,作为页面跳转的认证。
在修改之后出现如下图bug:
93763-g2vwevhqh9t.png
修复方式为后端用request接收,$request = Request::instance()->post();,判断条件为

if(is_array($login_user) ||is_array($login_passwd) ){
    return $this->error('非法登录!');
}

检测到目标站点存在javascript框架库漏洞

13818-de9d8qy4nud.png
该漏洞的修复方法为修改jq文件版本号为最新,小于3.4.0的版本绿盟扫描都会出现该漏洞

host攻击

在nginx的vhosts.conf的server中添加以下代码

if ($http_Host !~* ^域名$)
{
    return 403;
}
Last modification:April 14th, 2022 at 01:05 pm

Leave a Comment