Hello,各位小伙伴周六好~
果然大家对编程都不感兴趣,哈哈
今天一起来看看linux上的一款web访问工具curl吧~
Part.1
Curl工具
什么是curl?
在Linux中,我们除了可以使用浏览器访问web服务外,还可以使用curl工具。
curl是一个命令行工具,通过指定的URL来上传或下载数据,并将数据展示出来。
通过curl我们可以发送自定义get、post请求。
curl的基本用法
首先我们在服务器端写一个简单的PHP代码curl.php,来测试curl的基本功能,如下:
说明如下:
(1)Get方式访问
直接使用curl方法访问指定url,默认采用的就是Get方法,如下:
wireshark抓包结果:
Get方法传参的方式和浏览器相同,在?后跟相应的参数即可,收到回复flag1 is 123:
加上-i选项,可以显示请求头详细信息:
加上-v选项,可以显示请求头、响应报文信息:
(2)Post方法访问
发送Post请求,需要跟-X参数,如下:
wireshark抓包如下:
通过-d选项,可以指定要传的参数:
curl修改请求头信息
通过curl -H选项,我们可以添加、修改请求头信息。使用如下PHP代码进行测试:
说明如下:
(1)几种IP传参方式对比
首先,$_SERVER是一个全局变量,与$_GET、$_POST一样,可用于获取客户端的信息。
$_SERVER[“REMOTE_ADDR”],获取的是客户端与服务器三次握手时建立连接使用的源IP,这个不属于HTTP头部参数,无法伪造。
而$_SERVER["HTTP_CLIENT_IP"]和$_SERVER["HTTP_X_FORWARDED_FOR"]分别用于接收HTTP头部中的Client-ip字段和x-forwarded-for字段传递的值,用于识别客户端源IP地址。两者传递的信息,都是可以伪造的。
另外,$_SERVER[“REMOTE_ADDR”]接收的是报文IP层的源IP地址,所以经过NAT或者代理等环境后,源IP会发生改变,就不是客户端的真实IP了。
Client-ip和x-forwarded-for则可以在发包时,将客户端的真实源IP记录在HTTP头部当中,使服务器端可以识别。以上是三者的区别。
(2)IP传参
首先不传参,直接访问,REMOTE_ADDR可以接收到值,打印flag3:
通过添加client_ip头部传递任意值,打印flag4:
通过添加XFF头部也可以传递任意值,打印flag5:
注意:client-ip和XFF的不同之处在于,client-ip不属于标准请求头信息,部分服务器可能不识别,因此XFF用的更多。
(3)Cookie传参
通过Cookie字段可以传递指定Cookie值:
通过以上方法也可以设置其他请求头信息。
Part.2
结语
好啦,以上就是curl工具的简单使用了。
写这篇文章也是因为,接下来要写python脚本如何发送自定义Get、Post请求,方便大家对照学习。(没想到吧,python学起来!)
Peace !