长沙专业做网站排名,江西南昌建设厅网站,十大社区团购平台有哪些,济南网站建设行知科技不错a目录
1.什么是二次注入#xff1f;
2.二次注入过程
2.1寻找注入点
2.2注册admin#用户
2.3修改密码 1.什么是二次注入#xff1f;
当用户提交的恶意数据被存入数据库后#xff0c;因为被过滤函数过滤掉了#xff0c;所以无法生效#xff0c;但应用程序在从数据库中拿…目录
1.什么是二次注入
2.二次注入过程
2.1寻找注入点
2.2注册admin#用户
2.3修改密码 1.什么是二次注入
当用户提交的恶意数据被存入数据库后因为被过滤函数过滤掉了所以无法生效但应用程序在从数据库中拿出该用户名时没有对和#进行转义导致将密码的检测注释了虽然看似后端代码将我们输入的进行了转义但是当将输入的数据存储到数据库中时会将加上存储的(数据库存储数据的特征)这样就实现了二次注入也叫做存储型SQL注入。
2.二次注入过程
登录页面 注册页面 修改密码页面 2.1寻找注入点 进行一些简单的测试发现都无法成功
查看后端代码发现后端代码对我们输入的登录用户名和密码进行了过滤因此无法注入
function sqllogin(){$username mysql_real_escape_string($_POST[login_user]); //过滤了单双引号$password mysql_real_escape_string($_POST[login_password]);//过滤了单双引号$sql SELECT * FROM users WHERE username$username and password$password;
//$sql SELECT COUNT(*) FROM users WHERE username$username and password$password;$res mysql_query($sql) or die(You tried to be real smart, Try harder!!!! :( );$row mysql_fetch_row($res);//print_r($row) ;if ($row[1]) {return $row[1];} else {return 0;}}
但是发现pass_change.php文件中修改密码时当从数据库中找出所修改的用户的密码时没有对username进行过滤导致出现二次注入点。
if (isset($_POST[submit]))
{# Validating the user input........$username $_SESSION[username];$curr_pass mysql_real_escape_string($_POST[current_password]);$pass mysql_real_escape_string($_POST[password]);$re_pass mysql_real_escape_string($_POST[re_password]);if($pass$re_pass){ $sql UPDATE users SET PASSWORD$pass where username$username and password$curr_pass ;$res mysql_query($sql) or die(You tried to be smart, Try harder!!!! :( );$row mysql_affected_rows();echo font size3 color#FFFF00;echo center;
我们是否可以先注册一个类似admin#的用户然后当对admin‘#用户进行修改密码时来进行注入呢话不多说直接开干
2.2注册admin#用户 发现可以注册与我们设想的一样
然后进行登录 顺利登录此时页面显示YOU ARE LOGGED IN AS admin# 2.3修改密码
根据pass_change.php文件的代码分析current password可以随便填写只要New Password等于Retype Password程序就会进入if语句中sql语句就会生效
if (isset($_POST[submit]))
{# Validating the user input........$username $_SESSION[username];$curr_pass mysql_real_escape_string($_POST[current_password]);$pass mysql_real_escape_string($_POST[password]);$re_pass mysql_real_escape_string($_POST[re_password]);if($pass$re_pass){ $sql UPDATE users SET PASSWORD$pass where username$username and password$curr_pass ;$res mysql_query($sql) or die(You tried to be smart, Try harder!!!! :( );$row mysql_affected_rows();echo font size3 color#FFFF00;echo center;
此时我们将修改的密码进行提交后admin#进入sql语句中上述sql语句就会变为 $sql UPDATE users SET PASSWORD$pass where username$admin# and password$curr_pass ; 标红的地方就会被注释掉就会成功修改admin的密码 此时我们使用admin用户进行登录测试admin的密码是否被修改 可以见到我们确实用admin用户成功登录在这之前我们是不知道admin用户的密码的
这就是sql二次注入可以利用它来修改任意用户的密码所以危害是比较大的