[16]-SQL注入之HTTP文件头注入

一、HTTP头注入

1.HTTP头注入

  1. 隐蔽的注入点
    所有web层与数据库的交互的输入,只要没严格审计,都有可能存在注入点,但可能比较隐蔽
  2. 场景示例---HTTP头注入
    访问webserver,会从http头部提取出浏览器信息存入数据库

2.实战

  1. 环境

    • bwapp

    • low

    • SQL Injection - Stored (User-Agent)

  2. 找注入点
    正常打开页面,发现页面返回记录了访问信息,其中包括http头部的User-Agent,尝试利用http头注入。
    image-20230331093358982

  3. 注入点判断
    通过修改http头的user-agent以判断是否能够进行注入
    打开BurpSuit抓包,在代理->历史中找到对应包,右击send to repeater在repeater中修改包。
    使用单引号判断法,发现能够进行注入:
    image-20230331094001501

  4. 构造原始注入语句
    回到webapp页面,思考功能构成
    在本节第2步中,我们通过页面回显,猜测当用户访问时,后端的Data是自动生成的,无法修改,IP Address应当是拿的HTTP的,User-Agent也应当从HTTP头部中拿来的。
    因此,后端对数据库的操作应当是先insertselect回显给前端。
    思考SQL插入语句构成,如下:

    $ip_address = 
    $user_agent = 
    sql = insert into table_name (ip_address, User_agent) value($ip_address,$user_agent)
    

    根据插入语句,尝试构造原始语句:

    $ip_address = 1’,‘2’); #
    # 参数进入后,sql语句更改为
    sql = insert into table_name (ip_address, User_agent) value(‘1’,‘2’); #,$user_agent)
    

    注意,这里都是字符型,因此需要使用单引号进行闭合。
    构造完成后,使用BurpSuit尝试进行注入,发现注入成功。
    image-20230331102205371

  5. 修改原始语句,进一步获取数据库信息
    利用information_schema表,得到bWAPP数据库中所包含的表的信息

    User-Agent: 1', (select TABLE_NAME from information_schema.tables where table_schema='bWAPP' limit 3,1)); #
    

    测试返回结果如下,limit多次后得到user表,猜测存在用户信息
    image-20230331111644821

  6. 获取表头信息(列/属性名)
    上文以及知道users表可能存放用户信息,进一步构造语句得到其中信息
    要想获得表中信息,首先要获取属性名,然后根据属性名获取其中内容。
    同样利用information_schema表以及group_concat()函数,重新构造语句,获取users列(属性)名

    User-Agent: 1', (select group_concat(COLUMN_NAME) from information_schema.columns where table_name='users')); #
    

    结果如下:
    image-20230331113057809

  7. 获取用户名及密码
    构造

    User-Agent: 1', (select group_concat(login,password) from users)); #
    

    结果见下图,但我们注意到显示有限,因此为得到bee账户密码,可以添加limit一条一条的取
    image-20230331113656368

  8. 尝试撞出密码
    去除密码,使用彩虹表尝试破解密码
    cmd5网站输入密文,得到密码为bug,见下图:
    image-20230331114049038

3.总结

  1. 技能
    • 新掌握HTTP头注入
    • 拓展找注入点的思路,谨记所有web层与数据库交互的点都有可能
  2. 收获
    • 半独立挖洞:本文注入点由老师判断,后续结合前面章节自主完成
    • payload撰写:主要在于对SQL理解,挖洞时可配合本地mysql进行语句测试
    • group_concat()函数使用
    • limit使用
    • 利用information_schema得表名、表头
  3. 思路
    • 更清晰挖洞流程---判断->功能分析->构造原始语句->获取敏感信息
    • 拓展挖掘思路
    • 学习挖洞方法

二、练习

后续补上

1.基础题

  1. 描述
    利用SQL盲注完成HTTP头注入

2.提高题

  1. 描述
    尝试使用两种以上不同的mysql函数完成盲注

3.进阶题

  1. 描述
    修改$user-agent$ip_address的位置,尝试注入
posted @ 2023-03-31 12:11  缪白(Miubai)  阅读(201)  评论(0编辑  收藏  举报