<div style="font:14px/1.5 'Lucida Grande', '微软雅黑';color:#333;"><div>==========================</div><div>Advisory: GNUboard SQL Injection Vulnerability</div><div>Author: claepo.wang@xxxxxxxxxxxxxxxxxxxx</div><div>Affected Version: GNUboard5(the latest version)</div><div>Vendor URL: http://sir.co.kr/</div><div>Vendor Status: Unfixed(I know little about Korean, so i do not know how to describe this vul to the vendor.)</div><div><br></div><div>==========================</div><div>Vulnerability Description</div><div>==========================</div><div><br></div><div>Recently, I found several vulnerabilities in the famous Korean forum program - the GNUboard.</div><div><br></div><div>Vulnerable file: /bbs/ajax.autosave.php</div><div><br></div><div><?php</div><div>include_once('./_common.php');//global filter on $_GET,$_POST,$_COOKIE,$_REQUEST</div><div><br></div><div>if (!$is_member) die('0');//member login</div><div><br></div><div>$uid = trim($_REQUEST['uid']); //current user id</div><div>$subject = trim(stripslashes($_REQUEST['subject'])); //stripslashes ignores the global filter causes a SQL Inj.</div><div>$content = trim(stripslashes($_REQUEST['content'])); //same above</div><div><br></div><div>if ($subject && $content) {</div><div> $sql = " select count(*) as cnt from {$g5['autosave_table']} where mb_id = '{$member['mb_id']}' and as_subject = '$subject' and as_content = '$content' ";</div><div> $row = sql_fetch($sql); //the bad str($subject|$content) insert into sql query</div><div> if (!$row['cnt']) {</div><div> $sql = " insert into {$g5['autosave_table']} set mb_id = '{$member['mb_id']}', as_uid = '{$uid}', as_subject = '$subject', as_content = '$content', as_datetime = '".G5_TIME_YMDHIS."' on duplicate key update as_subject = '$subject', as_content = '$content', as_datetime = '".G5_TIME_YMDHIS."' ";</div><div> $result = sql_query($sql, false); // database select</div><div><br></div><div> echo autosave_count($member['mb_id']);</div><div> }</div><div>}</div><div>?></div><div><br></div><div>==========================</div><div>POC && EXP</div><div>==========================</div><div><br></div><div>1. Login as a member</div><div><br></div><div>2. GET http://target/bbs/ajax.autosave.php?content=1&subject=1[inj_exp] </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{exp can be found on my server: http://pandas.pw/gnuboard.exp}</div><div> </div><div>3. Page returns 1062 : Duplicate entry ~admin~*FF6F916236F4FFEE8FADD21EC20216C5C3A04E50~1' for key 'group_key'.</div><div><br></div><div>====================</div><div><br></div></div>
Attachment:
gnuboard-kr.txt
Description: Binary data
_______________________________________________ Full-Disclosure - We believe in it. Charter: http://lists.grok.org.uk/full-disclosure-charter.html Hosted and sponsored by Secunia - http://secunia.com/