文件上传基础-01
文件上传漏洞上传文件时,Web应用程序没有对上传文件的格式进行严格过滤 , 就容易造成可以上传任意文件的情况。还有一部分是攻击者通过 Web服务器的解析漏洞来突破Web应用程序的防护。上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞,攻击者可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器,这个恶意脚本文件,又被称为WebShell,也可以将WebShell脚本称为一种网页后门。WebShell具有非常强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等。
利用思路1、常规类
扫描获取上传
会员中心上传
后台系统上传
各种途径上传
2、CMS类
利用CMS源码
3、编辑器类(编辑器组件漏洞)
cheditor
fckeditor
kindeditor
xxxeditor
4、其他类/cve
代码审计
平台/三方应用
文件上传黑/白名单绕过1、验证/绕过前端1. js后端1. 黑名单- 特殊解析后缀
- .htaccess解析
- 大小写绕过
- 点绕过
- 空格绕过
- ::$DATA ...
xss笔记总结
——— 鲁迅曾经说过,乱点链接的人就该中马。
XSS(跨站脚本攻击)Cross-Site Scripting啥是xss :xss是被动式、注入攻击,把恶意代码想办法注入到你的程序中,获取需要的东西。
恶意代码通常是JavaScript、Java组件,VBScript,ActiveX,Flash或者就是原生的HTML。
攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如Cookie、SessionID 等,进而危害数据安全。
XSS的风险:Web应用若存在XSS漏洞,就会有如下风险:
用户的浏览器中运行攻击者的恶意脚本,从而导致Cookie信息被窃取,用户身份被报名顶替。攻击者能获得用户的权限来恶意使用Web应用的功能。向用户显示伪造的输入表单,通过钓鱼式攻击窃取用户的个人信息。
1、盗用cookie,获取敏感信息
被攻击者已经登陆了该网站,所以持有该网站发送想用户浏览器发送的cookie
cookie是浏览器向客户端发送的,用于识别身份,存储信息的。
客户端浏览器发送请求发送到服务器—》服务器—》发送HttpRes ...
SQL注入-报错注入
报错注入报错注入原理利用两个报错现象来实现注入,一是利用数据本身的报错信息,多是数据本身的错误,爆出提示信息。二是利用报错函数来爆出所需信息。
报错注入的场景适合无直接回显的sql注入,存在报错页面的回显。
常用报错函数
1.updatexml()(是mysql对xml文档数据进行查询和修改的xpath函数)语法:
UPDATEXML (XML_document, XPath_string, new_value);第一个参数:XML_document是String格式,为XML文档对象的名称第二个参数:XPath_string (Xpath格式的字符串)第三个参数:new_value,String格式,替换查找到的符合条件的数据
爆库名
http://192.168.1.24:83/Less-5/?id=-1‘ and updatexml(1,concat(0x7e,database(),0x7e),1) – =爆表名http://192.168.1.24:83/Less-5/?id=-1‘ and updatexml(1,concat(0x7e,( select g ...
SQL注入-堆叠注入
堆叠注入原理:堆叠注入,顾名思义,就是将语句堆叠在一起进行查询。原理很简单,mysql_multi_query() 支持多条sql语句同时执行,就是个;分隔,成堆的执行sql语句,例如
select * from users;show databases;
就同时执行以上两条命令,所以我们可以增删改查,只要权限够。虽然这个注入姿势很牛逼,但实际遇到很少,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。
源码分析:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555 ...
SQL注入-二次注入
二次注入原理:
在第一次进行数据库插入数据的时候,仅仅只是使用了 addslashes 或者是借助 get_magic_quotes_gpc 对其中的特殊字符进行了转义,在后端代码中可能会被转义,但在存入数据库时还是原来的数据,数据中一般带有单引号和#号,然后下次使用在拼凑SQL中,所以就形成了二次注入。
注入条件
(1)用户向数据库插入恶意语句(即使后端代码对语句进行了转义,如mysql_escape_string、mysql_real_escape_string转义)(2)数据库对自己存储的数据非常放心,直接取出恶意数据给用户
过程
第一步:插入恶意数据进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。第二步:引用恶意数据开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。
输入恶意SQL语句–》函数转译–》进入数据库,第一次不会引发注入–》用户调用数据会调出第一次注入的SQL语句–》二次注入行成
SQL注入-盲注
一、布尔盲注特征:没有回显数据,看不到结果只有登录成功或者失败,两种情况才可以使用
后端数据库代码1、猜数据库长度
select * from user where name = ‘$name’ ;
url:接收 :
? name = admin | ‘ and length( database () )=猜数据库长度
猜错为空,猜对则有回显。
2、猜数据库名(可以暴库)
? name = admin | ‘ and substr( database() , 1 ,1) = ‘ 猜的第一位名称 ‘ #
猜错为空,直到爆出数据库名称。
3、猜数据库中表的长度
猜第一个表长度
‘and length((select table_name from information_schema.tables where table_schema=’security’ limit 0,1))=6–+
猜第二个表长度
‘and length((select table_name from information_ ...