注入很明显,更多的是考技巧。
<?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 article where id='" . intval($id) . "'";
$res = mysql_query($sql);
if (!$res) {
die("404 not found!");
}
$row = mysql_fetch_array($res, MYSQL_ASSOC);
mysql_query("update view set view_times=view_times+1 where id = '" . $id . " '");
?>
<body>
<div>
<div class="container">
<div class="row">
<div class="col-md-12">
<h1><?=$row['title']?></h1>
<article><?=$row['content']?></article>
</div>
</div>
</div>
</div>
</body>
sleep?
常见延时函数被禁用了,但是还是可以通过大量运算来导致mysql运行缓慢。
1、重查询,笛卡尔积
SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.columns C
2、高计算量
看到pwnhub其他师傅的解题,膜一发。
concat(rpad(1,999999,'a'),rpad(1,999999,'a'))
get_lock
膜出题人do9gy师傅,学习姿势。
基本语法:
select get_lock(key, timeout) from dual;
select release_lock(key) from dual;
(1)get_lock会按照key来加锁,别的客户端再以同样的key加锁时就加不了了,处于等待状态。
(2)当调用release_lock来释放上面加的锁或客户端断线了,上面的锁才会释放,其它的客户端才能进来。