hhd


  • 首页

  • 分类
  • shake it!!!

盲注小解

发表于 2017-09-07 | 分类于 sql注入

一.基于布尔的SQL注入

  1. left(database(),1) 截取该数据库前1位。

  2. ascii(substr((select table_name information_schema.tables where tables_schema =database()limit 0,1),1,1)) substr表示从第几位截取多少长度

  3. ord(mid((select ifnull(cast(username as char),0x20)from security.users order by id limit 0,1),1,1)) mid表示从第几位截取到第几位 ord=ascii

  4. 正则暂时不介绍。

  5. select user() like ‘ro%’ like表示模糊匹配

基于时间的SQL盲注

  1. If(ascii(substr(database(),1,1))>115,0,sleep(5)) 如果错误延时五秒。

  2. BENCHMARK(100000,MD5(1))可以代替sleep(5),不过需要占用很多的cpu资源。

基于报错的SQL注入(暂时不讲)

sql注入总结

发表于 2017-09-07 | 分类于 sql注入

重新来写这个总结。
发现以前写的太机械,其实在做题过程中,很多种情况有不同的方法。
我之前写的感觉不像ctf方向,这次就从 ctf方向 写起。


一些心得(无前后顺序)

1.看页面代码,一般里面会有一些特殊的信息。

2.判断是否直接打印出query结果,这很重要,在我看来,如果直接打印就比较方便,可以很快得出你想要的结果。但是如果不是,可能需要通过盲注等方法获取

3.一些存着的语句,其实每次sql打字都很费时啊,要是直接可以复制粘贴岂不是美滋滋。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
判断字段数:?id=0' union select * from 表名 order by 数字 #
判断字段数:?id=0' union select 1,2,3--+
得出数据库等信息:?id=0' union select 1,group_concat(schema_name),3 from information_schema.schemata--+
判断数据库版本:?id=1' and left(select version(),1)=4--+
判断数
据库名:?id=1' and left(database(),1)='u'--+
判断表名:?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database()limit 0,1),1,1)))=数字(这些盲注很多可以利用burpsuite)
判断库名:?id=1' and if(ascii(substr(database(),1,1))=115,1,sleep(5))
利用时间盲注

其实以上语句只是为了给我方便,但很多时候他都需要有一些灵活的改变,比如id那里可能本身他就是整数类型,也可能这个程序他过滤了引号等等等等。所以还是需要根本情况而定,耐心很重要。

4.一些注意点,关于url及其他语言的小知识

1
2
若空格被过滤,可以用%a0或者/**/代替,注释--+也可以用%23代替
我们通常需要在尾部加注释,平常的注释用的是#或者是-- 但是在url里面使用--+


一些书本知识

一.识别数据库
识别DBMS是很重要的,因为不同的系统注入还是有差别的。
asp和.net一般用sql server 做后台数据库;php很可能是mysql;应用如果是java写的,一般是oracle或者mysql;安装IIS的很可能是sql server;运行apache和php的linux服务器很可能是开源的mysql。
如果DBMS处于非盲态,那通过错误反馈一般可以知道DBMS的类型,但是如果处于盲态,必须通过一些查询注入才能得知。
1.非盲态跟踪
加引号,sqlserver和mysql都会在错误反馈中直接显示,oracle则会显示ORA,因为oracle有一个oracle错误消息库
关于sql server的几个内置变量:
@@version 数据库版本 @@servername 安装sql server的服务器名称 @@language 当前所使用语言的名称 @@spid 当前用户的进程ID(记住这个我也不懂怎么注入sql server呀!)
2.盲跟踪
一些简单的语法知识就不讲了
详细讲一下union查询
用union查询最重要的一点就是必须要两条语句列数相同,从本篇最上面的猜解字段我们可以判断列数,easy~接着就是类型相同,大多是字符串类型,所以一般不需要太注意
三种DBMS都可使用order by,也可以使用select 1,2,3…不过前者速度更快,而且在数据库日志中留下的痕迹少…
哦,对了,%2B是加好的意思,因为加号在html里面会被注释
有些时候你必须保证这个数据是字符串类型,需要用到强制转换,虽然我觉得不怎么用到,反正我做了一点点注入是没遇到过,但是还是记录下。
sql server:select cast(‘123’,varchar)
mysql:select cast(‘123’,char)
oracle:select cast(1,varchar) from dual
还有一个注意点,就是如果是返回几行数据的,你需要注意,union前面的条件需要为假才能使你这个查询有效。


基于时间的盲注

基本套路:if(条件,ture怎么办,false怎么办)
sleep():从时间长度判断是否正确,一般加在false里面
无法基于布尔盲注的情况下采用时间盲注


burpsuite下的sql注入

burpsuite中的intruder:手工帮你爆破,在猜解数据库名,表名,字段数时尤为有用,不过便捷程度小于sqlmap


还有一些要补充的,比如绕过之类的,晚上回来重点学文件包含和sql注入绕过以及sqlmap的使用。

ctf中的编码与加密

发表于 2017-09-07 | 分类于 ctf.杂项

以“wy is pig”来表现各种编码的不同。目的是看到这种类型的字符串大概认得是哪种编码

1.ascii码
119 121 32 105 115 32 112 105 103

2.base64编码
d3kgaXMgcGln

3.shellcode编码
\x77\x79\x7f\x69\x73\x7f\x70\x69\x67

4.quoted printable编码
http://www.mxcz.net/tools/QuotedPrintable.aspx
无法知晓,大概是这种类型
=E6=95=8F=E6=8D=B7=E7=9A=84=E6=A3=95=E8=89=B2=E7=8B=90=E7=8B=B8=E8=B7=B3=E8
=BF=87=E4=BA=86=E6=87=92=E6=83=B0=E7=9A=84=E7=8B=97

5.xxencode编码
http://web.chacuo.net/charsetxxencode

8RrYUOLAUQ4Zb0U++

它所选择的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64个字符。跟base64打印字符相比,就是UUencode多一个“-” 字符,少一个”/” 字符。

6.uuencode编码
http://web.chacuo.net/charsetuuencode
所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中。
*=WD@:7,@<&EG”@``

7.url编码
个人建议用burp
%77%79%20%69%73%20%70%69%67

8.unicode编码
http://www.mxcz.net/tools/Unicode.aspx
wy is pig

9.escape编码
http://web.chacuo.net/charsetescape
%u0077%u0079%u0020%u0069%u0073%u0020%u0070%u0069%u0067

10.html实体编码
http://www.w3school.com.cn/tags/html_ref_entities.html
这…懒得看

11.敲击码
个人觉得这很神奇
敲击码表如下

1 2 3 4 5
1 A B C/K D E
2 F G H I J
3 L M N O P
4 Q R S T U
5 V W X Y Z

5,2 5,4 2,4 4,3 3,5 2,4 2,2

12.莫尔斯电码
http://rumkin.com/tools/cipher/morse.php
莫尔斯 电码表如下

A .- N -. . .-.-.- + .-.-. 1 .—-
B -… O — , –..– _ ..–.- 2 ..—
C -.-. P .–. : —… $ …-..- 3 …–
D -.. Q –.- “ .-..-. & .-… 4 ….-
E . R .-. ‘ .—-. / -..-. 5 …..
F ..-. S … ! -.-.– 6 -….
G –. T - ? ..–.. 7 –…
H …. U ..- @ .–.-. 8 —..
I .. V …- - -….- 9 —-.
J .— W .– ; -.-.-. 0 —–
K -.- X -..- ( -.–.
L .-.. Y -.– ) -.–.-
M – Z –.. = -…-

.– -.– / .. … / .–. .. –.

13.文本加密为盲文
http://www.qqxiuzi.cn/bianma/wenbenjiami.php
未用密码的情况下:揪晕疆枨嚼疆停枨撺=

14.栅栏密码
http://www.practicalcryptography.com/ciphers/classical-era/rail-fence/
栅栏密码(Rail-fence Cipher)就是把要加密的明文分成N个一组,然后把每组的第1个字符组合,每组第2个字符组合…每组的第N(最后一个分组可能不足N个)个字符组合,最后把他们全部连接起来就是密文,这里以2栏栅栏加密为例。

15.曲路密码
曲路密码(Curve Cipher)是一种换位密码,需要事先双方约定密钥(也就是曲路路径)。

明文:The quick brown fox jumps over the lazy dog

填入5行7列表(事先约定填充的行列数)

加密的回路线(事先约定填充的行列数)

密文:gesfc inpho dtmwu qoury zejre hbxva lookT

16.列移位密码
http://www.practicalcryptography.com/ciphers/classical-era/columnar-transposition/
就是利用密钥=列数按字母表排序,然后将密码排成几行几列,按顺序将列排序。

17.埃特巴什码
http://www.practicalcryptography.com/ciphers/classical-era/atbash-cipher/
按字母倒序
ABCDEFGHIJKLMNOPQRSTUVWXYZ
ZYXWVUTSRQPONMLKJIHGFEDCBA

18.凯撒密码
向后偏移x位
http://planetcalc.com/1434/

19.ROT5/13/18/47

ROT5 是 rotate by 5 places 的简写,意思是旋转5个位置,其它皆同。下面分别说说它们的编码方式:

ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。

ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。

ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。

ROT47:对数字、字母、常用符号进行编码,按照它们的ASCII值进行位置替换,用当前字符ASCII值往前数的第47位对应字符替换当前字符,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126,具体可参考ASCII编码,下面以rot13以例。

20.简单替换密码
https://quipqiup.com/
简单换位密码(Simple Substitution Cipher)加密方式是以每个明文字母被与之唯一对应且不同的字母替换的方式实现的,它不同于恺撒密码,因为密码字母表的字母不是简单的移位,而是完全是混乱的。

ctf.杂项.1

发表于 2017-09-07 | 分类于 ctf.杂项

这次是对上次某被日平台未继续的比赛的总结。

第一题:base base base

想到了三次base,发现没出来,然后队友解出是 base64 base32 base16

第二题:颜文字

根据以前做题经验,是一段 Js代码 ,放入 控制器 里面就可以运行。

第三题:压缩文件

反正是 真加密 ,暂时未解。

第四题:忘记了

关于解密,->莫尔斯密码->ascii码->颠倒->栅栏密码(2位)->凯撒密码

第五题:flag

下载了压缩文件发现只有sounds.mp3,用 mp3stego 解析需要密码。我们想到有可能是那只小狗 图片隐写 ,果然…而且看题目weborstega,我选择隐写。然后用 winhex 截取了一个password.txt,结果密码不知道到哪里结束,所以输入到mp3stego里面密码错误。后来用 kali 的 foremost 功能,需要加 -T ,然后分离出来了真正的password.txt文件,最后成功。

php第二篇

发表于 2017-09-03 | 分类于 php

1.isset():判断表单是否填入数据
2.trim():去除空格
3.nl2br():避免html的过滤空格功能
4.printf中%%表示%(转义)
5.strtoupper():转换为大写
6.strtolower():转换为小写
7.ucfirst():如果字符串第一个为字母则转换为大写
8.ucwords():将每个单词转换为大写
9.插入到数据库中会引起问题的三个字符:引号,反斜杠,Null
10.explode():分隔字符
11.addslashes():传到数据库之前转换格式
12.stripslashes():数据库到网站
13.strtok():一次提取一个分隔符之前的字符串
14.substr():三个参数:字符串,开始字符,长度
15.strcmp():比较字符串
16.strcasecmp():不区分大小写
17.strnatcmp():比较字符串(自然排序)
18.strlen():得出字符串长度
19.strstr():查找字符串,返回查找的字符串
20.strpos():查找字符串,返回字符串位置
21.false用===来表示
22.str_replace():第一个参数被替换的子字符串;第二个参数要替换的子字符串;第三个参数字符串,第四个可选替换次数
23.subtsr_replace:字符串,要替换的子字符串,开始,长度

php第一篇

发表于 2017-08-26 | 分类于 php

练车回来的猪
1.echo 打印东西到屏幕
2.// /* 都表示注释
3.作为字符串连接符.
4.date()返回当前时间,一般用法:date(H:i,js,F,Y)
5.接受html值,有其一;;;
6.特殊类型:NULL和resource
7.phpinfo:查看系统自带常量
8.define(,)定义常量
9.注意!==与!= ===与==
10.执行操作符:’’
11.错误抑制符:@
12.instanceof:判断是否是属于某个特定类
13.is_numeric:判断是否是数字类型
14.number_format():保留小数,位数自定
15.gettype:得到变量类型
16.settype:确定变量类型
17.isset()判断变量是否存在
18.unset():销毁变量

python.1

发表于 2017-08-23 | 分类于 python

python之前看完了基础知识,然后废了一段时间,看到文件异常那一章,脑子里一片空白,觉得是时候复习了,像语言类的东西必须要写几个实用程序才能巩固,但是我主要是太懒。

python变量与c语言变量大致相同,定义变量时无需声明类型。

字符串相关

用print打印字符串

关于字符串大小写的函数:

  1. upper():全都转换为大写
  2. lower():全都转换为小写
  3. title():转换为标题形式

以上函数都是引用式,示例:print(hhd.title())

关于字符串合并:使用+号连接字符串

关于删除字符串空白(\t或\n)的函数:

  1. rstrip():删除字符串右边空白
  2. lstrip():删除字符串左边空白
  3. strip():删除字符串左右空白

数据类型简介

  1. 数字:没用小数点就是整数,用了小数点就是浮点数
    同样,3/2=1,3.0/2=1.5
  2. 字符串:不像c语言,python不分字符与字符串,看到这里是不是泪牛满面!
1
2
age=23
print age

上述这样是会出错的,因为age不是字符串,是一个数字,python不知道如何解读,所以我们需要将age转换成字符串再打印

1
2
age=23
print str(age)

注释:用#表示

123
hhd

hhd

i'm a good man.

27 日志
11 分类
11 标签
© 2017 hhd
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.2