0x01 知识点

  • mysql_pconnect(server,user,pwd,clientflag)
mysql_pconnect() 函数打开一个到 MySQL 服务器的持久连接。

mysql_pconnect() 和 mysql_connect() 非常相似,但有两个主要区别:

    当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。

    其次,当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)。

  • get_lock(str,timeout)
Tries to obtain a lock with a name given by the string str, using a timeout of
timeout seconds. A negative timeout value means infinite timeout. The lock is
exclusive. While held by one session, other sessions cannot obtain a lock of
the same name. get_lock会按照key来加锁,别的客户端再以同样的key加锁时就加不了了,处于等待状态。 在一个session中锁定变量,同时通过另外一个session执行,将会产生延时

举例:

打开两个mysql shell

现在一个shell中执行命令 select get_lock('test',5) 先上锁

然后另外一个shell中执行重复的命令

成功延时。

我们可以用这种方法来进行注入判断 但是必须要提供长连接 即 mysql_pconnect。

0x02 PWNHUB:全宇宙最简单的PHP

1. Get_lock()解法

  • 核心代码
<?php
require 'conn.php';
$id = $_GET['id'];
if(preg_match("/(sleep|benchmark|outfile|dumpfile|load_file|join)/i", $_GET['id']))
{
die("you bad bad!");
}
$sql = "select * from test where id='".intval($id)."'";
$res = mysql_query($sql);
if(!$res){
die("404 not found!");
}
$row = mysql_fetch_array($res, MYSQL_ASSOC);
mysql_query("update test set point=point+1 where id = '".$id." '"); //这里有注入
?>
<html> <head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><?=$row['point']?></title>
<link href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
</head> <body>
<div>
<div class="container">
<div class="row">
<div class="col-md-12">
<h1><?=$row['point']?></h1>
<article><?=$row['pw']?></article>
</div>
</div>
</div>
</div>
</body>
</html>

可以看出update处有注入。

  • 思路
if(preg_match("/(sleep|benchmark|outfile|dumpfile|load_file|join)/i", $_GET['id']))
1. 报错注入==>错误显示被禁止 故放弃
2. dnslog带外注入==>load_file函数被禁止 而且权限不一定是root 故放弃
3. updatexml extractvalue报错注入==>错误显示禁止 放弃
4. 普通盲注==>页面没有回显 故放弃
5. 延时注入==>sleep benchmark被禁止 这时候我们可以用get_lock方法进行盲注

所以我们的攻击过程如下 先上锁 再进行盲注

  1. 先执行 1' and get_lock(1,2)%23 给key=1上锁
  2. 然后就可以盲注了 1' and if(1,get_lock(1,2),1)%23 再次执行同样的语句会产生延时

2. mysql多表查询解法(笛卡儿积原理)

  • 笛卡尔积可以将多个表合并成为一个表

所以我们进行多表合并,耗费较长时间,达到延时的效果

测试效果

所以我们的payload是1' and if(1,(SELECT count(*) FROM information_schema.columns A, information_schema.columns B,information_schema.columns C),1)%23

简单sql注入学到的延时盲注新式攻击的更多相关文章

  1. SQL注入篇二------利用burp盲注,post注入,http头注入,利用burpsuit找注入点,宽字节注入

    1.布尔盲注burpsuit的使用 先自己构造好注入语句,利用burpsuit抓包,设置变量,查出想要的信息. 比如----查数据库名的ascii码得到数据库构造好语句 http://123.206. ...

  2. [sql 注入] insert 报错注入与延时盲注

    insert注入的技巧在于如何在一个字段值内构造闭合. insert 报错注入 演示案例所用的表: MariaDB [mysql]> desc test; +--------+--------- ...

  3. 简单SQL注入试探、二

    DVWA——简单SQL注入小记 今天我们来记录简单的盲注过程 简单的SQL injection(blind) Level:low 登陆后选择SQL Injection(Blind) 能看到这样的界面 ...

  4. 深入浅出带你玩转sqlilabs(五)-布尔/延时盲注与二次注入

    SQL测试-基于布尔,延时盲注 布尔,延时注入常用到的判断语句 regexp regexp '^xiaodi[a-z]' 匹配xiaodi及xiaodi...等 if if(条件,5,0) 条件成立 ...

  5. 简单SQL注入试探、一

    DVWA——简单SQL注入小记 前不久刚开始接触SQL注入,今天来记录一些最近的一些收获和一些SQL注入方面的知识. 主要是基于DVWA这个开源的平台来进行练习. 废话不多说开始解题. 从简单的SQL ...

  6. UPdate 延时盲注之小技巧

    Title:UPdate 延时盲注之小技巧  --2014-06-05 15:21 UPDATE TABLEZZZ SET zz=111111 where id=$id 当TABLEZZZ表为空的时候 ...

  7. 简单sql注入学习

    sql注入是什么? 所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQ ...

  8. 简单SQL注入

    既然是简单的,估计也就是''字符型把,输入'or'1 以下是输出结果,or没被过滤,单引号也没有 呢么用union联合注入试试,提交了'-1 union/**/select 1 and '1,发现回显 ...

  9. 一个简单sql注入的poc

    最近在提高自己编程能力,拿一些实用的小工具练下.该脚本为python语言,主要涉及模块urllib,re. 功能:验证CmsEasy5.5爆账号密码 实验用源码:http://pan.baidu.co ...

随机推荐

  1. python-基础r/R、b、u/U含义

    1.r/R,代表非转义的原始字符串,一般使用在正则表达式和win目录上 2.b“” 代表b后面的内容为bytes类型 3.u/U 表示对字符串进行unicode编码,一般使用在有中午的地方,防止乱码.

  2. python3装饰器用法示例

    装饰器在编写后台的逻辑时有可能会用到,比方说一个场景:公司的员工想要登录自己公司的考勤记录系统去修改自己的考勤,以前是随便谁都有权限去修改,这样老板不同意了,现在,要在你登录前加一个权限验证的逻辑,如 ...

  3. nltk词性标注

    将词汇按它们的词性(parts-of-speech,POS)分类以及相应的标注它们的过程被称为词性标注(part-of-speech tagging, POS tagging)或干脆简称标注.词性也称 ...

  4. centos开启ftp服务

    新安装的要先配置网络 $_> vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 最后一行 onboot = yes $_> yum i ...

  5. ES6之Class类

    一.Class的基本语法 1.简介 基本上,ES6的class可以看作只是一个 语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让 对象原型 的写法更加清晰.更像面向对象编程的语法而 ...

  6. JS---DOM---元素相关的操作方法

    1. 追加子元素 my$("dv").appendChild(obj); 2. 把新的子元素插入到第一个子元素的前面 my$("dv").insertBefor ...

  7. PHP命令执行漏洞初探

    PHP命令执行漏洞初探 Mirror王宇阳 by PHP 命令执行 PHP提供如下函数用于执行外部应用程序:例如:system().shell_exec().exec().passthru() sys ...

  8. DomDom: 1 Vulnhub Walkthrough

    主机层面扫描: ╰─ nmap -p1-65535 -A -sV 10.10.202.140 You name 存在XSS 漏洞 右键源码有隐藏form表单 修改其type属性为:text 尝试了SQ ...

  9. Dynamics CRM通过定制应用程序功能区为符合条件的实体表单增加按钮

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复167或者20151029可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 前面的博文都是为一个实体添加按钮 ...

  10. iOS中截取字符串指定位置

    直接上代码: NSString *string = @"今天是个好日子,忘记穿秋裤了"; NSString *string1 = [];//截取掉下标7之后的字符串 NSStrin ...