sqli-labs靶场详解less-24(二次注入)

less-24

对于一个像我一样的小白来说这关就像php代码审计 

一开始进行判断注入点的时候怎么都找不到一点思路都没有

只能搜教程 说是二次注入 从来没遇见的题型 于是从代码审计开始

先说一下什么叫二次注入

二次注入
二次注入是指通过SQL语句存储到数据库的用户输入被读取后再次被SQL语句执行导致的注入。

原理
在第一次进行数据库插入数据的时候,仅仅只是使用了个别函数对其中的特殊字符进行了转义,在后端代码中可能被转义,但在存入数据库时还是原来的数据,数据中一般带有单引号和#号,然后下次使用拼凑SQL语句中,所以就形成了二次注入。
 

代码分析

login.php



Logged-in.php


//如果会话存在往下走 也就是cookie



YOU ARE LOGGED IN AS
You can Change your password here. //如果修改密码跳转页面到passs_change.php页面
Current Password: New Password: Retype Password:

pass_change.php




failed.php







new_user.php


//创建新用户的页面 把参数传给login_create.php

HOME

login_create.php



		;//用户名已经存在请换一个用户名
		";   									
					echo "
Redirecting you to login page in 5 sec................"; echo "
If it does not redirect, click the home button on top right"; header('refresh:5, url=index.php'); } else// 不一致 提醒你重新输入 { ?>

代码其实不难理解

第一步

盲猜里面有一个admin的用户

新建一个admin'#的用户  

走的login_create.php的文件

这个文件对所有的输入的非法字符转义(输入数据中的单引号注释符等)转成字符串

然后使用select count(*) from users where username='admin'#'  判断admin'#用户是否存在

不存在  使用 insert into users ( username, password) values(\"$username\", \"$pass\") 插入到数据库中(这个双引号加反斜杠就是确定双引号里面的是字符串 记住就行)

sqli-labs靶场详解less-24(二次注入)_第1张图片

然后使用刚刚注册的进行登录

SELECT * FROM users WHERE username='$username' and password='$password'"; //把转义后的用户和密码带入到数据库中进行查找 查到后输出用户名 到这里都是没有问题的

sqli-labs靶场详解less-24(二次注入)_第2张图片

sqli-labs靶场详解less-24(二次注入)_第3张图片

先查看一下上帝视角users表里面的内容 原始admin账户密码是123456 刚刚我们注册时密码是 qwe

sqli-labs靶场详解less-24(二次注入)_第4张图片

登录新建用户admin'#后我们进行更改密码为asd

服务器执行的代码是

UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass'

这个时候就出现问题了 admin'#进入数据库的时候单引号和#号被当成了字符 但是从$username提取出来的admin'# 单引号和#号又被当成了特殊字符

于是语句就变成了

UPDATE users SET PASSWORD='asd' where username='admin'#' and password='$curr_pass'

标记红的是被注释掉了 这样就造成了无admin密码的情况下 就可以修改admin密码

这样就成功的无视原始用户密码的条件进行修改密码 前提你知道里面的用户是谁

其实这都不重要  重要的是我们发现了这个二次注入的注入点 和注入方式

有了这个我估计可以实施进一步注入 构造新的语句作为用户名

我看所有教程都是教更改密码的 没有进行下一步的注入 

有可能是太难了 没人愿意演示

也有可能是不存在下一步注入

下一步注入也是我估计的 我先不进行下一步注入 如果以后碰到类似的题 我再回来做

你可能感兴趣的:(SQL注入,sqli-labs靶场,安全,web安全,sql,网络安全,安全性测试)