简介
CTF比赛中经常会遇到一种限制————IP过滤,要求你使用本地登录(127.0.0.1)或者是其他一些IP限制,这个时候就需要我们伪造IP。
PS:阅读本文需要了解http协议相关知识。
后端获取用户ip通用方法
首先先了解一下服务器如何获取我们的用户IP。因为自己并没有多少php实战经验,所以以下两个代码案例可能有瑕疵、不全面,如果有更好的,可以联系我进行修改。
1 | // 获取用户真实 IP |
1 |
|
IP绕过
所谓伪造,就是篡改http协议头中相关参数,以此绕过对方服务器的IP检测。
通过上面代码我们可以了解到一般后端检查的参数包括但不绝对
1 | Client-IP: 127.0.0.1 |
其中,REMOTE_ADDR 只能通过 Proxy
、VPN
等方法來改变,没办法借由篡改 Header
来伪造。(没有验证,大家可以试一试。)
以不同的方式连接服务器,http header都会有所不同,以下简单介绍几种常见情况以供大家参考。
一、没有使用代理服务器的情况:
REMOTE_ADDR = 您的 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示
二、使用透明代理服务器的情况:Transparent Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 您的真实 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
三、使用普通匿名代理服务器的情况:Anonymous Proxies
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 代理服务器 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。
四、使用欺骗性代理服务器的情况:Distorting Proxies
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 随机的 IP ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。
五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)
REMOTE_ADDR = 代理服务器 IP
HTTP_VIA = 没数值或不显示
HTTP_X_FORWARDED_FOR = 没数值或不显示 ,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
我在服务器上写了一个小网页用来输出访问的IP,以供大家尝试是否绕过成功。网址为http://desperadoccy.club:39001/ip.php,还请各位安全爱好者不要扫我的服务器(orz)。
另类IP检测
更改IP写法
IP地址写法,有些服务器会过滤点分十进制的用户IP。对于这种过滤我们可以采用改编IP的写法的方式进行绕过,例如192.168.0.1这个IP地址我们可以改写成:1
2
3
4
5
6
7(1)、8进制格式:0300.0250.0.1
(2)、16进制格式:0xC0.0xA8.0.1
(3)、10进制整数格式:3232235521
(4)、16进制整数格式:0xC0A80001
利用解析URL所出现的问题
在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,导致可以绕过过滤。1
http://www.baidu.com@192.168.0.1/
当后端程序通过不正确的正则表达式(比如将http之后到com为止的字符内容,也就是www.baidu.com,认为是访问请求的host地址时)对上述URL的
内容进行解析的时候,很有可能会认为访问URL的host为www.baidu.com,而实际上这个URL所请求的内容都是192.168.0.1上的内容。
其他http header知识点
1、只允许国外访问,有可能是 HTTP 请求头中的 Accept-Language 为中文(cn-zh),修改为英文(en-us)即可
2、浏览器类型限制:修改 HTTP 请求中的 User-Agent
3、IP地址限制:可能跟 HTTP 请求头中的 X-Forwarded-For、client-ip、remote_addr 有关,或者挂代理。
4、需要登录,可能是 Cookie 的问题,如果 Cookie 比较简单,试试能不能构造。
5、尝试查看 robots.txt 可以获得该网站的一些信息。
6、有一些加referer加上代理ip。