渗透测试知识学习

SQL注入类

原理 分类 防御

分类: 按数据库分 Mysql、MsSQL、Oracle、Access 然后分三大类回显、盲注、带外,回显包括直接回显、报错,盲注包括布尔、延时,带外的话就是mysql的DnsLog注入、MsSQL的跨库查询、Oracle的带外函数 报错 盲注 联合 时间 内联 堆叠 分类:报错注入、盲注、时间盲注、二次注入,宽字节,堆叠注入,http header的注入,xff,cookie注入

mssql 删除xp_cmdshell 怎么提权

mysql读文件,写文件,写一句话要什么条件

除了这种方式方式还有吗? 可能将一句话木马写入到数据库里、写日志文件也是一种回答

sql注入绕过思路

mssql和mysql区别

Sqlmap参数

为什么使用sqlmap的–cookie参数

Sqlmap写文件getshell

mssql的提权方式,提权原理是什么,用sa用户提权的前提条件,不是sa用户可否提权

mysql数据库的提权 mysql提权的原理

SQL server的getshell,除了xp_cmdshell还有什么

mysql如何提权,gpc和利用写日志getshell的关系

sqlmap中的–os-shell和–sql-shell有什么区别

mysql UDF提权怎么提权

mysql UDF提权.dll文件大于多少放那个文件夹下,小于多少放到哪个文件夹下。

mysql报错注入的函数有哪些

1)and extractvalue(1, concat(0x7e,(select @@version),0x7e))】】】

2)通过floor报错 向下取整

3)+and updatexml(1, concat(0x7e,(secect @@version),0x7e),1)

4).geometrycollection()select from test where id=1 and geometrycollection((select from(selectfrom(select user())a)b));

5).multipoint()select from test where id=1 and multipoint((select from(select from(select user())a)b));

6).polygon()select from test where id=1 and polygon((select from(select from(select user())a)b));

7).multipolygon()select from test where id=1 and multipolygon((select from(select from(select user())a)b));

8).linestring()select from test where id=1 and linestring((select from(select from(select user())a)b));

9).multilinestring()select from test where id=1 and multilinestring((select from(select from(select user())a)b));

10).exp()select from test where id=1 and exp(~(select * from(select user())a));

sqlmap的参数:–dbs,–os-shell,–cmd-shell,–sql-shell,如何寻找路径

sql server提权

mssql的sa,db账户有啥区别

sql server数据库提权流程:

sqlserver 非sa用户如何提权

宽字符注入的原理

file

mysql注入版本小于5.0和大于5.0有什么区别

mysql的用户名密码是存放在那张表里面? mysql密码采用哪种加密方式?

sql注入的注入点

file

mysql写shell的几种办法

outfile、dumpfile、开启log写webshell

如何测试网站用的哪种数据库

file

sql里面只有update怎么利用

sql如何写shell/单引号被过滤怎么办

mysql提权

Mysql_UDF提权

Mysql_UDF提权 要求: 1.目标系统是Windows(Win2000,XP,Win2003);2.拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数 3.有root账号密码 导出udf: MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的lib\plugin文件夹下才能创建自定义函数 可以再mysql里输入 select @@basedir show variables like ‘%plugins%’ 寻找mysql安装路径 提权: 使用SQL语句创建功能函数。语法:Create Function 函数名(函数名只能为下面列表中的其中之一)returns string soname ‘导出的DLL路径’; create function cmdshell returns string soname ‘udf.dll’ select cmdshell(‘net user arsch arsch /add’); select cmdshell(‘net localgroup administrators arsch /add’);

drop function cmdshell; 该目录默认是不存在的,这就需要我们使用webshell找到MYSQL的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录即可。

Mysql mof提权

mysql两种提权方式

SQL注入防护方法?

1、使用安全的API 
2、对输入的特殊字符进行Escape转义处理 
3、使用白名单来规范化输入验证方法
4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。

为什么参数化查询可以防止sql注入

原理: 使用参数化查询数据库服务器不会把参数的内容当作sql指令的一部分来执行,是在数据库完成sql指令的编译后才套用参数运行 简单的说: 参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑

宽字节注入产生原理以及根本原因

产生原理 在数据库使用了宽字符集而WEB中没考虑这个问题的情况下,在WEB层,由于0XBF27是两个字符,在PHP中比如addslash和magic_quotes_gpc开启时,由于会对0x27单引号进行转义,因此0xbf27会变成0xbf5c27,而数据进入数据库中时,由于0XBF5C是一个另外的字符,因此\转义符号会被前面的bf带着”吃掉”,单引号由此逃逸出来可以用来闭合语句。 在哪里编码 根本原因 character_set_client(客户端的字符集)和character_set_connection(连接层的字符集)不同,或转换函数如,iconv、mb_convert_encoding使用不当。 解决办法 统一数据库、Web应用、操作系统所使用的字符集,避免解析产生差异,最好都设置为UTF-8。或对数据进行正确的转义,如mysql_real_escape_string+mysql_set_charset的使用。

sql里面只有update怎么利用

先理解这句 SQL UPDATE user SET password=’MD5($password)’, homepage=’$homepage’ WHERE id=’$id’ 如果此 SQL 被修改成以下形式,就实现了注入 1:修改 homepage 值为http://xxx.net', userlevel=’3 之后 SQL 语句变为 UPDATE user SET password=’mypass’, homepage=’http://xxx.net‘, userlevel=’3’ WHERE id=’$id’ userlevel 为用户级别 2:修改 password 值为mypass)’ WHERE username=’admin’# 之后 SQL 语句变为 UPDATE user SET password=’MD5(mypass)’ WHERE username=’admin’#)’, homepage=’$homepage’ WHERE id=’$id’ 3:修改 id 值为’ OR username=’admin’ 之后 SQL 语句变为 UPDATE user SET password=’MD5($password)’, homepage=’$homepage’ WHERE id=’’ OR username=’admin’

sql注入过滤了逗号,怎么弄?

file

mssql 删除xp_cmdshell 怎么提权

mssql的提权方式,提权原理是什么,用sa用户提权的前提条件,不是sa用户可否提权

SQL server的getshell,除了xp_cmdshell还有什么

mysql如何提权,gpc和利用写日志getshell的关系

sqlmap的参数:–dbs,–os-shell,–cmd-shell,–sql-shell,如何寻找路径

盲注和延时注入的共同点?

都是一个字符一个字符的判断

为什么参数化查询可以防止SQL注入

原理:

使用参数化查询数据库服务器不会把参数的内容当作sql指令的一部分来执行,是在数据库完成sql指令的编译后才套用参数运行

简单的说: 参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑

SQL里面只有update怎么利用

SQL如何写shell/单引被过滤怎么办

XSS

1、XSS原理 反射型

用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。需要诱使用户“点击”一个恶意链接,才能攻击成功

存储型

存储型XSS会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。

DOM型

通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。

2、DOM型和反射型的区别 反射型XSS:通过诱导用户点击,我们构造好的恶意payload才会触发的XSS。反射型XSS的检测我们在每次请求带payload的链接时页面应该是会带有特定的畸形数据的。DOM型:通过修改页面的DOM节点形成的XSS。DOM-based XSS由于是通过js代码进行dom操作产生的XSS,所以在请求的响应中我们甚至不一定会得到相应的畸形数据。根本区别在我看来是输出点的不同。 3、DOM型和XSS自动化测试或人工测试 人工测试思路:找到类似document.write、innerHTML赋值、outterHTML赋值、window.location操作、写javascript:后内容、eval、setTimeout 、setInterval 等直接执行之类的函数点。找到其变量,回溯变量来源观察是否可控,是否经过安全函数。自动化测试参看道哥的博客,思路是从输入入手,观察变量传递的过程,最终检查是否有在危险函数输出,中途是否有经过安全函数。但是这样就需要有一个javascript解析器,否则会漏掉一些通过js执行带入的部分内容。 4、如何快速发现XSS位置

5、对于XSS怎么修补建议

输入点检查:对用户输入的数据进行合法性检查,使用filter过滤敏感字符或对进行编码转义,针对特定类型数据进行格式检查。针对输入点的检查最好放在服务器端实现。

输出点检查:对变量输出到HTML页面中时,对输出内容进行编码转义,输出在HTML中时,对其进行HTMLEncode,如果输出在Javascript脚本中时,对其进行JavascriptEncode。对使用JavascriptEncode的变量都放在引号中并转义危险字符,data部分就无法逃逸出引号外成为code的一部分。还可以使用更加严格的方法,对所有数字字母之外的字符都使用十六进制编码。此外,要注意在浏览器中,HTML的解析会优先于Javascript的解析,编码的方式也需要考虑清楚,针对不同的输出点,我们防御XSS的方法可能会不同,这点可能在之后的文章会做下总结。

除此之外,还有做HTTPOnly对Cookie劫持做限制。

6.xss能用来做什么 file

CSRF

1、CSRF原理 CSRF是跨站请求伪造攻击,由客户端发起,是由于没有在关键操作执行时进行是否由用户自愿发起的确认 2、防御 验证Referer 添加token 3、token和referer做横向对比,谁安全等级高? token安全等级更高,因为并不是任何服务器都可以取得referer,如果从HTTPS跳到HTTP,也不会发送referer。并且FLASH一些版本中可以自定义referer。但是token的话,要保证其足够随机且不可泄露。(不可预测性原则)

SSRF

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。 1、SSRF漏洞的成因 防御 绕过 成因:模拟服务器对其他服务器资源进行请求,没有做合法性验证。利用:构造恶意内网IP做探测,或者使用其余所支持的协议对其余服务进行攻击。防御:禁止跳转,限制协议,内外网限制,URL限制。绕过:使用不同协议,针对IP,IP格式的绕过,针对URL,恶意URL增添其他字符,@之类的。301跳转+dns rebindding。

如何绕过127.0.0.1的限制

变异的地址 url=http://127.1/flag.php url=http://0/flag.php url=http://0.0.0.0/flag.php url=http://spoofed.burpcollaborator.net/flag.phphttp://spoofed.burpcollaborator.net我们可以使用此主机,它将指向127.0.0.1/ localhost) url=http://127.127.127.127/flag.php url=http://0177.0.0.1/flag.php url=http://2130706433/flag.php

更改域名解析到127.0.0.1

ssrf拿shell

通过gopher协议打myshell redis写shell

扫描端口

查看端口是否打开 dict协议 url=dict://127.0.0.1:6379

文件上传

参考 https://rainy-autumn.top/index.php/2021/03/09/ctf-show-web%e5%85%a5%e9%97%a8%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0151-170/

文件包含


渗透测试知识学习
http://example.com/2021/08/08/OldBlog/渗透测试知识学习/
作者
Autumn
发布于
2021年8月8日
许可协议