ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Sqli-Labs练习(11-20)

2021-07-20 17:31:27  阅读:213  来源: 互联网

标签:20 Less Labs Sqli 报错 cookie POST 字段名 注入


Less-11 POST-Error Based-Single quotes -String

突然换界面有点不适应

image-20210718104134584

用火狐的hackbar总是没反应或者报错500,改用burp,登陆成功

image-20210718111445013

order by 3 报错

image-20210718111624262

order by 2返回登录成功页面

image-20210718111729550

所以,字段有俩,使用-1'union select 1,2 ,发现1,2均输出

image-20210718111826002

接下来的操作和Less-1,less-2雷同,就不继续了

Less-12 POST - Error Based - Double quotes- String-with twist (基于错误的双引号POST型字符型变形的注入)

经过多次尝试,发现是("")类型

image-20210719101502316

找出字段有几个

image-20210719101619371

字段名有2个

image-20210719101701871

字段1,2可以输出结果

image-20210719101813496

接下来就是查询数据库名,表名,字段名,然后获取数据库内容,略

Less-13 POST-Double Injection-Single Quotes-string- with twist

输入'后报错

image-20210719110345456

推测为('')类型,报错里证明了这一点

image-20210719110558525

登录成功,但是没有输出任何信息

image-20210719110742292

意味着需要利用报错来获取信息

采用报错注入:

  • 通过floor报错(floor()取整)
    and (select 1 from (select count(*),concat(( payload),floor(rand()*2)) as x from information_schema.tables group by x)a)
    该语句将输出字符长度限制为64个字符

  • 通过updatexml报错
    and updatexml(1,concat(0x3a,payload,0x3a),1)
    该语句对输出的字符长度做了限制,其最长输出32位
    并且对payload的返回类型也做了限制,只有在payload返回的不是xml格式才会生效

  • 通过ExtractValue报错
    and extractvalue(1, payload)
    输出字符有长度限制,最长32位。

​ payload即我们要输入的sql查询语句

获得数据库名

image-20210719111540268

获取表名,但是超长了,使用limit也超长

image-20210719111919362

我发现在最后再加一个limit,就不超长了,很神奇

image-20210719112357328

获取user表名

image-20210719112434103

接下来就是获得字段名,然后获取数据,略过

Less-14 POST-Double Injection-Double Quotes-string- with twist

先用单引号试探,没有报错

image-20210719112944762

再用双引号试探,报错

image-20210719113019695

看来变量是被双引号包裹

构造payoad登录成功,但是没显示任何信息

image-20210719113113107

看来还是需要用报错注入

方法和Less-13一样,不过要把单引号换成双引号,然后把单引号后面的)去掉

获得密码字段名

image-20210719114906034

获得密码,竟然还是明文

image-20210719115219979

Less-15 POST-Blind-Boolian/Time Based -Single Quotes

好家伙,不显示错误提示了,只写登录成功和失败image-20210719120205229

image-20210719120304037

image-20210719120330435

image-20210719120351866

没事,可以用布尔注入

判断数据库名长度

image-20210719120500995

image-20210719120518138

接下来就是熟悉的爆破环节了,(有一说一,社区版的burp suite爆破好慢,有些功能还用不了,改天换专业版)

然后判断表名长度,接着爆破,获得表名

判断字段名,爆破

判断密码长度,爆破

Less-16 POST-POST-Blind-Boolian/Time Based -Double Quotes

经过几次测试,发现是("")类型

image-20210719121457696

同样是bool型注入,与Less-15相同,就略过了

Less-17 Update Query-Error based -String

什么情况?

bug off you silly dumb hacker???你才憨批

image-20210719121924784

在password上构造就成功了,显然没有过滤

image-20210719122242396

在password中输入'报错

image-20210720114758632

可以采用报错注入,接下来尝试是否成功,果然成功了

image-20210720115156163

接下来获得表名字段名等略过

Less-18 Http头注入-User-Agent-报错注入

打开页面,显示我的IP,什么情况?

image-20210720115430147

无论怎么输入,都没反应,把我整懵了,难道是通过显示ip来注入?

查了一下,要对http head注入

在写网站代码的时候,编程人员会用到对应的函数,对用户提交的参数进行过滤。但是对于http头中的提交的内容可能没有进行过滤。例如http头的User-agent、Referer、Cookie等,所以就会产生http头注入的情况。

可以看到该网站的http头有如下内容

image-20210720121307973

  • host:指定被请求资源的Internet主机和端口号
  • User-Agent:将客户端的操作系统,浏览器等其他属性告诉服务器
  • Accept:指定客户端接受那些MIME类型的信息
  • Accept-Language:指定客户端接受的类型
  • Accept_Encoding:指定客户端接受的编码
  • Refer:用户从哪个页面过来的
  • Content-Type:向接收方指示实体的介质类型
  • Content-Length:指明实体正文长度

常见的HTTP注入点产生位置为【Referer】、【X-Forwarded-For】、【Cookie】、【X-Real-IP】、【Accept-Language】、【Authorization】;

(1)HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。

(2)X-Forwarded-For:简称XFF头,它代表客户端,用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For

(3)Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

(4)X-Real-IP一般只记录真实发出请求的客户端IP,看下面的例子,

X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3
  代表 请求由1.1.1.1发出,经过三层代理,第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源IP4.4.4.4是第三层代理
   如果配置了X-Read-IP,将会是:
  X-Real-IP: 1.1.1.1
  所以 ,如果只有一层代理,这两个头的值就是一样的

(5)Accept-Language请求头允许客户端声明它可以理解的自然语言,以及优先选择的区域方言

还是不太懂,看一下源码:

对用户名和密码进行了过滤

image-20210720122609663

image-20210720122751612

不过没有对useragent过滤

image-20210720122937168

所以可以在user-agent进行注入

怎么注入呢?由源码可知,输入了正确的用户密码后才能将user-agent的内容显示出来,怎么获得用户名和密码这是一个问题.

密码不知道怎么获得,我太菜了.

查了数据库,得到了一个用户名和密码,输入后显示user-agent

image-20210720125907796

它报错了,接下来可以报错注入

image-20210720130058852

试了半天怎麽都注入不出来,后来发现需要构造三个参数,因为插入了三个参数,uagent,ip,username

构造1',1,updatexml(1,concat(0x3a,database(),0x3a),1))#,终于成功了

image-20210720132004968

爆表名,好吧,它太长了

image-20210720132445665

用limit限制

image-20210720132523509

接下来的套路就略过了

Less-19 Http头注入-Refer-报错注入

登录账户后没有反应,怎么回事

image-20210720154748101

随便输入则显示登录失败

image-20210720154834679

不知道咋回事,先看一看源码

对用户名和密码检查

image-20210720155047684

登录成功后将refer插入,然后输出.发现有一句话用的mysql_query()难怪登录成功后不显示信息

image-20210720155147596

改成mysqli_query后,页面正常了

获得数据库名

image-20210720155749835

接下来步骤略过

Less-20 cookie注入-User agent-报错注入

登录账户,显示下面的东东,怎麽回事呢?

image-20210720160156078

仔细看这一条,它返回了我登陆后的cookie

image-20210720162217434

看看源码:登录后将用户名设置位cookie,生命周期为1h

image-20210720162636103

但是,这个cookie有注入点吗?请看下面的源码

image-20210720162730695

将设置的cookie带入到数据库中查询

说实话,这个源码也许单纯是为了让练习才刻意这样写的,看的我一愣一愣的

看懂了源码,明白了接下来的操作:修改cookie值就完事了

使用cookie editor编辑cookie

将cookie值修改为'看看,报错了,嗯,这正是俺想看到的

image-20210720163755002

改成1' and 1=1#,什么??它骂人...

image-20210720163947458

字段名为3

image-20210720164454405

可用字段名为2,3

image-20210720164548045

爆数据库名

image-20210720164616585

害,接下来就略过吧,老套路了

标签:20,Less,Labs,Sqli,报错,cookie,POST,字段名,注入
来源: https://www.cnblogs.com/AlucardLink/p/15035997.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有