zoukankan      html  css  js  c++  java
  • 漏洞重温之sql注入(二)

    漏洞重温之sql注入(二)

    sqli-labs通关之旅

    Less-06

    进入第六关,首先我们还是在url里面增加id参数。

    白盒阶段,我们首先还是看源码。

    首先,根据if判断语句里面的返回,我们确认了这个位置的注入点是布尔型的盲注。

    因为根据代码成功与否,网页会给我们返回不同的内容,虽然无法直接让网页返回我们希望看到的信息,但是可以从代码成功与否的不同返回结果,来获取我们想要的东西,这也是我认为布尔盲注的判断情况。

    同时,根据代码:

    $id = '""'.$id.'""';
    $sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1";
    

    我们可以知道,这里我们想要闭合代码,需要用到双引号。

    所以,我们可以构造以下测试payload:

    1" and 1=1 -- 
    1" and 1=2 --
    //上面两条用于在黑盒情况下判断是否存在注入。
    1" and 1=((select count(*) from information_schema.schemata)>1) -- 
    //上面一条代码用于判断网站有几个数据库,通过修改小于号后面的内容来得到准确答案。
    1" and length((database()))>1 -- 
    //上面一条代码用于判断当前数据库名称字符长度。
    1" and substr((database()),1,1)='a' -- 
    //上面一条代码用于爆当前数据库名称。
    

    这里,因为前面已经做过足够详细的过程,这里就不一步一步操作了。

    第六关,通关。

    Less-07

    进入第七关,先在url中添加id参数。

    然后我们直接查看源码。

    通过if判断语句,我们看出,代码成功执行与否,依然会返回不同的结果,所以我们就只需要关注一行代码。

    $sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";
    

    根据这条代码,我们可以知道,这条语句,想要闭合,我们可以使用 '))来进行闭合,以此进行sql盲注。

    同理,我们可以使用上面总结的代码进行盲注。

    第七关,通关。

    Less-08

    废话不说了,直接看源码。

    首先,我们可以看到,if判断框里面返回的结果依然是不同的,如果代码正常执行,网页会返回you are in .........,如果代码执行失败,则不会有任何返回,我们可以通过这点区别,直接进行布尔型盲注。

    同时,我们只需要查看下方代码:

    $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
    

    通过这行代码,我们就知道,闭合只需要使用单引号。

    第八关,通关。

    Less-09

    第九关,直接查看源码。

    首先,我们看if判断语句,代码执行成功和失败,网页上我们能看到的返回结果都是“you are in........”,但是,我们如果仔细看代码的话,就会发现其实代码执行成功和失败,两个代码块是会有区别的,而区别在于else下面的代码块中,多了下面这行代码:

    echo '<font color= "#0000ff" font size= 3>';	
    

    而这行代码,如果我们不点击查看页面源码的话,是很难发现的,所以,这个关卡,就出现了两种可以使用的破关办法。

    一.时间盲注

    时间盲注最常利用到的函数是sleep()函数。通过这个函数,我们可以让页面延时回复,而通过网站回复的时间,我们就可以以此判断我们执行的代码知否成功,通过这个手法,来拿到自己想要得到的数据。

    如何测试网页是否存在sql时间盲注,最简单的手段就是在闭合代码后,直接在后面接上 and sleep(3)然后刷新网页,如果网站延时三秒回复,那么就说明了该处存在时间盲注。

    这里还要代入一个知识点,就是if语句,格式如下:

    if(条件,条件成功返回结果,条件失败返回结果)

    利用if语句和sleep函数,我们就可以直接获取我们希望得到的数据。

    常用payload如下:

    1' and if(length((database())>1,sleep(3),1)) -- 
    //如果当前数据库名称字符长度大于一,网站延迟三秒显示。
    1' and if(substr((database())1,1)='a',sleep(3),1) --
    //如果当前数据库名称第一个字母是a,网站延迟三秒显示。
    

    可以看到,时间盲注跟布尔型盲注的区别就是多了一个if函数,我们只需要将之前布尔盲注的代码放在if语句的条件位置,就可以完成时间盲注,因为截图也无法看出效果,所以这里就不截图了。有兴趣的可以自己尝试。

    ps:每关的代码的隔断,都是按照每关的代码进行的,如果直接复制代码的话,需要看清楚关卡。

    二.布尔型盲注

    之前说到,第九关存在两种破关方式,时间盲注和布尔盲注。其实所有的盲注,都可以使用时间盲注的手法来进行,但不是每种时间盲注都可以使用布尔盲注的手法,这一点一定要记清楚。

    这里虽然网页的返回结果一致,但是else的代码块中,又多echo了一个font标签,而这会显示在网页源码中,直接查看网页是很难看到区别的。

    但是,我们很清楚,没测试一个字母,都要查看网页源码是个很麻烦东西。

    所以,我们可以想到这样一点,如果我们的代码执行失败,网页会给我们返回else代码块里面的内容,如果我们的代码执行成功,网页会跟我们返回if代码块里面的内容。因为这两个代码存在的区别(else代码块多了一条echo)就会导致返回else代码块内容的返回包报文长度会比返回if代码块内容的返回包长。

    话不多说,上图。

    可以看到,如果利用burp看的话,就可以很明显的查看到代码执行成功和失败了。

    当然,burp除了可以用在这种情况,还能帮我们减少时间盲注的等待时间。这个,我会在下一关进行时间盲注的时候详细说明。

    第九关,通关。

    Less-10

    第十关,直接看源码。

    眼尖的朋友可以看出来,这一关和第九关几乎一致,只是代码的隔断从单引号变成了双引号。

    所以,通关第九关使用的手法,在这里依然适用,那么通关方式我就不讲了,直接跟大家详细的说一下,如何使用burp减少我们sql时间盲注的时间。

    首先,我们在页面上构造一条时间盲注的语句。

    ps:这里在网页上构造的原因是因为我们可以使用hackbar直接将我们输入的空格等进行转义,如果是抓包之后再写,会很麻烦。

    payload如下:

    1" and if(length((database()))<1,sleep(3),1)
    //这条代码是判断当前数据库名称长度是否小于一,如果小于一,网站延迟三秒回复,大于一,则正常回复。
    

    使用burp抓包,并直接将其ctrl+r放入repeater模块。

    这里我们可以看右下角的两个数字,一个879 bytes 一个 30millis。

    前面的那个,代表了返回包的字节数,后面那个,则是响应时间,单位是毫秒。

    因为我们知道,数据库名称长度肯定大于一,所以我们将一改为十,看一下结果。

    这里可以看到,下方的两个数字变成了916 和 3080。

    这是一个更清楚的进行时间盲注的手法,但是还不是我要说的节省时间的方法,毕竟虽然可以更清晰的查看到代码成功与否,但是需要等的时间,我们还是等了。所以,为了节省时间,我们就需要使用burp的爆破模块。

    当然,这里要注意一点,在使用burp的爆破模块进行时间盲注的时候,线程数一定要调成1

    将我们刚才用到的请求包放到爆破模块里面,并且将判断字符长度的1设置为变量。

    设置完成,直接开始爆破。

    这里可以看到,因为我们设置的是小于,所以在爆破到8的时候,明显返回变慢了,这代表代码执行成功了,我们也就可以知道,当前数据库的字符长度为8。因为8<8不成立,所以爆破到8的时候网站还是正常返回,但是8<9成立,所以网站会延迟返回。

    通过这个方法,我们也可以猜数据库名,表名,字段名等。

    第十关,通关。

    文章未经本人允许,禁止转载。 有技术问题,可加好友讨论。 联系方式:QQ:MjgxMjMxODAzNQ== 微信:bzNycjByLVhpYW9taW5n
  • 相关阅读:
    ES6笔记(二):对象简写
    python通过protobuf实现rpc
    Python之mmap内存映射模块(大文本处理)说明
    python 基于Avro实现RPC
    python 使用 thrift 教程
    软光栅(BlinnPhong 模型,无贴图)(Python)
    递归绘制贝塞尔曲线
    计算机网络核心概览
    BlinnPhong 光照模型 Demo (Python)
    博客园图片批量自动上传
  • 原文地址:https://www.cnblogs.com/Xiaoming0/p/13544150.html
Copyright © 2011-2022 走看看