web安全相关基础理论知识

  1. 1.应用层协议
    1. HTTP常用消息头
    2. 编码字符
  2. 同源策略
    1. HTTP方法用途
    2. FTP协议分析
  3. 2.工具
    1. Burpsuite
    2. meterpreter模块
    3. 小型工具
    4. 信息搜集工具
    5. 密文破解
  4. 3.检测
    1. Linux检测

最小权限集:
计算MD5校验文件是否成功写入,是否有效/被替换

https://github.com/sqlmapproject/sqlmap
《黑客攻防技术宝典·实战篇》一书和雨笋教育实训。

在阅读这篇博客之前,我假定您对http协议和Linux系统的命令有一些基本的了解。

1.应用层协议

HTTP常用消息头

有些消息头是只能用于请求头,有些是可选的,这里只列出常用的且不加辨别。
Referer消息头:当前请求的的原始url,网站间跳转会填写。
Accept消息头:指定客户端接收哪些MIME类型。
Host消息头:出现在被访问的完整URL中的主机名称(http 1.1版本必须使用)
Cookie消息头
Pragma消息头:指示浏览器不要将响应保存在缓存。
Expires消息头:指出消息内容的过期时间
Connection头:告诉对方完成HTTP传输后是关闭TCP连接还是开着
Transfer-Encoding:主体消息的编码形式
Origin:用于跨域Ajax中,指示提出请求的域
Location:在重定向响应中指定重定向的目标
Set-Cookie:用于向浏览器发布Cookie,浏览器会在随后请求中返回给服务器
X-Forwarded-For:RFC 7239标准,并排表示经过代理前的IP,可以用于IP伪造。

编码字符

url的编码替代
%3d =
%25 %
%20 空格 (+也表示空格)
%0a 换行
%00 空字节
unicode编码以%u为前缀
html的编码替代
&quot “
&apos ‘
&amp &
&lt <
&gt >

同源策略

一个域中的页面可以向另一个域提出请求,但不能处理请求返回的数据;可以加载来自其它域的脚本并在自己域执行。无法读取或修改其它域的DOM或Cokkie数据。

HTTP方法用途

GET用于请求资源,POST用于提交数据。
HEAD:不在响应中返回消息主体的GET方法。因为速度很快,可以用于只检测资源是否存在。
TRACE:响应主体中返回请求消息的具体内容,可检测代理服务器。
OPTIONS:报告有效的HTTP方法
PUT:试图上传资源,如果已经存在会替换原先数据。危险方法。
DETELE:删除指定资源,危险方法。
nmap -v -A形式的端口扫描后,若扫描到使用HTTP服务的端口(不一定是80端口),会扫出能使用的HTTP方法。

FTP协议分析

ftp是文件传输协议,一般来说数据包是不加密的,从中甚至能抓到其中的用户名和密码,并非安全协议。ftp连接分为控制连接和数据连接,控制连接使用21端口,用来传输和应答命令,数据连接使用20端口或是使用控制连接商量的端口。

FTP报文分为请求(Request)和应答(Respone)。请求者是客户端即下载方,应答者是服务端即文件提供方。常见请求命令有:
SYST:请求系统类型。
USER:请求者提供用户名。
PASS:请求者提供用户名对应的密码。
PORT:请求建立数据连接
LIST:请求查询文件列表信息。
TYPE:说明文件的类型,A为Ascii形式,I为二进制形式。
RETR:请求服务端通过已建立的连接发送文件内容。
QUIT:断开连接请求
wireshark报文
数据连接协议在wireshark显示为ftp-data协议,内容就直接是传输内容,可以使用追踪TCP流等方式获取实际文件。

攻击面:
常见攻击面

2.工具

很多工具都在Kali Linux中有集成,其常用于渗透测试。

Burpsuite

meterpreter模块

portfwd:端口转发工具,可以将远程主机端口转发到本地内网的端口。

端口映射:外网用户无法直接访问内网主机,可以设置端口映射将远程端口映射到本地,实际上充当了反向代理的作用。
端口转发:内网以NAT形式相连,内网主机的ip地址和这个内网段公网IP路由器的端口进行了绑定,其和外网通信时,通过消息流经的IP路由器的端口,就知道传给内网内的哪台主机。
反向代理:代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。

小型工具

Fiddler:web调试工具,可以记录浏览器和服务器之间的通信,并允许设置断点修改数据。
nmap:端口扫描工具,老朋友了,不过其中-A -v参数很有用,可以全面扫描且显示详细信息。-sS就是半开扫描,一般不会记录在对方主机系统日志中。不过现在nmap支持脚本插件,”–script=脚本名称”,可选用插件,插件在官网记录。

信息搜集工具

Google:Google搜索网站特征方式(应当有梯子):
Google

主机发现:arp-scan是kali的工具,用于发现当前网段的主机,打印其IP,命令:

arp-scan -l

目录扫描:dirsearch可用于目录扫描,如对于http页面扫描:

dirsearch -u  http://192.168.116.172:80

扫描会使用经典后缀php、html、js、apsx、jsp,但是实际使用的有可能是别的后缀,如php可能是php3、pht、phps等,可使用-e参数指定。

密文破解

Hash破解:可用hashcat工具,可设置字典破解、组合破解、掩码暴力破解等。可用于破解MD5、SHA等(通过-m参数指定)。

3.检测

Linux检测

/root/.bash_history:记录root用户执行过的历史命令,可直接用history指令打印。其它用户在自己的家目录下也会有各自的该文件,不过内容一般都会被入侵者删掉,因此最好配置一个另行备份的位置。

/etc/init.d目录:开机自启动的服务
入侵者可能会用crontab命令设置恶意定时任务。排查位置:
定时任务

如果知道入侵的时间段,可用find / -iname “*” -atime 1 -type f 命令查看一天前访问的文件,可以细分时间或目录。stat命令可查看文件的创建时间和修改时间。

一些重要的日志
/var/log/message文件,记录Linux系统绝大多数信息,首要排查。
/var/log/cron文件,是记录定时任务相关的日志。
/var/log/secure文件,记录验证和授权,涉及账号密码的都会记录。
lastlog命令查看所有用户最后登录时间
lastb命令查看错误登录的日志
last命令查看所有用户登录、注销,系统启动关机事件。

一些有用的命令:
打印爆破root账号的IP

grep "Failed password for root" /var/log/secure | awk '{print $11}' |sort | uniq -c | sort -nr | more

成功登录的IP:

grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

登录成功的⽇期、⽤户名、IP:

grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

我的服务器被爆破成功过一次,然后那个入侵者把所有操作和有关自己IP的日志包括爆破记录几乎都清掉了,只在/var/log/secure留下了一丁点痕迹,因此单一检测手段是不可靠的。

完整性检查,查看哪些命令被替换了:

rpm -Va > rpm.log

一般系统命令会在/bin目录,或是别的命令也可能在其它$PATH的路径,将缺失命令移回/bin目录即可。


如果有任何有错误或不够清晰的表达,欢迎邮件至 passacaglia@88.com,谢谢!

文章标题:web安全相关基础理论知识

字数:2k

本文作者:Passacaglia

发布时间:2022-07-04, 09:40:26

最后更新:2022-07-31, 18:28:08

原始链接:https://passacaglia424.github.io/2022/07/04/%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。