首页 » SEO优化 » php多人同时sql技巧_白帽子SQL注入之二次注入

php多人同时sql技巧_白帽子SQL注入之二次注入

访客 2024-11-21 0

扫一扫用手机浏览

文章目录 [+]

图解:

二次注入比普通的注入更难创造,很难被工具扫描出来。

php多人同时sql技巧_白帽子SQL注入之二次注入

事理大概知道了,接下来便是实战了

php多人同时sql技巧_白帽子SQL注入之二次注入
(图片来自网络侵删)

以sql-libs第24关为例

有登录,注书页面

好奇的我就试了一下弱口令登录

啧啧啧,上岸成功了!
不过这和本文没有联系,回到正题!

我们利用注册功能,将我们的数据插入数据库里。

上岸试试

登录进去,现在我们修正密码

我们查看一下

我们登录的是admin’#,但是修正的却是admin账号的密码,那为什么admin账号的密码会被改变呢???

我们去靶场源文件pass_chang.php看一下 找到这句话

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

我们的用户名被admin'#传入进去,在数据库里#号为注释符 然后这句话就变成了

$ sql = "UPDATE users SET PASSWORD=’$ pass’ where username=’admin‘#’ and password=’$ curr_pass’ ";

然后便是

$ sql = "UPDATE users SET PASSWORD=’$ pass’ where username=’admin‘

从而将用户名为admin的账号的密码修正了

数据库还是对自己太过相信,认为数据库里的数据都是正常的,当从数据库里调用的时候没有经由过滤,这就造成了二次注入。

在源码里找到了mysql_real_escape_string($_POST["login_user"]);这个函数将我们的输入的数据进行转义

mysql_real_escape_string()函数转义SQL语句中利用的字符串中的分外字符。
下列字符受影响:\x00\n\r\'"\x1a如果成功,则该函数返回被转义的字符串。
如果失落败,则返回false。

emmmm

再次演示一下攻击

先创建一个list.php

<?phpinclude("../sql-connections/sql-connect.php");error_reporting(0);$sql="SELECTFROMusersORDERBYid";$result=mysql_query($sql);$num=mysql_num_rows($result);for($i=0;$i<$num;++$i){$row=mysql_fetch_array($result);$username=$row[1];$sql_detail="SELECTFROMuserswhereusername='$username'";$result_detail=mysql_query($sql_detail);$num_detail=mysql_num_rows($result_detail);for($j=0;$j<$num_detail;++$j){$row_detail=mysql_fetch_array($result_detail);echo<<<END<tableborder="1"style="table-layout:fixed;"width="1000"><tr><th>$row_detail[1]</th><th>$row_detail[2]</th></tr></table>END;}}?>

我选择把list.php和sql-connect.php放在一起

现在我们在注册一个用户名1’ union select 1,user(),database()#

然后访问list.php

用户名和密码就被打印出来了

我们剖析一下流程。

list.php包含了sql-connect.php,我们创建好账号后,再次登录利用1‘ union select 1,user(),database() #

$ username = $row[1]; $ sql_detail = "SELECT FROM users where username='$ username'";

我们的username传入进去

$ sql_detail = “SELECT FROM users where username=’1’ union select 1,user(),database() #’”;

也便是语句变成了

$ sql_detail = “SELECT FROM users where username=union select 1,user(),database() ”;

我们从表里就打印出了账号和密码这张表。

任何技能问题可以留言一起谈论学习~

标签:

相关文章

YY协议联盟,构建数字时代协同发展的新范式

随着互联网技术的飞速发展,数字时代已经到来。在这个时代,数据、技术、人才等要素的融合与创新成为推动社会进步的重要力量。为了更好地应...

SEO优化 2024-12-27 阅读0 评论0

VS,符号之外的编程语言

在计算机编程的世界里,符号与字母交织,构织出无尽的代码世界。而在这其中,有一个特殊的符号——“VS”,它不仅是一个编程语言的名称,...

SEO优化 2024-12-27 阅读0 评论0

VB算法语言,介绍编程领域的璀璨明珠

在计算机科学领域,VB(Visual Basic)算法语言凭借其简洁易懂、实用性强的特点,成为了众多编程爱好者和专业人士的首选。本...

SEO优化 2024-12-27 阅读0 评论0

TC类在C语言编程中的应用与价值讨论

C语言作为一门历史悠久、应用广泛的编程语言,在我国计算机领域占据着举足轻重的地位。TC类作为一种面向对象的编程思想,在C语言中的应...

SEO优化 2024-12-27 阅读0 评论0