sqli-labs less18

管理员 2020-01-02 PM 89℃ 0条

1.这一题跟前面的题型都不同,无论在username 跟 password 输入什么都会失败,但是前端却始终显示着你的IP地址。查看后端代码发现是对表单输入的参数进行了过滤

$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);

2.这里我推测可以使用http头注入,关于http请求头的一些参数

这里列出几个常用请求头:

  • Host
    Host请求报头域主要用于指定被请求资源的Internet主机和端口号。
    如:Host: localhost:8088
  • User-Agent
    User-Agent请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务器。登录一些网站时,很多时候都可以见到显示我们的浏览器、系统信息,这些都是此头的作用。
    如:User-Agent: Mozilla/5.0
  • Referer
    Referer包含一个URL,代表当前访问URL的上一个URL,也就是说,用户是从什么地方来到本页面。
    如:Referer: http://localhost:8088/sqlilabs/Less-18/
  • Cookie
    Cookie是非常重要的请求头,它是一段文本,常用来表示请求者身份等。
    如:Cookie: username=admin; password=admin
  • Range
    Range可以请求实体的部分内容,多线程下载一定会用到此请求头。
    如:表示头500字节:Range: bytes=0~499
      表示第二个500字节:Range: bytes=500~999
      表示最后500字节:Range: bytes=-500
      表示500字节以后的范围:Range: bytes=500-
  • X-Forwarded-For
    X-Forwarded-For即XXF头,它代表请求端的IP,可以有多个,中间以逗号隔开。
    如:X-Forwarded-For: 8.8.8.8
  • Accept
    Accept请求报头域用于指定客户端接收哪些MIME类型的信息。
    如:Accept: text/html
  • Accept-Charset
    Accept-Charset请求报头域用于指定客户端接收的字符集。如果在请求消息中没有设置这个域,默认是任何字符集都可以接收。
    如: Accept-Charset: gb2312

3.由于需要修改http请求包,所以我使用burpsuite进行测试。

捕捉到请求包后发送到重放攻击模块

4.既然页面显示了我的ip,一开始我推测是XFF注入,但是抓包后发现没有使用XFF,这就有点摸不着头了,username 跟password 做了输入过滤,没办法在那里注入。

原来后端是使用 REMOTE_ADDR 直接根据TCP协议数据包的底层会话IP地址 获取我的ip地址。

$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR'];

实在没辙那我登录一个弱口令账号 admin admin 上去看下

发现登录成功后页面显示了我的ip,和user-agent

根据我的推测,系统因该是把用户每次登录的IP 跟user-agent保存了下来。这让我想起了一句经典名言”有数据交互的地方就有注入“,那么我们可以尝试在请求包的user-agent里面做文章,

当我在user-agent的后面加了个单引号后,果然报错了

那既然有报错,那就肯定有sql注入,这里我们根据以往的经验可以使用报错注入的方法。

这是后端把数据记录到数据库中的代码:

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

通过这段sql语句我们可以构造注入payload,在user-agent里面添加payload

' and updatexml(1,concat(">",database(),"<"),1))#

成功使用报错注入获取了数据库名

后面的一些查表查字段的操作可以参考之前的

标签: user-agent注入

非特殊说明,本博所有文章均为博主原创。

上一篇 sqli_labs less19
下一篇 sqli-labs less17

评论啦~