RedTiger’s Hackit SQL注入测试write up

挑战地址http://redtiger.labs.overthewire.org/

level 1

直接给出表名level1_users,同时还给出了一个cat参数,直接构造union查询:

 

level 2

simple login bypass,使用php万能密码,用户名随意密码处输入’ or ‘1’ = ‘1即可

level 3

让我们找到Admin的密码,并且给了表名level3_users,给了一个参数usr,hint是try to get an error,让我们报错,构造出?usr[0]=1即可报错。提示错误出在/var/www/html/hackit/urlcrypt.inc,直接查看文件得到源码:

还好不是只给解密函数,可以直接用加密函数加密查询语句。构造

 

但是发现怎么都查询不出来,最后发现win和linux下加密得出的字符串不一样,进一步测试发现windows和linux对于相同的srand()种子下rand()得出的随机数不一样,导致加密函数只在linux下有效。最后改用服务器运行加密函数得到flag。

level 4

标题就是盲注,给的参数id=1,通过页面返回1 rows or 0 rows确定查询正确与否。

可以用case when或者if语句构造查询语句,

这里用case when构造查询keyword长度

使用if的查询语句为

得出长度为21。构造查询语句查询每一位的ascii

用python脚本自动爆破。

level 5

又是一个Login bypass,提示密码用md5加密,对username注入

然后

成功绕过,要注意的是mysql下”– “注释最后要加个空格。

level 6

参数user=1,老方法?user=1 order by 6得出字段数为5,然后猜测显示位,

 

发现username在第二位时可以显示,password却不管在哪位都显示不出来,奇怪的现象。最后发现username可能也是一个注入点,构造

返回not a valid MySQL result resource,用16进制绕过后返回正确,

继续构造

得出显示位为2,4

最后构造

即可拿到admin的密码,登陆得到flag。

level 7

尝试在输入1’,页面返回

直接给出了原始查询语句,因此可以直接构造一个查询语句绕过

页面返回正常,找到盲注方法,接着开始查询google文章的autor长度

最后得到autor长度为17。因为屏蔽了substring和substr以及ascii等若干函数,在查找替代方法时找到Locate函数可以代替like并且返回字符位置,于是用Locate函数构造后续查询语句,一个坑爹的事实是貌似也过滤了大于小于符号,导致只能暴力查询,逐位构造

用python脚本解决

成功拿到flag:testuserforg00gle,但是尝试输入时发现错误,查看别人的writeup发现是大小写的问题,locate函数貌似无法正确识别大小写,因此这个注入方法实际上是失败的。这样的话可能只能用暴力的方法强行封闭括号构造Union查询,常规的注释方法被过滤了,但是可以用+来代替– 中的空格绕过注释过滤。

level 8

在email处加单引号会报错,并会显示之后的语句,因为提交按钮是edit,所以很有可能是一个update语句,更新之后的数据直接显示在输入框中,并且只在email存在注入,所以直接闭合email的单引号,更新name的数据为password即可显示。

level 9

textarea处是注入点,猜测是一个insert语句,这就比较简单了,直接构造即可

level 10

只有一个login的button,post注入,直接打开burpsuite,post参数里有一个base64加密的字符串,解密后:

看不懂。