Loading... # Sqli-labs5 ## Less-12 基于错误的双引号POST型字符型变形的注入 POST-Error Based-Double Quotes-String-with twist 首先尝试username+单引号,无回显 再尝试username+双引号,报错回显 ![image-20220130104206668.png](http://xherlock.top/usr/uploads/2022/01/4217820842.png) 可以看出对输入变量还加了括号,故使用username+")来注入 ![image-20220130104342945.png](http://xherlock.top/usr/uploads/2022/01/3334315869.png) 成功返回我们所需信息,接下来和Less-11相同 ## Less-13 单引号POST型字符型变形双注入 POST-Double Injection-Single Quotes-String-with twist 联想到Less-5中get方式注入,有几种方法 ### 法一 布尔盲注 首先我们尝试如下,可以看出需要+')来闭合,同时有报错回显 ![image-20220130105601706.png](http://xherlock.top/usr/uploads/2022/01/858897678.png) 如果我们的语句正确,是无法显示的 ![image-20220130105804264.png](http://xherlock.top/usr/uploads/2022/01/1203660820.png) 所以我们要通过报错信息来获取数据库各种信息 需要注意的是,这里我们可能不知道用户名,所以要想正确需要使用or,如图 ![image-20220130110257182.png](http://xherlock.top/usr/uploads/2022/01/1844089583.png) 提示我们登陆成功,说明数据库长度为8,以此类推来个盲注 ### 法二 时间延迟注入 同上,换成if(length(database())=8,sleep(5),1),如果出现延迟,说明正确 ### 法三 双注入法(题目提示) 我们采用之前Less-5的模板即可,可以看到出现我们的数据库名。接下来想知道啥就改concat里的第一个参数就可 ![image-20220130110951490.png](http://xherlock.top/usr/uploads/2022/01/2738379586.png) ## Less-14 单引号POST型字符型变形双注入 POST-Double Injection-Single quotes-String-tiwst Less-13、14标题一样,做法差不多,试了几下,发现不需要括号,用双引号即可闭合 ![image-20220130113817024.png](http://xherlock.top/usr/uploads/2022/01/1616157454.png) ## Less-15 基于布尔/时间延迟的单引号POST型盲注 POST-Blind- Boolian/time Based- Single quotes 都可以采用Less-13的方法 ## Less-16 基于布尔/时间延迟的双引号POST型盲注 POST-Blind- Boolian/Time Based- Double quotes Less-15改成双引号+)即可 ## Less-17 基于错误的更新查询POST注入 POST-Update Query- Error based - String 这个很明显,只有你输入的用户名在数据库中存在才可以修改,密码无所谓,改后数据库也会发生相应变化 这里就要对username动手了,需要我们对mysql的数据更新语法有所了解 我先去瞅瞅源码长啥样,下面是对数据输入的处理 ~~~php function check_input($value) { if(!empty($value)) { // truncation (see comments) $value = substr($value,0,15); } // Stripslashes if magic quotes enabled if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not a number if (!ctype_digit($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } else { $value = intval($value); } return $value; } // take the variables if(isset($_POST['uname']) && isset($_POST['passwd'])) { //making sure uname is not injectable $uname=check_input($_POST['uname']); $passwd=$_POST['passwd']; ~~~ 可以看到对输入的uname进行了一堆复杂的验证,包含在check_input函数中 [php get_magic_quotes_gpc() stripslashes()和addslashes()的关系_blue5blue的博客-CSDN博客](https://blog.csdn.net/blue5blue/article/details/54913577?ops_request_misc=%7B%22request%5Fid%22%3A%22164355080616780265426100%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fall.%22%7D&request_id=164355080616780265426100&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-3-54913577.pc_search_insert_es_download&utm_term=get_magic_quotes_gpc&spm=1018.2226.3001.4187) 首先判断是否为空,不为空截取前十五个字符,接着get_magic_quotes_gpc函数判断解析用户提示的数据,如包括有post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误,这时magic_quotes_gpc = On,添加了反斜杠,这时候有需要去除\,使用stripslashes 总之经过一连串处理,我们的SQL注入几乎不可能了,但是可以看到他没有处理password的输入,所以这次从password处注入 一时半会搞不定这个双注入法,但是看到了一篇很好的文章,明天学习下 [Sqli-labs之Less-17_→_→-CSDN博客](https://blog.csdn.net/weixin_39934520/article/details/105445492?ops_request_misc=%7B%22request%5Fid%22%3A%22164355326216780265466396%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fblog.%22%7D&request_id=164355326216780265466396&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-105445492.nonecase&utm_term=sqli-labs17count(*)&spm=1018.2226.3001.4450) 最后修改:2022 年 02 月 03 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏