Sqli-LABS通关笔录-17-审计SQL注入
2016-12-10 22:33
351 查看
这个关卡开始好像进入新的知识区了,前面几个是让我们加深对盲注的印象。接下来又是新知识了!皮卡丘,接招吧!
代码是从SQL-libs的第十七关卡扣的。
页面效果如下所示:
![](https://images2015.cnblogs.com/blog/1049537/201612/1049537-20161210223212163-1537041157.png)
PHP面完整CODE如下所示:
见39行,未对齐进行过滤进而造成SQL注入
![](https://images2015.cnblogs.com/blog/1049537/201612/1049537-20161210233119663-2059204614.png)
这题其实跟之前的一样。可以使用延时注入来注入。至于为啥工具没跑出来我真心不懂。
THE END
代码是从SQL-libs的第十七关卡扣的。
页面效果如下所示:
![](https://images2015.cnblogs.com/blog/1049537/201612/1049537-20161210223212163-1537041157.png)
PHP面完整CODE如下所示:
<?php include("../sql-connections/sql-connect.php"); error_reporting(0); function check_input($value) #定义一个函数为check_input,里面有一个参数为$value。 { if(!empty($value)) #当参数不为空的时候 { // truncation (see comments) $value = substr($value,0,15); #参数如果的话执行该条语句,使用substr函数对参数进行截取取从第0位到第15位的数据。 } // Stripslashes if magic quotes enabled if (get_magic_quotes_gpc()) #判断php.ini是否开启了魔术引用。 { $value = stripslashes($value); #如果开启了对魔术引用进行反转。这个的意思就是不需要去掉魔术引用 } // Quote if not a number if (!ctype_digit($value)) #ctype_digit:检测是否都是数字,负数及小数都不行,也就是说如果不为数字,为负数或者小数的执行22行代码。 { $value = "'" . mysql_real_escape_string($value) . "'"; #关于mysql_real_escape_string()函数的更多解释:http://www.w3school.com.cn/php/func_mysql_real_escape_string.asp } else { $value = intval($value); #获取$value的整数 } return $value; } // take the variables if(isset($_POST['uname']) && isset($_POST['passwd'])) #判断user和passwd有没有设置 { //making sure uname is not injectable $uname=check_input($_POST['uname']); #使用check_input函数对传过来的uname参数进行过滤 $passwd=$_POST['passwd']; #过滤的很好,但是密码就没过滤了。问题的关键处出在这里! //logging the connection parameters to a file for analysis. $fp=fopen('result.txt','a'); fwrite($fp,'User Name:'.$uname."\n"); fwrite($fp,'New Password:'.$passwd."\n"); fclose($fp); // connectivity @$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result); //echo $row; if($row) { //echo '<font color= "#0000ff">'; $row1 = $row['username']; //echo 'Your Login name:'. $row1; $update="UPDATE users SET password = '$passwd' WHERE username='$row1'"; mysql_query($update); echo "<br>"; if (mysql_error()) { echo '<font color= "#FFFF00" font size = 3 >'; print_r(mysql_error()); echo "</br></br>"; echo "</font>"; } else { echo '<font color= "#FFFF00" font size = 3 >'; //echo " You password has been successfully updated " ; echo "<br>"; echo "</font>"; } echo '<img src="../images/flag1.jpg" />'; //echo 'Your Password:' .$row['password']; echo "</font>"; } else { echo '<font size="4.5" color="#FFFF00">'; //echo "Bug off you Silly Dumb hacker"; echo "</br>"; echo '<img src="../images/slap1.jpg" />'; echo "</font>"; } } ?>
见39行,未对齐进行过滤进而造成SQL注入
![](https://images2015.cnblogs.com/blog/1049537/201612/1049537-20161210233119663-2059204614.png)
这题其实跟之前的一样。可以使用延时注入来注入。至于为啥工具没跑出来我真心不懂。
THE END
相关文章推荐
- 数据库异地备份还原
- IOS FMDB数据库相关操作
- Oracle 11g expdp中query参数的使用
- Oracle数据库——Scheduler Job
- SQL SERVER2008 存储过程、表、视图、函数的权限
- django+mysql中的get和filter操作
- 如何用eclipse将数据库oracle数据相连接,实现查询数据库中的信息以及更改添加表中内容
- Sqli-LABS通关笔录-16
- Redis实现分布式锁
- start slave until 语法举例
- 用友u8数据库表结构
- SQL三大范式三个例子搞定
- ORA-01089 数据库无法正常关闭
- MySQL 的 20+ 条最佳实践
- memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存
- nginx+memcache使用
- Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析
- redis投票系统--学习准备
- Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析
- Atitit sql计划任务与查询优化器--统计信息模块