- 图形验证码的内容可OCR识别
- 多阶段的过程,先校验验证码,成功之后的下一步不需要验证码,可以直接抓包,跳过第一步的验证
- 验证码在服务段校验后,没有立即失效,需要客户端再次请求才会更新,只要客户端不再请求验证码即可使用原来的验证码
- 生成验证码的模块是否根据提供的参数生成验证码,如果是说明存在漏洞
- 有些验证码与数据包中的某个参数绑定,比如cookie中的某个属性,只要它们相匹配,验证码就认为是有效的。这种机制存在漏洞。
- 在某些情况下,验证码隐藏在HTML源码或通过其他方式获得“明文”
- 在服务器端,是否只有在验证码检验通过后才进行用户名和密码的检验,如果不是说明存在漏洞。
-有些网站默认不显示验证码,而是在输入错误一定数量之后才需要验证验证码,开发人员可能在Cookie中写入一个标记loginErr,用来记录错误数量,则可以不更新Cookie中的loginErr值反复提交,验证码就不会出现。
-服务端没有对验证码参数进行非空判断(删除验证码参数值或者全部删除)
-验证码不过期,没有及时销毁会话导致同一验证码反复可用。
-输入验证码点击登录抓包之后,如果页面不刷新或者说验证码不刷新,该验证码可以一直使用
允许直接上传脚本文件:php、jsp、aspx
结合web server解析漏洞
一、IIS 5.x/6.0解析漏洞
IIS 6.0解析利用方法有两种
1.目录解析 /xx.asp/xx.jpg
2.文件解析 wooyun.asp;.jpg
二、IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞
在默认Fast-CGI开启状况下,黑阔上传一个名字为wooyun.jpg,内容为
');?>的文件
然后访问wooyun.jpg/.php,在这个目录下就会生成一句话木马 shell.php
三、Nginx <8.03 空字节代码执行漏洞
影响版:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
Nginx在图片中嵌入PHP代码
然后通过访问xxx.jpg%00.php来执行其中的代码
四、Apache解析漏洞
Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断.
比如wooyun.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php.
五、其他
在windows环境下,xx.jpg[空格] 或xx.jpg. 这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点,黑客可以通过抓包,在文件名后加一个空格或者点绕过黑名单.若上传成功,空格和点都会被windows自动消除,这样也可以getshell。
如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入:
SetHandler application/x-httpd-php 然后再上传shell.jpg的木马, 这样shell.jpg就可解析为php文件。
前端文件名限制
firebug禁用javascript
firebug修改允许上传类型
Burp绕过限制
本地构造html代码
后端检测-MIME
修改MIME类型
后端检测-文件头
我们可以通过使用jpg图片马来绕过!
后端检测-文件扩展名,黑名单与白名单
大小写
寻找黑白名单的遗漏点
配合解析漏洞来绕过
%00和\x00截断
文件内容绕过:
图片马
加密webshell
填充垃圾数据
mov bx,ax
shl ax,2
add ax,bx
add ax,300h
shr ax,1
sub ax,100h
shl ax,3
char *readBase64File(char *fileName);int main(int argc, char* argv[]){char filePath[260];char fileCmd[512];char *fileName;int dirIdx;char *fileContent;char *dirPaths[4];dirPaths[0] = ”/home/data1/”;dirPaths[1] = ”/home/data2/”;dirPaths[2] = ”/home/data3/”;dirPaths[3] = ”/home/data4/”;fileName = argv[1];dirIdx = atoi(argv[2]);if (dirIdx > 3){printf(“file index error!\n”);return -1;}strcpy(filePath, dirPaths[dirIdx]);if (strlen(filePath) + strlen(fileName) < 260)strcat(filePath, fileName);elsereturn -1;fileContent = readBase64File(filePath);if (fileContent == NULL){printf(“read filecontent error!\n”);}else{printf(“file content is: %s\n”, fileContent);free(fileContents);}strcpy(fileCmd, “rm ”);strcat(fileCmd, fileName);printf(fileCmd);system(fileCmd);return 0;}
答案:命令执行,目录穿越,缓冲区溢出,数组越界访问,格式化字符串
(1)system(fileCmd);处存在命令执行漏洞及任意文件删除问题,需要进行命令执行过滤
(2)printf(fileCmd);处存在格式化字符串漏洞,此处可以通过%s来打印命令
(3)fileContent =readBase64File(filePath);处存在目录穿越,任意文件读取漏洞,此处可以对../这种目录穿越特征进行过滤
(4)strcpy(filePath, dirPaths[dirIdx]);处存在数组访问越界,从而可以也可以导致缓冲区溢出问题,判断有符号数的dirIdx时需要判断其大于等于0